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 就可以了,新功能总是不太稳定。
 

本文转自 anranran 51CTO博客,原文链接:http://blog.51cto.com/guojuanjun/343720

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
Oracle 关系型数据库 数据库
oracle学习36-rman备份-控制文件丢失恢复
oracle学习36-rman备份-控制文件丢失恢复
184 0
oracle学习36-rman备份-控制文件丢失恢复
|
Oracle 关系型数据库 数据库
oracle学习38-rman备份-全库恢复
oracle学习38-rman备份-全库恢复
140 0
oracle学习38-rman备份-全库恢复
|
Oracle 关系型数据库 数据库
oracle学习35-rman备份-参数文件spfile损坏恢复
oracle学习35-rman备份-参数文件spfile损坏恢复
95 0
|
Oracle 关系型数据库 数据库
Oracle ---实例恢复
从Oracle数据库告警日志来看Oracle 的实例恢复
147 0
|
Oracle 关系型数据库 数据库
oracle数据库控制文件的备份和恢复之三RMAN自动备份和恢复
使用RMAN自动备份的控制文件向数据库中恢复控制文件
308 0
|
Oracle 关系型数据库 数据库
|
SQL Oracle 关系型数据库
oracle数据库控制文件的备份和恢复之一手动备份和恢复
实验步骤:手动备份和恢复oracle控制文件
517 0
|
存储 Oracle 关系型数据库
Oracle误删除存储过程快速恢复技巧
Oracle误删除存储过程快速恢复技巧
406 0
|
SQL 存储 Oracle
Oracle恢复方法(表、包)
Oracle恢复方法(表、包)
300 0
Oracle恢复方法(表、包)

推荐镜像

更多