rman爲啥使用 alter database open resetlogs

問題解決:

先要弄清楚alter database open resetlogs是什麼意思,爲什麼要用resetlogs打開數據庫,這個命令發出後oracle都做了什麼?

alter database open resetlogs是要打開數據時,重置重做日誌,即將重做日誌的sequence置零,爲什麼要重置重做日誌呢?

不完全恢復後,原來的online redo log裏面包含的是未做恢復前的數據,而這些數據對於恢復後的數據庫不再有效,所以數據庫會要求在Open之前先對online redo log的sequence置零。

Resetlogs命令表示一個數據庫邏輯生存期的結束和另一個數據庫邏輯生存期的開始,每次使用Resetlogs命令的時候,SCN不會被重置,不過oracle會重置日誌序列號,而且會重置聯機重做日誌內容。

Oracle把這個數據庫邏輯生存期稱爲incarnation

每次使用resetlogs打開數據庫,就會使incarnation + 1,也就是產生一個新的incarnation;

如果想要恢復到之前incarnation的scn/time,就需要先恢復到之前的incarnation;

對於上面的案例,具體就是先要

Reset database to incarnation 2;

再做不完全恢復試試

--------------------------我執行一次rman之後,再次執行這個腳本--------------


 

  1. RMAN> @/home/oracle/testrman.rman
  2. RMAN> run{
  3. 2> allocate channel c1 type disk;
  4. 3> allocate channel c2 type disk;
  5. 4> sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"';
  6. 5> set until time='2012-08-16 17:30:00';
  7. 6> restore database;
  8. 7> recover database;
  9. 8> sql 'alter database open resetlogs';}
  10. allocated channel: c1
  11. channel c1: sid=145 devtype=DISK
  12. allocated channel: c2
  13. channel c2: sid=146 devtype=DISK
  14. sql statement: alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"
  15. executing command: SET until clause
  16. released channel: c1
  17. released channel: c2
  18. RMAN-00571: ===========================================================
  19. RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  20. RMAN-00571: ===========================================================
  21. RMAN-03002: failure of set command at 08/16/2012 21:01:11
  22. RMAN-20207: UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time
  23. RMAN> **end-of-file**


 

 

http://hi.baidu.com/heuet032606/item/4553f3c1d8f8b22c47d5c07c

 

http://blog.csdn.net/leishifei/article/details/6430057

關於alter database open resetlogs及incarnation的一點理解

不完全恢復只能做一次嗎?

採用rman的默認設置,對數據庫進行了backup database備份,進行了一些操作後,然後直接關閉啓動到mount狀態

RMAN> run{

2> set until time "to_date('2010-10-16 23:14:42','yyyy-mm-dd hh24:mi:ss')";

3> restore database;

4> recover database;

5> }

executing command: SET until clause

Starting restore at 17-OCT-10

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=156 devtype=DISK

channel ORA_DISK_1: starting datafile backupset restore

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

restoring datafile 00001 to /oracle/oradata/denver/system01.dbf

restoring datafile 00002 to /oracle/oradata/denver/undotbs01.dbf

restoring datafile 00003 to /oracle/oradata/denver/sysaux01.dbf

restoring datafile 00004 to /oracle/oradata/denver/users01.dbf

restoring datafile 00005 to /oracle/oradata/denver/example01.dbf

channel ORA_DISK_1: reading from backup piece /oracle/flash_recovery_area/DENVER/backupset/2010_10_16/o1_mf_nnndf_TAG20101016T230845_6cmhzz8t_.bkp

channel ORA_DISK_1: restored backup piece 1

piece handle=/oracle/flash_recovery_area/DENVER/backupset/2010_10_16/o1_mf_nnndf_TAG20101016T230845_6cmhzz8t_.bkp tag=TAG20101016T230845

channel ORA_DISK_1: restore complete, elapsed time: 00:01:26

Finished restore at 17-OCT-10

Starting recover at 17-OCT-10

using channel ORA_DISK_1

starting media recovery

archive log thread 1 sequence 10 is already on disk as file /oracle/archivelog/1_10_732510268.dbf

archive log filename=/oracle/archivelog/1_10_732510268.dbf thread=1 sequence=10

media recovery complete, elapsed time: 00:00:01

Finished recover at 17-OCT-10

RMAN> alter database open resetlogs;

database opened

發現剛纔恢復的時間23:14:42有點早,於是想改爲恢復時間點爲23:17:26,於是再次關閉數據庫,mount狀態下,但是出錯了

RMAN> run {

2> set until time "to_date('2010-10-16 23:17:26','yyyy-mm-dd hh24:mi:ss')";

3> restore database;

4> recover database;

5> }

executing command: SET until clause

using target database control file instead of recovery catalog

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of set command at 10/17/2010 00:45:40

RMAN-20207: UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time

時間再前點恢復也不行:

RMAN> run {

2> set until time "to_date('2010-10-16 23:14:40','yyyy-mm-dd hh24:mi:ss')";

3> restore database;

4> recover database;

5> }

executing command: SET until clause

using target database control file instead of recovery catalog

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of set command at 10/17/2010 01:17:03

RMAN-20207: UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time

這是爲什麼?那些歸檔都還在,難道我的rman做過一次不完全恢復後,就不能再不完全恢復了,跟有沒有換備份控制文件有關係嗎?裏面做了什麼呢?

RMAN> list incarnation;

using target database control file instead of recovery catalog

List of Database Incarnations

DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time

------- ------- -------- ---------------- --- ---------- ----------

1       1       DENVER   4021391415       PARENT  1          22-OCT-05

2       2       DENVER   4021391415       PARENT  525876     16-OCT-10

3       3       DENVER   4021391415       CURRENT 620239     17-OCT-10

問題解決:

先要弄清楚alter database open resetlogs是什麼意思,爲什麼要用resetlogs打開數據庫,這個命令發出後oracle都做了什麼?

alter database open resetlogs是要打開數據時,重置重做日誌,即將重做日誌的sequence置零,爲什麼要重置重做日誌呢?

不完全恢復後,原來的online redo log裏面包含的是未做恢復前的數據,而這些數據對於恢復後的數據庫不再有效,所以數據庫會要求在Open之前先對online redo log的sequence置零。

Resetlogs命令表示一個數據庫邏輯生存期的結束和另一個數據庫邏輯生存期的開始,每次使用Resetlogs命令的時候,SCN不會被重置,不過oracle會重置日誌序列號,而且會重置聯機重做日誌內容。

Oracle把這個數據庫邏輯生存期稱爲incarnation

每次使用resetlogs打開數據庫,就會使incarnation + 1,也就是產生一個新的incarnation;

如果想要恢復到之前incarnation的scn/time,就需要先恢復到之前的incarnation;

對於上面的案例,具體就是先要

Reset database to incarnation 2;

再做不完全恢復試試

發佈了19 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章