Oracle RMAN Recover中使用BBED跳过缺失的归档继续Recover的测试(四)
afile Checkpoint SCN和Start SCN号都相同时,数据库可以正常启动,不需要做mediarecovery.三者当中有一个不同时,则需要做media recovery。
如果在启动的过程中,EndSCN号为NULL,则需要做instance recovery。ORACLE在启动过程中首先检查是否需要media recovery,然后再检查是否需要instance recovery。
在进行recovery的时候,我们根据归档,推进START SCN,但是归档缺失,导致无法推荐,数据库也无法启动。
我们这里缺失的是153的归档,我们只需要手工的修改datafile header,让数据库认为这个归档已经恢复了,即可。 这是一种欺骗行为,虽然可以继续,但还是会出现问题。
可以使用如下方法确定具体缺失的归档SCN,然后使用BBED 跳过这些SCN 即可。
SQL> selectsequence#,first_change#,next_change# from v$archived_log;
SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
---------- ------------- ------------
148 3834837 3835155
149 3835155 3835184
150 3835184 3835498
151 3835498 3835507
152 3835507 3836001
153 3836001 3836079
154 3836079 3836303
7 rows selected.
这个正好与我们之前RMAN 错误一致:
RMAN-03002: failure of recover command at07/06/2013 23:23:48
RMAN-06053: unable to perform mediarecovery because of missing log
RMAN-06025: no backup ofarchived log for thread 1 with sequence 153 and starting SCN of 3836001 foundto restore
2.6.2 使用BBED 推进所有DATAFILE header SCN
这里,我们只修改kscnbas的值:
kscnbas (at offset 484) - SCN of lastchange to the datafile.
BBED> info
File# Name Size(blks)
----- ---- ----------
1 /u01/app/oracle/oradata/dave/system.256.816661027 129280
2 /u01/app/oracle/oradata/dave/sysaux.257.816661033 97280
3 /u01/app/oracle/oradata/dave/undotbs1.258.816661037 9600
4 /u01/app/oracle/oradata/dave/users.259.816661039 640
5 /u01/app/oracle/oradata/dave/undotbs2.265.816661787 12800
6 /u01/app/oracle/oradata/dave/dave01.dbf 393216
7 /u01/app/oracle/oradata/dave/dave02.dbf 6400
+++我们需要将所有datafile 的SCN从3836001 推到3836079:
SQL> selectto_char('3836079','xxxxxxxxx') from dual;
TO_CHAR('3
----------
3a88af
因此我们的kscnbas 的新值是:0x003a88af。
但是注意,对于little-endian的format,他存储是先存储低位的,因此实际block 存储的是:af883a00.
我们需要使用BBED 将所有datafileheader 的@484 的值修改成:af883a00。
BBED> d /v dba 1,1 offset 484
File:/u01/app/oracle/oradata/dave/system.256.816661027 (1)
Block: 1 Offsets: 484 to 499 Dba:0x00400001
-------------------------------------------------------
2b863a00 00000000 bfd1e130 01000000 l+.:........0....
<16 bytes per line>
BBED> modify /x af88 dba 1,1 offset 484
File: /u01/app/oracle/oradata/dave/system.256.816661027(1)
Block: 1 Offsets: 484 to 499 Dba:0x00400001
------------------------------------------------------------------------
af883a00 00000000 bfd1e130 01000000
<32 bytes per line>
BBED> sum dba 1,1 apply
Check value for File 1, Block 1:
current = 0xe9ba, required = 0xe9ba
+++按照同样的步骤,把剩下的6个datafile都修改。
--BBED 推荐成功:
SQL> selectfile#,checkpoint_change#,status from v$datafile_header;
FILE# CHECKPOINT_CHANGE# STATUS
---------- ------------------ -------
1 3836079 ONLINE
2 3836079 ONLINE
3 3836079 ONLINE
4 3836079 ONLINE
5 3836079 ONLINE
6 3836079 ONLINE
7