1. 程式人生 > >【Oracle】探究recover database until scn

【Oracle】探究recover database until scn

ogg資料初始化中,對於使用rman進行資料初始化和匯入匯出、資料泵進行資料初始化,最終啟動replicat程序時使用的是不同的兩個引數。

對於rman進行初始化的,我們使用的語句是:

start replicat rep_ynkg , atcsn xxxxxx

對於匯入匯出及資料泵進行初始化的,我們使用的語句是:

start replicat rep_ynkg , aftercsn xxxxx

原因是使用rman進行恢復時使用recover database until scn xxxxxx;進行的恢復,這個語句的恢復結果並不包含最後指定的xxxxxx這個scn。而匯入匯出及資料泵進行初始化時使用的

flashback_scn=xxxxxx這個引數是包含xxxxxx這個scn的。

之前只是瞭解這個概念,沒有進行實驗,最近剛好有人問這個問題,做了個小實驗證明了下recover database until scn xxxxxx;不包最後指定的scn值。實驗過程如下(實驗步驟較長,對於非關鍵步驟只進行語言描述,就不貼出操作步驟了):

1.源庫建立system.test測試表。

create table system.test as select * from dba_objects where 1=2;

2.源庫增加goldengate extract程序,對system.test資料進行獲取。

3.源庫備份全庫。

4.源庫對測試表插入增量資料:

SQL> insert into system.test select * from dba_objects where rownum<=1;

1 row created.

SQL> commit;

Commit complete.

5.源庫歸檔current logfile

6.將源庫備份和歸檔傳輸到目標庫所在主機。

7.在源庫goldengate中使用logdump,檢視捕獲到增量資料的scn號。

Logdump 1 >open ./dirdat/t2000000

Current LogTrail is /home/oracle/ggs/dirdat/t2000000

Logdump 2 >ghdr on

Logdump 3 >detail data

Logdump 4 >ggstoken detail

略。。

Logdump 7 >n

___________________________________________________________________

Hdr-Ind    :     E  (x45)     Partition  :     .  (x04)  

UndoFlag   :     .  (x00)     BeforeAfter:     A  (x41)  

RecLength  :   198  (x00c6)   IO Time    : 2016/07/04 19:59:41.000.000   

IOType     :     5  (x05)     OrigNode   :   255  (xff)

TransInd   :     .  (x03)     FormatType :     R  (x52)

SyskeyLen  :     0  (x00)     Incomplete :     .  (x00)

AuditRBA   :         33       AuditPos   : 7736

Continued  :     N  (x00)     RecCount   :     1  (x01)

2016/07/04 19:59:41.000.000 Insert               Len   198 RBA 1053

Name: SYSTEM.TEST

After  Image:                                             Partition 4   G  s   

 0000 0007 0000 0003 5359 5300 0100 0900 0000 0549 | ........SYS........I  

 434f 4c24 0002 0004 ffff 0000 0003 0006 0000 0002 | COL$................  

 3230 0004 0005 0000 0001 3200 0500 0900 0000 0554 | 20........2........T  

 4142 4c45 0006 0015 0000 3230 3133 2d30 382d 3234 | ABLE......2013-08-24  

 3a31 313a 3337 3a33 3500 0700 1500 0032 3031 332d | :11:37:35......2013-  

 3038 2d32 343a 3131 3a34 373a 3337 0008 0017 0000 | 08-24:11:47:37......  

 0013 3230 3133 2d30 382d 3234 3a31 313a 3337 3a33 | ..2013-08-24:11:37:3  

Column     0 (x0000), Len     7 (x0007)  

 0000 0003 5359 53                                 | ....SYS  

Column     1 (x0001), Len     9 (x0009)  

 0000 0005 4943 4f4c 24                            | ....ICOL$  

Column     2 (x0002), Len     4 (x0004)  

 ffff 0000                                         | ....  

Column     3 (x0003), Len     6 (x0006)  

 0000 0002 3230                                    | ....20  

Column     4 (x0004), Len     5 (x0005)  

 0000 0001 32                                      | ....2  

Column     5 (x0005), Len     9 (x0009)  

 0000 0005 5441 424c 45                            | ....TABLE  

Column     6 (x0006), Len    21 (x0015)  

 0000 3230 3133 2d30 382d 3234 3a31 313a 3337 3a33 | ..2013-08-24:11:37:3  

 35                                                | 5  

Column     7 (x0007), Len    21 (x0015)  

 0000 3230 3133 2d30 382d 3234 3a31 313a 3437 3a33 | ..2013-08-24:11:47:3  

 37                                                | 7  

Column     8 (x0008), Len    23 (x0017)  

 0000 0013 3230 3133 2d30 382d 3234 3a31 313a 3337 | ....2013-08-24:11:37  

 3a33 35                                           | :35  

Column     9 (x0009), Len     9 (x0009)  

 0000 0005 5641 4c49 44                            | ....VALID  

Column    10 (x000a), Len     5 (x0005)  

 0000 0001 4e                                      | ....N  

Column    11 (x000b), Len     5 (x0005)  

 0000 0001 4e                                      | ....N  

Column    12 (x000c), Len     5 (x0005)  

 0000 0001 4e                                      | ....N  

Column    13 (x000d), Len     5 (x0005)  

 0000 0001 31                                      | ....1  

Column    14 (x000e), Len     4 (x0004)  

 ffff 0000                                         | ....  

GGS tokens:

TokenID x52 'R' ORAROWID         Info x00  Length   20

 4141 4156 7561 4141 4241 4141 584c 4241 4141 0001 | AAAVuaAABAAAXLBAAA..  

TokenID x4c 'L' LOGCSN           Info x00  Length    7

 3133 3036 3731 39                                 | 1306719  

TokenID x36 '6' TRANID           Info x00  Length    8

 392e 352e 3132 3330                               | 9.5.1230  

可以看到捕獲到增量資料時,源端資料庫提交的scn號為1306719

8.在目標機對資料庫進行restore

9.對目標庫使用語句進行recover,指定scn1306719

RMAN> recover database until scn 1306719;

10.使用resetlogs開啟目標庫,檢視scn1306719時提交的增量資料是否存在。

SQL> alter database open resetlogs;

Database altered.

SQL> select count(*) from system.test;

  COUNT(*)

----------

 0

可以看到增量資料並不存在!!!!

11.之後我們刪除目標端資料庫的資料檔案,重新進行恢復。最終指定scn1306720,比剛才的scn1

RMAN> restore database ;

略。。。

RMAN> recover database until scn 1306720;

Starting recover at 04-JUL-16

using channel ORA_DISK_1

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

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

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

RMAN-03002: failure of recover command at 07/04/2016 20:12:06

RMAN-20208: UNTIL CHANGE is before RESETLOGS change

RMAN> list incarnation;

List of Database Incarnations

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

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

1       1       SOURCEDB 310015860        PARENT  1          24-AUG-13

2       2       SOURCEDB 310015860        PARENT  925702     31-JAN-16

3       3       SOURCEDB 310015860        CURRENT 1306720    04-JUL-16

RMAN> reset database to incarnation 2;

database reset to incarnation 2

RMAN> recover database until scn 1306720;

12.使用resetlogs開啟目標庫,檢視scn1306720時提交的增量資料是否存在。

SQL> alter database open resetlogs;

Database altered.

SQL> select count(*) from system.test;

  COUNT(*)

----------

 1

可以看到這次增量資料成功恢復進來了!!!

實驗表明使用recover database until scn xxxxxx;並不包含指定的這個scn~