当前位置:  数据库>oracle

使用BBED修改文件头解决数据库Open验证问题

    来源: 互联网  发布时间:2017-06-24

    本文导语: 笔者在《一次Oracle数据文件镜像丢失引起的故障解决》()中,使用了强制关闭数据库Open过程中完整性验证来开启数据库。除此之外,还可以使用数据文件头修改的方法,“骗过”Oracle启动机制。 本篇就通过BBED来模拟错误和进...

笔者在《一次Oracle数据文件镜像丢失引起的故障解决》()中,使用了强制关闭数据库Open过程中完整性验证来开启数据库。除此之外,还可以使用数据文件头修改的方法,“骗过”Oracle启动机制。

本篇就通过BBED来模拟错误和进行修复。注意:BBED是Oracle研究的利器,但是同样也可能是“塌天大祸”的起始。所以,如果没有100%把握,绝对不要轻易在投产环境上应用。作为技术人员,创新精神是可贵的,但是谨慎认真是更需要的一种职业素养。

1、环境说明

笔者使用Oracle 11gR2进行测试,具体版本为11.2.0.4。

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/SQL Release 11.2.0.4.0 - Production

CORE    11.2.0.4.0    Production

TNS for Linux: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 – Production

当前数据文件列表如下:

SQL> select file#, checkpoint_change#, checkpoint_time, name from v$datafile;

    FILE# CHECKPOINT_CHANGE# CHECKPOINT_TIME NAME

---------- ------------------ --------------- --------------------------------------------------------------------------------

        1            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_system_bw773xok_.dbf

        2            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_sysaux_bw773xpr_.dbf

        3            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_undotbs1_bw773xqo_.dbf

        4            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_users_bw773xrv_.dbf

        5            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_TESTdev_bw8xbqrz_.dbf

        6            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_inttestt_bw8xdnkt_.dbf

        7            1713752 2016/10/18 22:0 /u01/app/oracle/oradata/TESTDB/datafile/o1_mf_epssite_by19vtnh_.dbf

7 rows selected

2、故障模拟

笔者的思路是:在数据库正常运行过程中,抽取数据文件7。Datafile 7对应的是一个过去时间的SCN编号和文件头。之后,通过一系列的Online Redo Log切换、手工检查点操作,最后直接shutdown immediate关闭服务器动作,推动数据库所有数据文件SCN编号前进。

关闭之后,使用过去版本的数据文件7来替换文件。启动数据库进入open状态之后,如果当前online redo log已经乜有接续的文件(被覆盖+非归档),系统报错。

当前文件目录,拷贝留存一个旧版本的datafile 7。

[oracle@TESTlife datafile]$ ls -l

total 6482252

-rw-r-----  1 oracle oinstall 2017468416 Oct 18 22:05 o1_mf_epssite_by19vtnh_.dbf

-rw-r-----  1 oracle oinstall 1702895616 Oct 18 22:05 o1_mf_inttestt_bw8xdnkt_.dbf

-rw-r-----. 1 oracle oinstall    5251072 Oct 18 22:05 o1_mf_users_bw773xrv_.dbf

(篇幅原因,有省略……)

[oracle@TESTlife datafile]$ cp o1_mf_epssite_by19vtnh_.dbf o1_mf_epssite_by19vtnh_.dbf_bk

[oracle@TESTlife datafile]$ ls -l

total 8452440

-rw-r-----  1 oracle oinstall 2017468416 Oct 18 22:05 o1_mf_epssite_by19vtnh_.dbf

-rw-r-----  1 oracle oinstall 2017468416 Oct 18 22:12 o1_mf_epssite_by19vtnh_.dbf_bk

-rw-r-----  1 oracle oinstall 1702895616 Oct 18 22:05 o1_mf_inttestt_bw8xdnkt_.dbf

-rw-r-----  1 oracle oinstall 1283465216 Oct 18 22:05 o1_mf_TESTdev_bw8xbqrz_.dbf

-rw-r-----. 1 oracle oinstall  597696512 Oct 18 22:10 o1_mf_sysaux_bw773xpr_.dbf

多次切换日志,进行检查点操作。

SQL> alter system switch logfile;

System altered

(篇幅原因,有省略……)

SQL> alter system checkpoint;

System altered

SQL> alter system switch logfile;

System altered

SQL> select group#, status, FIRST_CHANGE# from v$log;

    GROUP# STATUS          FIRST_CHANGE#

---------- ---------------- -------------

        1 CURRENT                1714475

        2 INACTIVE              1714464

        3 INACTIVE              1714467

关闭数据库,强行使用旧版本文件替换。

[oracle@TESTlife datafile]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.4.0 Production on Tue Oct 18 22:14:53 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

SQL> conn / as sysdba

Connected.

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

[oracle@TESTlife datafile]$ cp o1_mf_epssite_by19vtnh_.dbf o1_mf_epssite_by19vtnh_.dbf_bk_f

[oracle@TESTlife datafile]$ ls -l

total 10422628

-rw-r-----  1 oracle oinstall 2017468416 Oct 18 22:15 o1_mf_epssite_by19vtnh_.dbf

-rw-r-----  1 oracle oinstall 2017468416 Oct 18 22:12 o1_mf_epssite_by19vtnh_.dbf_bk

-rw-r-----  1 oracle oinstall 2017468416 Oct 18 22:20 o1_mf_epssite_by19vtnh_.dbf_bk_f

-rw-r-----  1 oracle oinstall 1702895616 Oct 18 22:15 o1_mf_inttestt_bw8xdnkt_.dbf

-rw-r-----  1 oracle oinstall 1283465216 Oct 18 22:15 

[oracle@TESTlife datafile]$ cp o1_mf_epssite_by19vtnh_.dbf_bk o1_mf_epssite_by19vtnh_.dbf

启动数据库,在open过程中报错。

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area 3540881408 bytes

Fixed Size                  2258320 bytes

Variable Size            855640688 bytes

Database Buffers        2667577344 bytes

Redo Buffers              15405056 bytes

Database mounted.

ORA-01113: file 7 needs media recovery

ORA-01110: data file 7:

'/u01/app/oracle/oradata/TESTDB/datafile/o1_mf_epssite_by19vtnh_.dbf'

使用redo log进行修复,失败。

SQL> recover datafile 7

ORA-00279: change 1713752 generated at 10/18/2016 22:00:25 needed for thread 1

ORA-00289: suggestion :

/u01/app/oracle/fast_recovery_area/TESTDB/archivelog/2016_10_18/o1_mf_1_60_%u_.a

rc

ORA-00280: change 1713752 for thread 1 is in sequence #60

Specify log: {=suggested | filename | AUTO | CANCEL}

ORA-00308: cannot open archived log

'/u01/app/oracle/fast_recovery_area/TESTDB/archivelog/2016_10_18/o1_mf_1_60_%u_.

arc'

ORA-27037: unable to obtain file status

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

故障出现,尝试进行修复。

更多详情见请继续阅读下一页的精彩内容:


    
 
 

您可能感兴趣的文章:

  • 使用Linux/UNIX的系统用户进行PHP用户登录验证
  • jquery内置验证(validate)使用方法示例(表单验证)
  • php使用filter过滤器验证邮箱 ipv6地址 url验证
  • 下载的linxu如何使用md5文件进行验证?
  • 使用python装饰器验证配置文件示例
  • asp.net使用ODP即oracle连接方式的的防注入登录验证程序
  • JavaScript 使用正则表达式进行表单验证的示例代码
  • jquery 表单验证插件Parsley.js使用说明
  • c#使用正则表达式匹配字符串验证URL示例
  • PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
  • 使用代码验证linux子进程与父进程的关系
  • ThinkPHP验证码使用简明教程
  • 我的代码中已经假如smtp认证,为什么在tomcat上还提示客户端没有验证?使用smtp.sohu.com或smtp.sina.com.cn都不行代码如下:
  • Python代理抓取并验证使用多线程实现
  • java验证码组件kaptcha使用方法
  • javascript中使用正则表达式进行字符串验证示例
  • 使用jaxws建立webservice客户端并实现soap消息的handler验证示例
  • 如何使用JavaScript和正则表达式进行数据验证
  • 如何在JSP中使用JAVAMAIL发送需要身份验证的信件???
  • 天翼开放平台免费短信验证码接口使用实例
  • linux/Centos/ubuntu下如何使用umask命令修改新建文件时的默认权限
  • 使用SSH修改linux密码的问题
  • 如何在使用命令行去修改系统脚本?
  • 关于使用SHELL修改文件的
  • 大家修改内核时使用哪个编辑器?
  • 请问如何在一个文件系统修改源码管理并使用多个卷(存储设备)
  • ORACEL使用脚本来修改表结构
  • ORACLE 修改表结构 之ALTER CONSTAINTS的使用
  • 请问如何使用系统命令修改系统参数
  • 有没有方法可以使用脚本批量修改bash环境变量
  • 如何修改tomcat.sh文件,限定java使用的内存?????
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mysql数据库下载安装教程和使用技巧
  • 大家在UNIX下都使用什么数据库?使用什么做数据开发?
  • mongodb 数据库常用命令使用实例
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • 请教在linux系统开发环境下,有没有db和dbf数据库引擎,如何使用这个数据库?
  • 使用php语句将数据库*.sql文件导入数据库
  • 使用JDBC连接数据库时Class.forName()语句的使用疑问
  • 如何使用jsp显示数据库中的数据?
  • 收缩后对数据库的使用有影响吗?
  • 当发布的程序中含有数据库的使用时,...?
  • 如何强制删除或恢复SQLServer正在使用的数据库
  • 一个数据库函数的使用?
  • 嵌入式linux下数据库使用
  • 请教数据库连接池的使用....
  • 在tomcat 中使用jdbcrealm是否一定要在数据库中建立用户表和 角色表
  • 超酷数据库工具发布(JAS), 欢迎使用
  • linux下使用易飞ERP系统出现“报表数据库连接错误!!”是怎么回事
  • linux下服务器开发一般使用什么数据库?
  • linux使用mysql删除数据库的问题,谢谢!
  • 请问如何在jsp中使用JDBC动态更新数据库?
  • 关于使用数据库连接的问题。
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • mysql数据库下载安装教程和使用技巧 iis7站长之家
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • Office 2010 Module模式下使用VBA Addressof
  • c#中SAPI使用总结——SpVoice的使用方法
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • 使用了QWidget的程序,如何使用后台程序启动它?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3