Oracle 跨resetlogs的恢复

 
10g之前,如果采用了resetlogs打开数据库, 必须进行全备份,因为以前的归档日志对于以后
恢复将不在起作用。即ORACLE不能跨越incarnation恢复。因为scn和日志序列号都被重置。10g
之后。ORACLE可以跨越incarnation恢复,(很多高手还是建议resetlogs之后全备).测试过程如下:
SQL> create table mytest as select * from dba_objects where rownum>11
  2  /
表已创建。
SQL> alter system checkpoint
  2  /
系统已更改。

然后执行全备:
RMAN> backup database;
启动 backup 于 04-7月 -10
 ....省略
完成 backup 于 04-7月 -10
SQL> alter system switch logfile
  2  /
系统已更改。
SQL> select recid,sequence#,first_change#,next_change# from v$archived_log
  2  /
     RECID  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#                               
---------- ---------- ------------- ------------                               
         1         30        511526       522464                               
         2         30        511526       522464                               
         3         31        522464       522646                               
         4         31        522464       522646
再插入10条记录
SQL> insert into mytest select * from mytest;
已创建10行。
SQL> commit
  2  /
提交完成。                                                           
SQL> alter system checkpoint
  2  /
系统已更改。
SQL> alter system switch logfile
  2  /
系统已更改。
SQL> select recid,sequence#,first_change#,next_change# from v$archived_log
  2  /
     RECID  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#                               
---------- ---------- ------------- ------------                               
         1         30        511526       522464                               
         2         30        511526       522464                               
         3         31        522464       522646                               
         4         31        522464       522646                               
         5         32        522646       523748                               
         6         32        522646       523748                               
已选择6行。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area  603979776 bytes                                      
Fixed Size                  1250380 bytes                                      
Variable Size             167775156 bytes                                      
Database Buffers          427819008 bytes                                      
Redo Buffers                7135232 bytes                                      
数据库装载完毕。
RMAN> restore database;
RMAN> list incarnation;
数据库原型列表
DB 关键字  Inc 关键字 DB 名  DB ID            STATUS  重置 SCN  重置时间
------- ------- -------- ---------------- --- ---------- ----------
1       1       ANRAN    885607663        CURRENT 1          04-7月 -10
恢复到sequence 32:
RMAN> recover database until sequence 32 ;
启动 recover 于 04-7月 -10
使用通道 ORA_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 31 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ARCH01\ARC00031_07234
68783.001 存在于磁盘上
存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\ARCH01\ARC00031_0723468783.001 线程 =1
序列 =31
介质恢复完成, 用时: 00:00:04
完成 recover 于 04-7月 -10
SQL> alter database open resetlogs;
数据库已更改。
SQL> select count(1) from mytest
  2  /
  COUNT(1)                                                                     
----------                                                                     
        10
恢复完成。
添加10行数据:
SQL> insert into mytest select * from mytest;
已创建10行。
SQL> alter system switch logfile
  2  /
系统已更改。
SQL> alter system switch logfile
  2  /
系统已更改。
SQL> select recid,sequence#,first_change#,next_change# from v$archived_log
  2  /
     RECID  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#                               
---------- ---------- ------------- ------------                               
         1         30        511526       522464                               
         2         30        511526       522464                               
         3         31        522464       522646                               
         4         31        522464       522646                               
         5         32        522646       523748                               
         6         32        522646       523748                               
         7         33        523748       523871                               
         8         33        523748       523871                               
         9          1        522647       524058                               
        10          1        522647       524058                               
        11          2        524058       524165                               
     RECID  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#                               
---------- ---------- ------------- ------------                               
        12          2        524058       524165                               
        13          3        524165       524611                               
        14          3        524165       524611
用上一次的备份进行恢复:
RMAN> restore database;
RMAN> recover database ;
启动 recover 于 04-7月 -10
使用通道 ORA_DISK_1
正在开始介质的恢复
存档日志线程 1 序列 31 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ARCH01\ARC00031_07234
68783.001 存在于磁盘上
存档日志线程 1 序列 1 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ARCH01\ARC00001_072347
3384.001 存在于磁盘上
存档日志线程 1 序列 2 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ARCH01\ARC00002_072347
3384.001 存在于磁盘上
存档日志线程 1 序列 3 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ARCH01\ARC00003_072347
3384.001 存在于磁盘上
存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\ARCH01\ARC00031_0723468783.001 线程 =1
序列 =31
存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\ARCH01\ARC00001_0723473384.001 线程 =1
序列 =1
介质恢复完成, 用时: 00:00:08
完成 recover 于 04-7月 -10
从恢复代码上可以看到恢复跳过了32,33两个归档文件,从v$archived_log中也可能看到31与1的SCN是连续的,即新的SCN是应用日志到的最后一条日志SCN+1。
SQL> alter database open
数据库已更改。
SQL> select count(1) from mytest
  2  /
  COUNT(1)                                                                     
----------                                                                     
        20
完成完全恢复。
仍然用原来的备份我们还可以不完全恢复到sequence 1.
RMAN> recover database until sequence 1
注意的是这里的1当前incarnation的sequence。所以sequence 不要超过incarnation中的sequence最大值
RMAN> recover database until sequence 6;
报Rman-06054:介质恢复正请求未知的日志
(不知道怎么回事,从CMD上拷不下这段输出,现在也没整明白)
 
RMAN> list incarnation;
数据库原型列表
DB 关键字  Inc 关键字 DB 名  DB ID            STATUS  重置 SCN  重置时间
------- ------- -------- ---------------- --- ---------- ----------
1       1       ANRAN    885607663        PARENT  1          04-7月 -10
2       2       ANRAN    885607663        CURRENT 522647     04-7月 -10
可以看到当前数据库存在两个incarnation。 [incarnation的信息存在控制文件中,重建控制文件之后,incarnation会恢复到1]。
 
如果这时仍然还想恢复到第一个incarnation的sequence 32.
要首先执行
RMAN> reset database to incarnation 1;
RMAN> recover database until sequence 32.
以后的操作都是一样的,这里就不演示了。
 
实验过程中,10.2.0.1有时会报 ORA-600 [krhpfh_03-1209] 错误,这是ORACLE的BUG[Bug 5701695].
            ORA-600 [KCVSOR_CURRENT_INC_RDFAIL] 错误,这也是ORACLE的BUG[Bug 5443660]
升级到10.2.0.4 就可以了,新功能总是不太稳定。
 

你可能感兴趣的:(oracle,oracle,职场,rman,休闲)