Oracle 跨resetlogs的恢复
生活随笔
收集整理的這篇文章主要介紹了
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
恢復將不在起作用。即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
總結
以上是生活随笔為你收集整理的Oracle 跨resetlogs的恢复的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ORA-00257: archiver
- 下一篇: Linux下安装mysql遇到的一些问题