在oracle10g之前使用resetlogs打開數(shù)據(jù)庫(kù)之后,之前的的備份就不能用于恢復(fù)了。即不能進(jìn)行跨resetlogs時(shí)間點(diǎn)的恢復(fù)。所以要求執(zhí)行完之后馬上進(jìn)行全庫(kù)備份。
Oracle10g以后允許跨越resetlogs時(shí)間點(diǎn)進(jìn)行完全或者不完全恢復(fù)。實(shí)驗(yàn)如下:
-
執(zhí)行全庫(kù)備份。
RMAN> backup database plus archivelog delete all input;
insert into test select * from test;
SQL> alter system switch logfile;
SQL> commit;
Commit complete.
SQL> alter system switch logfile;
System altered.
SQL> truncate table test;
Table truncated.
SQL> alter system switch logfile;
System altered.
SQL> select * from v$log_history;
SQL> select recid,stamp,sequence#,first_change#,first_time,next_change# from v$log_history
2 where recid >80;
RECIDSTAMP FIRST_CHANGE# FIRST_TIME NEXT_CHANGE#
---------- ---------- ------------- ------------ ------------
81 856723148 2130643 27-AUG-14 2130889
82 856752323 2130889 27-AUG-14 2155374
83 856753004 2155375 28-AUG-14 2175380
84 856753636 2175380 28-AUG-14 2176030
85 856754916 2176030 28-AUG-14 2177334
86 856754945 2177334 28-AUG-14 2177347
87 856755046 2177347 28-AUG-14 2178414
88 856755142 2178414 28-AUG-14 2178471
89 856755199 2178471 28-AUG-14 2178508
90 856755243 2178508 28-AUG-14 2178543
91 856755424 2178543 28-AUG-14 2178823
RECIDSTAMP FIRST_CHANGE# FIRST_TIME NEXT_CHANGE#
---------- ---------- ------------- ------------ ------------
92 856755456 2178823 28-AUG-14 2178836
93 856755483 2178836 28-AUG-14 2178940
13 rows selected.
-
關(guān)閉數(shù)據(jù)庫(kù)、刪除數(shù)據(jù)模擬故障
刪除之后,執(zhí)行如下
RMAN> startup mount;
Oracle instance started
database mounted
Total System Global Area 599785472 bytes
Fixed Size 2022600 bytes
Variable Size 268436280 bytes
Database Buffers 322961408 bytes
Redo Buffers 6365184 bytes
RMAN> run{
set until sequence 12 thread 1;
restore database;
recover database;
}
這里判斷具體到那個(gè)sequence,當(dāng)前查詢?nèi)缦拢瑲v史查看v$log_history的sequence#:
Sql>archive log list;
如果出現(xiàn)這個(gè)錯(cuò)誤:
SQL> recover database until cancel;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done
SQL> recover database BACKUP CONTROLFILE
ORA-00905: missing keyword
解決:
recover database using backup controlfile until cancel;
RMAN> alter database open resetlogs;
查看序號(hào)是否復(fù)位:
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 0
Next log sequence to archive 1
Current log sequence 1
SQL> create conn xzsp create tt able tt as select * from dba_users;
Table created.
SQL> alter system switch logfile;
System altered.
SQL> select count(*) from tt;
COUNT(*)
----------
26
SQL> inert in sert into tt select * from tt;
26 rows created.
SQL> /
52 rows created.
SQL> /
104 rows created.
SQL> commit
2 ;
Commit complete.
SQL> alter system switch logfile;
System altered.
SQL> select recid,stamp,first_change#,first_time,next_change# from v$log_history;
RECID STAMP SEQUENCE# FIRST_CHANGE# FIRST_TIME NEXT_CHANGE#
---------- ---------- ---------- ------------- ------------ ------------
100 856759449 1 2179277 28-AUG-14 2179707
101 856759476 2 2179707 28-AUG-14 2179788
102 856761071 1 2179621 28-AUG-14 2179920
103 856761108 2 2179920 28-AUG-14 2179945
103 rows selected.
Oracle保留了resetlogs之前的日志序列號(hào),并且日志recid繼續(xù)增長(zhǎng),控制文件也保留了歸檔日志的序列。所以可以跨RESETLOGS進(jìn)行恢復(fù)。10g以前 是不能夠使用當(dāng)前控制文件恢復(fù)之前的備份的。
RMAN> run {
2> restore database;
3> recover database;
4> }
SQL> select count(*) from tt;
COUNT(*)
----------
208
恢復(fù)能夠完成,還有l(wèi)og_archive_format有關(guān)系。
Sql>show parameter log_archive_format
log_archive_format string archive_%t_%s_%r.log
這里的%R是oracle新增的參數(shù),是resetlogs的標(biāo)志號(hào).這一歸檔日志格式可以是不同Incarnation的數(shù)據(jù)庫(kù)歸檔日志避免相互覆蓋,從而跨越resetlogs恢復(fù)的日志基礎(chǔ)得以保證。
?
?
思考:這里看到rman備份只有一次,是在resetlogs之前,第二次完全恢復(fù)是基于之前的備份。這里看到oracle10確實(shí)是越過(guò)了resetlog執(zhí)行了恢復(fù)。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
