oracle實驗記錄 (恢復-rman reset incatnation(1))

fufuh2o發表於2009-10-09


接 使用resetlogs open後資料檔案恢復

實驗下跨resetlogs 恢復db

簡單說下resetlogs作用:
resetlogs 不會重新設定SCN為0,只是將log sequence#設定為1,SCN 不變,resetlog open後,SCN為應用日誌的最後一條日誌記錄的SCN號+1
resetlog open後oracle將clear所有current logfile中未應用的redo record,將控制檔案中記錄的 日誌序號重新設定為1
當不完全恢復後datafile的SCN 與controlfile SCN,redo ,不一樣需要resetlogs open來 強制 同步,每次resetlog open後將產生一個incarnation,且需要ADD TEMPFILE


先備份一下db
C:\>rman target /

恢復管理器: Release 10.2.0.1.0 - Production on 星期五 10月 9 16:02:56 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

連線到目標資料庫: XH (DBID=3093395309)

RMAN> list backup;

使用目標資料庫控制檔案替代恢復目錄

RMAN> backup database;

啟動 backup 於 09-10月-09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=141 devtype=DISK
通道 ORA_DISK_1: 啟動全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集中的資料檔案
輸入資料檔案 fno=00001 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\SYSTEM01.DBF
輸入資料檔案 fno=00003 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\SYSAUX01.DBF
輸入資料檔案 fno=00005 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\EXAMPLE01.DBF
輸入資料檔案 fno=00002 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\UNDOTBS01.DBF
輸入資料檔案 fno=00004 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\XH\USERS01.DBF
輸入資料檔案 fno=00009 name=D:\XHDATAFILE\OUTLINE.DBF
輸入資料檔案 fno=00007 name=D:\XHDATAFILE\XHTEST.DBF
輸入資料檔案 fno=00008 name=D:\XHDATAFILE\XHTR.DBF
輸入資料檔案 fno=00010 name=D:\XHDATAFILE\SMALLFILE.DBF
通道 ORA_DISK_1: 正在啟動段 1 於 09-10月-09
通道 ORA_DISK_1: 已完成段 1 於 09-10月-09
段控制程式碼=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\BACKUPSET\2009_10_09\O1_MF_N
NNDF_TAG20091009T160347_5DXVM5MK_.BKP 標記=TAG20091009T160347 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:55
通道 ORA_DISK_1: 啟動全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集中的資料檔案
備份集中包括當前控制檔案
在備份集中包含當前的 SPFILE
通道 ORA_DISK_1: 正在啟動段 1 於 09-10月-09
通道 ORA_DISK_1: 已完成段 1 於 09-10月-09
段控制程式碼=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\XH\BACKUPSET\2009_10_09\O1_MF_N
CSNF_TAG20091009T160347_5DXVNY3X_.BKP 標記=TAG20091009T160347 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:03
完成 backup 於 09-10月-09

RMAN>

 

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 CURRENT
         3 UNUSED
         2 UNUSED

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
      1003

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        56

SQL> select  current_scn from v$database;

CURRENT_SCN
-----------
    1557686

SQL> truncate table tr.t1;

表被截斷。

SQL> select  current_scn from v$database;

CURRENT_SCN
-----------
    1557734

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
         0

SQL> alter system switch logfile;

系統已更改。

SQL> alter system checkpoint;

系統已更改。

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        57

 

 

RMAN> run{startup force mount;
2> set until scn=1557686;
3> restore database;
4> recover database;
5> sql 'alter database open resetlogs';}

Oracle 例項已啟動
資料庫已裝載
正在開始介質的恢復
介質恢復完成, 用時: 00:00:08

完成 recover 於 09-10月-09

sql 語句: alter database open resetlogs


SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        58

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
      1003

SQL> select  current_scn from v$database;

CURRENT_SCN
-----------
    1557971

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 UNUSED
         3 UNUSED
         2 CURRENT

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
           1557688
SQL> select checkpoint_change# from v$datafile;

CHECKPOINT_CHANGE#
------------------
           1557688
           1557688
           1557688
           1557688
           1557688
           1557688
           1557688
           1557688
           1557688

已選擇9行。

SQL> select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
           1557688
           1557688
           1557688
           1557688
           1557688
           1557688
           1557688
           1557688
           1557688

已選擇9行。

 

 

SQL> insert into tr.t1 values(1,2);

已建立 1 行。

SQL> commit;

提交完成。

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 UNUSED
         3 UNUSED
         2 CURRENT

SQL> select  current_scn from v$database;

CURRENT_SCN
-----------
    1559092

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
      1004

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        58

SQL> alter system switch logfile;

系統已更改。

SQL> alter system checkpoint;

系統已更改。

使用resetlogs前備份 恢復
RMAN> run{ startup force mount;
2> restore database;
3> recover database;
4> }


RMAN> sql 'alter database open';

sql 語句: alter database open

 

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        60

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
      1004

SQL> select  current_scn from v$database;

CURRENT_SCN
-----------
    1579352

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         3 CURRENT
         2 INACTIVE

 

 

 

 
現在要求恢復到resetlogs前時間點     SCN 1557686 既ROW 1003時候

 

RMAN> list incarnation of database;


資料庫原型列表
DB 關鍵字  Inc 關鍵字 DB 名  DB ID            STATUS  重置 SCN  重置時間
------- ------- -------- ---------------- --- ---------- ----------
2       2       XH       3093395309       PARENT  534907     18-9月 -09
1       1       XH       3093395309       PARENT  1511693    09-10月-09
3       3       XH       3093395309       ORPHAN  1512986    09-10月-09
4       4       XH       3093395309       PARENT  1532869    09-10月-09
5       5       XH       3093395309       PARENT  1533467    09-10月-09
6       6       XH       3093395309       PARENT  1533644    09-10月-09
7       7       XH       3093395309       PARENT  1554422    09-10月-09
8       8       XH       3093395309       PARENT  1554479    09-10月-09
9       9       XH       3093395309       PARENT  1555247    09-10月-09
10      10      XH       3093395309       PARENT  1555988    09-10月-09
11      11      XH       3093395309       CURRENT 1557687    09-10月-09


SQL> desc v$database_incarnation;
 名稱                                      是否為空? 型別
 ----------------------------------------- -------- ----------------------------
 INCARNATION#                                       NUMBER
 RESETLOGS_CHANGE#                                  NUMBER
 RESETLOGS_TIME                                     DATE
 PRIOR_RESETLOGS_CHANGE#                            NUMBER
 PRIOR_RESETLOGS_TIME                               DATE
 STATUS                                             VARCHAR2(7)
 RESETLOGS_ID                                       NUMBER
 PRIOR_INCARNATION#                                 NUMBER
 FLASHBACK_DATABASE_ALLOWED                         VARCHAR2(26)

INCARNATION# NUMBER Record ID for the branch record in the control file
RESETLOGS_CHANGE# NUMBER Resetlogs system change number (SCN) for the incarnation of the current row
RESETLOGS_TIME DATE Resetlogs timestamp for the incarnation of the current row
PRIOR_RESETLOGS_CHANGE# NUMBER Resetlogs SCN for the previous incarnation
PRIOR_RESETLOGS_TIME DATE Resetlogs timestamp for the previous incarnation
STATUS VARCHAR2(7) Incarnation status:
ORPHAN - Orphan incarnation

CURRENT - Current incarnation of the database

PARENT - Parent of the current incarnation
 
RESETLOGS_ID NUMBER Branch ID for the incarnation of the current row (used by user-managed recovery/RMAN restore to get unique names for archived logs across

incarnations)
PRIOR_INCARNATION# NUMBER Parent incarnation record ID if nonzero
FLASHBACK_DATABASE_ALLOWED VARCHAR2(26) Indicate whether or not Flashback Database can be performed into SCNs or timestamps in the incarnation. A value of

YES means that you can flashback to some point in that incarnation. A value of NO indicates that you cannot flashback into the incarnation.

 

RMAN> reset database to incarnation 10~~~~~~~~~~~需要在mount階段設定
2> ;

RMAN-03009: reset 命令 (default 通道上, 在 10/09/2009 17:40:19 上) 失敗
ORA-19910: 不能更改控制檔案中的恢復目標原型

 

ORA-19910: can not change recovery target incarnation in control file
Cause: The RESET DATABASE TO INCARNATION command was used while the database is open. This is not allowed.
 
Action: Close the database then re-issue the command.


RMAN> shutdown immediate;

資料庫已關閉
資料庫已解除安裝
Oracle 例項已關閉
RMAN> startup mount;
RMAN> reset database to incarnation 10;


RMAN> run{set until scn=1557686;
2> restore database;
3> recover database;
4> sql 'alter database open resetlogs';}

正在執行命令: SET until clause

SQL> select group#,status from v$log;

    GROUP# STATUS
---------- ----------------
         1 UNUSED
         3 CURRENT
         2 UNUSED

SQL> select  current_scn from v$database;

CURRENT_SCN
-----------
    1557977

SQL> select count(*) from tr.t1;

  COUNT(*)
----------
      1003

SQL> select count(*) from v$archived_log;

  COUNT(*)
----------
        60

RMAN> list incarnation of database;


資料庫原型列表
DB 關鍵字  Inc 關鍵字 DB 名  DB ID            STATUS  重置 SCN  重置時間
------- ------- -------- ---------------- --- ---------- ----------
2       2       XH       3093395309       PARENT  534907     18-9月 -09
1       1       XH       3093395309       PARENT  1511693    09-10月-09
3       3       XH       3093395309       ORPHAN  1512986    09-10月-09
4       4       XH       3093395309       PARENT  1532869    09-10月-09
5       5       XH       3093395309       PARENT  1533467    09-10月-09
6       6       XH       3093395309       PARENT  1533644    09-10月-09
7       7       XH       3093395309       PARENT  1554422    09-10月-09
8       8       XH       3093395309       PARENT  1554479    09-10月-09
9       9       XH       3093395309       PARENT  1555247    09-10月-09
10      10      XH       3093395309       PARENT  1555988    09-10月-09
11      11      XH       3093395309       ORPHAN  1557687    09-10月-09
12      12      XH       3093395309       CURRENT 1557687    09-10月-09

 

 

 


 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12020513/viewspace-616176/,如需轉載,請註明出處,否則將追究法律責任。

相關文章