RMAN 滾動式不完全恢復 小實驗

紅葉DBA發表於2011-04-12
本次試驗內容,通過 RMAN 的向前滾動式不完全恢復

假定的試驗環境:

hongye使用者:        --&gt log sequence = 13 的時候建立 current_13 表,並插入13行資料;
                --&gt 歸檔當前日誌,得到日誌序列號13;
                --&gt log sequence = 14 的時候建立 current_14 表,並插入14行資料;
                --&gt 歸檔當前日誌,得到日誌序列號14;
                --&gt log sequence = 15 的時候建立 current_15 表,並插入15行資料;
                --&gt 歸檔當前日誌,得到日誌序列號15;

預期的試驗結果:        --&gt 不完全恢復到 sequence = 13 ,發現 current_* 表和資料都不存在;
                        --&gt 返回上一個incarnation,繼續尋找合適的還原點;
                        --&gt 不完全恢復到 sequence = 14 ,發現 current_14/15 表和資料都不存在;
                        --&gt 返回上一個incarnation,繼續尋找合適的還原點;
                        --&gt 不完全恢復到 sequence = 15 ,發現 current_15 表和資料都不存在;
                        --&gt 返回上一個incarnation,繼續尋找合適的還原點;
                        --&gt 不完全恢復到 sequence = 16 ,發現 current_* 表和資料都存在;
                        --&gt 不完全恢復完成!

試驗結論:次方式可用於不瞭解具體不完全恢復的截止位置時,作為向後探測式的還原。


1、試驗前得測試資料情況:

RMAN 中:

RMAN> list backup summary;

using target database control file instead of recovery catalog

List of Backups
===============
Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
1       B  A  A DISK        12-APR-11       1       1       NO         TAG20110412T203232
2       B  F  A DISK        12-APR-11       1       1       NO         TAG20110412T203242
3       B  F  A DISK        12-APR-11       1       1       NO         TAG20110412T203242
4       B  A  A DISK        12-APR-11       1       1       NO         TAG20110412T203411

以上是當前資料庫在試驗前的完全備份。

RMAN> list incarnation;

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       HONGYE   2428382369       PARENT  1          30-JUN-05
2       2       HONGYE   2428382369       CURRENT 446075     03-APR-11   --&gt 對應當前的 incarnation,這個非常重要!

建立試驗測試的相關標誌資料 current_13、current_14、current_15,此處略去相關步驟  . . . . . .
下面是建立完成之後的結果資料。


SQLPLUS 中:

IDLE > conn /as sysdba
Connected.

SYS:45@hongye > select table_name from dba_tables where wner='HONGYE';

TABLE_NAME
------------------------------
CURRENT_15      --&gt對應日誌序列號13
CURRENT_13      --&gt對應日誌序列號14
CURRENT_14      --&gt對應日誌序列號15

7 rows selected.

SYS:45@hongye > select group#,sequence#, status from v$log;

    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         1         14 INACTIVE
         2         15 INACTIVE
         3         16 CURRENT


2、首先,恢復到 sequence = 13 的時候,並檢視相關資料的恢復情況:

SQLPLUS中:

SYS:45@hongye > shutdown immediate

SYS:45@hongye > startup mount

RMAN 中執行不完全恢復:

RMAN> connect target /

connected to target database: HONGYE (DBID=2428382369, not open)

RMAN> run{
2> set until sequence 13;
3> restore database;
4> recover database;
5> }

. . . . . .
Finished recover at 12-APR-11

SQLPLUS 中檢視此次不完全恢復的情況是否和預期情況相符:

SYS:45@hongye > alter database open resetlogs;

SYS:45@hongye > select table_name from dba_tables where wner='HONGYE';

no rows selected

沒有 current_* 的表和資料;

SYS:45@hongye > select group#,sequence#, status from v$log;

    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         1          0 UNUSED
         2          0 UNUSED
         3          1 CURRENT
此時:注意到日誌已經歸零了,這是 resetlogs 的“後遺症”。


3、恢復到 sequence = 14 的時候,並檢視相關資料的恢復情況:

SQLPLUS 中:

SYS:45@hongye > shutdown immediate

SYS:45@hongye > startup mount

RMAN 中執行恢復操作:

RMAN> list incarnation;

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       HONGYE   2428382369       PARENT  1          30-JUN-05
2       2       HONGYE   2428382369       PARENT  446075     03-APR-11
3       3       HONGYE   2428382369       CURRENT 702481     12-APR-11

注意到,此時資料庫的生命期已經改變了,incarnation 換到下一個了,
將資料庫的生命期設定到2,這樣才能使用之前在生命期2中所作的備份
此時:要想繼續使用之前的備份和歸檔檔案,則必須將資料庫置於 incarnation=2 的生命週期中。


RMAN> reset database to incarnation 2;

database reset to incarnation 2

下面就可以進行不完全恢復,設定恢復的目標位置為: log sequence = 14 ;

RMAN> run{
2> set until sequence 14;
3> restore database;
4> recover database;
5> }

. . . . . .
Finished recover at 12-APR-11

SQLPLUS 中檢視恢復後的結果:

SYS:45@hongye > alter database open resetlogs;

Database altered.

SYS:45@hongye > select table_name from dba_tables where wner='HONGYE';

TABLE_NAME
------------------------------
CURRENT_13

此時:表 CURRENT_13 已經被恢復了,因為current_13 表資訊的日誌記錄在 log sequence=13 的log中,
set until sequence 14,則 RMAN 會將日誌應用到 13 為止。


SYS:45@hongye > select * from hongye.current_13;

        ID NAME
---------- ----------
         1 name1
         ......
        13 name13

13 rows selected.


4、恢復到 sequence = 15 的時候,並檢視相關資料的恢復情況:

SQLPLUS 中:

SYS:45@hongye > shutdown immediate

SYS:45@hongye > startup mount

RMAN 中執行恢復操作:

同樣,也需要在恢復之前,將資料庫的生命期設定到2,這樣才能使用之前在生命期2中所作的備份

RMAN> reset database to incarnation 2;

using target database control file instead of recovery catalog
database reset to incarnation 2

RMAN> run{
2> set until sequence 15;
3> restore database;
4> recover database;
5> }

. . . . . .
Finished recover at 12-APR-11

SQLPLUS 中檢視恢復後的結果:

SYS:45@hongye > alter database open resetlogs;

Database altered.

SYS:45@hongye > select table_name from dba_tables where wner='HONGYE';

TABLE_NAME
------------------------------
CURRENT_13
CURRENT_14

此時:表 CURRENT_13/14 都已經被恢復了,
因為current_13 表資訊的日誌記錄在 log sequence=13 的log中,
current_14 表資訊的日誌記錄在 log sequence=14 的log中,
set until sequence 15,則 RMAN 會將日誌應用到 14 為止。


SYS:45@hongye > select * from hongye.current_13;

        ID NAME
---------- ----------
         1 name1
         ......
        13 name13

13 rows selected.

SYS:45@hongye > select * from hongye.current_14;

        ID NAME
---------- ----------
         1 name1
         ......
        14 name14

14 rows selected.


5、恢復到 sequence = 16 的時候,並檢視相關資料的恢復情況:

SQLPLUS 中:

SYS:45@hongye > shutdown immediate

SYS:45@hongye > startup mount

RMAN 中執行恢復操作:

同樣,也需要在恢復之前,將資料庫的生命期設定到2,這樣才能使用之前在生命期2中所作的備份。

RMAN> reset database to incarnation 2;

using target database control file instead of recovery catalog
database reset to incarnation 2

RMAN> run{
2> set until sequence 16;
3> restore database;
4> recover database;
5> }

. . . . . .
Finished recover at 12-APR-11

SQLPLUS 中檢視恢復後的結果:

SYS:45@hongye > alter database open resetlogs;

SYS:45@hongye > select table_name from dba_tables where wner='HONGYE';

TABLE_NAME
------------------------------
CURRENT_15
CURRENT_13
CURRENT_14

此時:三張表的資料全部都在,由於最晚建立的表 current_15 對應的日誌序列號是15,
而本次恢復使用的 until sequence 16 ,RMAN就會應用到 log sequence = 15之後才會停止!


SYS:45@hongye > select * from hongye.current_13;

        ID NAME
---------- ----------
         1 name1
         ......
        13 name13

13 rows selected.

SYS:45@hongye > select * from hongye.current_14;

        ID NAME
---------- ----------
         1 name1
         ......
        14 name14

14 rows selected.

SYS:45@hongye > select * from hongye.current_15;

        ID NAME
---------- ----------
         1 name1
         ......
        15 name15

15 rows selected.

SYS:45@hongye >

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

相關文章