当前位置: 首页 > 数据库 > Oracle教程 > 正文

使用dump、BBED等多种工具结合恢复ORACLE实例的过程

时间:2016-07-30 csdn博客 还不算晕

---友情提示,内容较多,可以从博文左上的+目录选择小节方便阅读。

实验思路:  --实验相关TRACE文件:http://download.csdn.net/detail/q947817003/6646723

1.数据库OPEN,,做DML操作不提交,查看检查点。

2.SHUTDOWN ABORT并重启到MOUNT并查询检查点

3.DUMP控制文件查看CHECKPOINT_CHANGE#/RBA

4.DUMP数据文件查看CHECKPOINT_CHANGE#/RBA,与DUMP控制文件对比

5.DUMP REDO日志文件,查看、对比CHECKPOINT_CHANGE#/RBA

6.使用BBED查看数据文件头中的CHECKPOINT_CHANGE#/RBA

7.执行EVENT事件的语句,OPEN数据库,再DUMP控制文件

8.分析OPEN时,通过ALERT日志查看的恢复过程--前滚

9.分析OPEN时,EVENT事件生成的TRACE中查看恢复过程--前滚

10.OPEN数据库时,通过ALERT日志及EVENT事件生成的TRACE中信息解析实例恢复的回滚

11.分析OPEN后的控制文件信息

参考资料及感谢:

guoyJoe   http://blog.csdn.net/guoyJoe/article/details/9034425

dbsnake   http://www.dbsnake.com/oracle-instance-recovery-end-point.html

实验结论有:

1.控制文件提供恢复所需当前REDO日志的RBA信息,当前REDO日志提供具体的用于恢复的日志内容,最终是将日志内容应用于数据文件。--实例恢复三者不能缺。

2.数据库OPEN时开始实例恢复,先应用日志内容,应用完后从alert日志中来看是已经可以连接至数据库,此时如果UNDO未完成,就有用户发出操作,数据库进程会将回滚后的数据发送至用户--可能会有等待。

3.重要的一点,数据文件、当前REDO日志文件、控制文件正常时实例恢复无需DBA干预,自动完成哈哈。

4.如果当前REDO日志丢了,只能做不完全恢复了。

关于实例恢复起止点:--来自dbsnake

可能会出现On Disk RBA比Low Cache RBA小的情况,如果Oracle发现存在这种情况,则会强制写redo。

On Disk RBA只是表示Instance Recovery的时候至少要恢复到On Disk RBA,它只是真正的current redo log file的最尾端一个前镜像。

实例恢复的起点是:Low Cache RBA和Thread Checkpoint RBA中的较大值;实例恢复的终点就是current redo log file的最尾端。On-Disk RBA是要最低恢复到的位置--事实上是只要On-Disk RBA后还有日志块就要恢复完的。

Oracle在做实例恢复的时候是受隐含参数_two_pass的控制,其默认为true,这表示要Oracle做实例恢复的时候是采用Two Pass Recovery,即要扫描current redo log file两次。

Two Pass Recovery的核心是在做实例恢复时要去掉那些已经被写入数据文件的数据块所对应的redo record,Oracle称这些redo record为Block Written Record (BWR)。

###################################################################

1.数据库正常运行,多种途径查看数据库中检查点

在普通用户下执行DML操作不提交

BYS@ bys3>set time on

13:18:17 BYS@ bys3>select * from a;   --此表在USER表空间。

B

----------

55

8

0

3

13:18:21 BYS@ bys3>delete a;

4 rows deleted.

13:18:36 BYS@ bys3>select * from a;

no rows selected

再打开一个会话(同一会话切换用户会提交操作),多种途径查看数据库中检查点:详见:http://blog.csdn.net/q947817003/article/details/11590735

SYS@ bys3>set time on

13:18:44 SYS@ bys3>col name for a35

13:18:52 SYS@ bys3>select dbid,name,checkpoint_change# from v$database;

DBID NAME                                CHECKPOINT_CHANGE#

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

3358363031 BYS3                                           1991217

13:18:59 SYS@ bys3>select file#,name,checkpoint_change#,to_char(checkpoint_time,'yyyy-mm-dd hh24:mi:ss') cptime from v$datafile;

FILE# NAME                                CHECKPOINT_CHANGE# CPTIME

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

1 /u01/oradata/bys3/system01.dbf                 1991217 2013-12-02 13:17:26

2 /u01/oradata/bys3/sysaux01.dbf                 1991217 2013-12-02 13:17:26

3 /u01/oradata/bys3/undotbs01.dbf                1991217 2013-12-02 13:17:26

4 /u01/oradata/bys3/user01.dbf                   1991217 2013-12-02 13:17:26

13:19:25 SYS@ bys3>select name,checkpoint_change# from v$datafile_header;

NAME                                CHECKPOINT_CHANGE#

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

/u01/oradata/bys3/system01.dbf                 1991217

/u01/oradata/bys3/sysaux01.dbf                 1991217

/u01/oradata/bys3/undotbs01.dbf                1991217

/u01/oradata/bys3/user01.dbf                   1991217

当前当前REDO日志使用情况:

13:19:57 SYS@ bys3>col member for a30

13:20:01 SYS@ bys3>select a.member,a.type,b.thread#,b.sequence#,b.bytes/1024/1024 MB,b.status,b.archived from v$logfile a,v$log b where a.group#=b.group#;

MEMBER                         TYPE       THREAD#  SEQUENCE#         MB STATUS           ARC

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

/u01/oradata/bys3/redo01.log   ONLINE           1        106         50 INACTIVE         YES

/u01/oradata/bys3/redo02.log   ONLINE           1        107         50 CURRENT          NO

/u01/oradata/bys3/redo03.log   ONLINE           1        105         50 INACTIVE         YES

###################################################################

 

2.模拟断电--shutdown abort,并重启到MOUNT 查询检查点

13:20:02 SYS@ bys3>shutdown abort;    ----13:22:11执行完此命令

ORACLE instance shut down.

13:22:11 SYS@ bys3>

alert日志:  --推荐个小方法:把alert日志做一个软链接到ORACLE用户家目录,查看方便。

[oracle@bys3 ~]$ cat alert_bys3.log

Mon Dec 02 13:22:09 2013

Shutting down instance (abort)

License high water mark = 4

USER (ospid: 846): terminating the instance

Instance terminated by USER, pid = 846

Mon Dec 02 13:22:11 2013

Instance shutdown complete

######################################