DG中模擬備庫斷檔並恢復過程

skyin_1603發表於2016-10-21
斷檔情況,主要是針對備庫來說,使用歸檔日誌過程中,中間有個日誌檔案損壞了,或者丟失了,
即使開啟著使用日誌功能,也會導致了往後所有的日誌檔案都不能使用,也即導致了主庫與備庫不同步,
這樣的結果就是資料同步備庫功能喪失了。不同版本的oracle軟體,對斷檔的恢復功能不一樣。有些版本
在恢復主庫中的日誌之後,需要手動註冊並使用日誌,有些版本自動恢復使用日子,不需要手動註冊。

斷檔的舉例:
SQL> select SEQUENCE#,APPLIED from v$archived_log;
... ...
SEQUENCE# APPLIED
---------- ---------
       105 YES
       106 YES
       102 YES
       103 YES
       107 YES
       104 YES
       108 YES
       108 YES
      (109 NO)             #例如:109號日誌檔案損壞了或者丟失了
 SEQUENCE# APPLIED
---------- ---------
       110 NO
       111 NO
       112 NO       #這種情況,109號日誌檔案之後的110、111與112號日誌檔案就不能被使用,就是斷檔的狀況

--恢復斷檔日誌檔案的問題:
--模擬生產環境:

--主庫的歸檔日誌檔案:
SQL> select SEQUENCE#,APPLIED from v$archived_log;
 SEQUENCE# APPLIED
---------- ---------
        97 YES
        96 YES
        98 YES
        99 YES
       100 YES
... ...
SEQUENCE# APPLIED
---------- ---------
       118 NO
       119 YES
       119 NO
       120 YES
       120 NO
       121 NO
       121 YES
       122 NO
       122 YES
42 rows selected.

--備庫使用的日誌檔案:
SQL> select SEQUENCE#,APPLIED from v$archived_log;
 SEQUENCE# APPLIED
---------- ---------
        67 YES
        68 YES
        69 YES
        70 YES
... ...
       115 YES
       116 YES
       117 YES
       118 YES
       119 YES
       120 YES
 SEQUENCE# APPLIED
---------- ---------
       121 YES
       122 YES
68 rows selected.

--檢視主庫suxing使用者下的mytable表資料:
SQL> select * from MYTABLE;
        ID NAME                   TEL CREATED
---------- --------------- ---------- ---------
     12345 Suxing su       1.2365E+10
     12346 Sky             1.3727E+10 16-OCT-16
     
--檢視備庫suxing使用者下的mytable表資料:
SQL> select * from MYTABLE;
        ID NAME                   TEL CREATED
---------- --------------- ---------- ---------
     12345 Suxing su       1.2365E+10
     12346 Sky             1.3727E+10 16-OCT-16

--在主庫往MYTABLE插入一條資料,提交併切換日誌組:
SQL> insert into mytable values(12347,'prod',15824678923,'');
1 row created.

SQL> commit;
Commit complete.

--再插入一條資料,提交併切換日誌:
SQL> insert into mytable values(12348,'enmo',15924678923,'');
1 row created.

SQL> commit;
Commit complete.

SQL> show user
USER is "SYS"
SQL> 
SQL> insert into suxing.mytable values(12349,'ppenmo',13924678923,sysdate);
1 row created.

SQL> insert into suxing.mytable values(12350,'qqenmo',13924678921,sysdate);
1 row created.

SQL> commit;
Commit complete.

--主庫檢視mytable的資料:
SQL>  select * from suxing.mytable;
        ID NAME                   TEL CREATED
---------- --------------- ---------- ---------
     12349 ppenmo          1.3925E+10 20-OCT-16
     12350 qqenmo          1.3925E+10 20-OCT-16
     12345 Suxing su       1.2365E+10
     12346 Sky             1.3727E+10 16-OCT-16
     12347 prod            1.5825E+10
     12348 enmo            1.5925E+10
6 rows selected.

--此時檢視備庫只用的日誌檔案:
SQL> select SEQUENCE#,APPLIED from v$archived_log;
... ...
SEQUENCE# APPLIED
---------- ---------
       121 YES
       122 YES
       123 NO
       124 YES
       125 YES
       123 YES
       126 NO
       127 NO
       128 NO
75 rows selected.
        
--此時檢視備庫mytable表中的資料:
SQL> select * from suxing.mytable;
        ID NAME                   TEL CREATED
---------- --------------- ---------- ---------
     12345 Suxing su       1.2365E+10
     12346 Sky             1.3727E+10 16-OCT-16
     12347 prod            1.5825E+10
     12348 enmo            1.5925E+10
   
--主庫中有新歸檔的日誌檔案:126、127與128號歸檔日誌檔案:
[oracle@oracle ENMO]$ ls
1_100_924523013.arc  1_106_924523013.arc  1_112_924523013.arc  1_118_924523013.arc  1_124_924523013.arc  1_2_925677913.arc
1_101_924523013.arc  1_107_924523013.arc  1_113_924523013.arc  1_119_924523013.arc  1_125_924523013.arc  1_3_925677913.arc
1_102_924523013.arc  1_108_924523013.arc  1_114_924523013.arc  1_120_924523013.arc  1_126_924523013.arc  1_96_924523013.arc
1_103_924523013.arc  1_109_924523013.arc  1_115_924523013.arc  1_121_924523013.arc  1_127_924523013.arc  1_97_924523013.arc
1_104_924523013.arc  1_110_924523013.arc  1_116_924523013.arc  1_122_924523013.arc  1_128_924523013.arc  1_98_924523013.arc
1_105_924523013.arc  1_111_924523013.arc  1_117_924523013.arc  1_123_924523013.arc  1_1_925677913.arc    1_99_924523013.arc
[oracle@oracle ENMO]$ 

--模擬斷檔情況,備庫丟失123號歸檔日誌檔案1_126_924523013.arc:
[oracle@enmo PROD]$ mv 1_126_924523013.arc /home/oracle/arch/PROD/bk/1_126_924523013.arc
[oracle@enmo PROD]$ ls
1_100_924523013.arc  1_108_924523013.arc  1_116_924523013.arc  1_124_924523013.arc  1_96_924523013.arc
1_101_924523013.arc  1_109_924523013.arc  1_117_924523013.arc  1_125_924523013.arc  1_97_924523013.arc
1_102_924523013.arc  1_110_924523013.arc  1_118_924523013.arc  1_127_924523013.arc  1_98_924523013.arc
1_103_924523013.arc  1_111_924523013.arc  1_119_924523013.arc  1_128_924523013.arc  1_99_924523013.arc
1_104_924523013.arc  1_112_924523013.arc  1_120_924523013.arc  1_92_924523013.arc   bk
1_105_924523013.arc  1_113_924523013.arc  1_121_924523013.arc  1_93_924523013.arc
1_106_924523013.arc  1_114_924523013.arc  1_122_924523013.arc  1_94_924523013.arc
1_107_924523013.arc  1_115_924523013.arc  1_123_924523013.arc  1_95_924523013.arc
[oracle@enmo PROD]$ 
可看到,126號日誌檔案丟失了。

--備庫嘗試開啟使用日誌檔案並檢視是否使用127與128號歸檔日誌:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
Database altered.

SQL> select SEQUENCE#,APPLIED from v$archived_log;
 SEQUENCE# APPLIED
---------- ---------
        67 YES
        68 YES
        ... ...
 SEQUENCE# APPLIED
---------- ---------
       121 YES
       122 YES
       123 NO
       124 YES
       125 YES
       123 YES
       126 NO
       127 NO
       128 NO
75 rows selected.
發現怎麼使用日誌,都不能用,因為126號日誌檔案丟失了。

--關閉日誌使用:
SQL> alter database recover managed standby database cancel;
Database altered.

--從主庫找回對應的日誌檔案複製到備庫,然後手動註冊使用日誌:
[oracle@enmo bk]$ cp 1_126_924523013.arc /home/oracle/arch/PROD/1_126_924523013.arc
[oracle@enmo bk]$ cd ..
[oracle@enmo PROD]$ ls
1_100_924523013.arc  1_108_924523013.arc  1_116_924523013.arc  1_124_924523013.arc  1_93_924523013.arc
1_101_924523013.arc  1_109_924523013.arc  1_117_924523013.arc  1_125_924523013.arc  1_94_924523013.arc
1_102_924523013.arc  1_110_924523013.arc  1_118_924523013.arc  1_126_924523013.arc  1_95_924523013.arc
1_103_924523013.arc  1_111_924523013.arc  1_119_924523013.arc  1_127_924523013.arc  1_96_924523013.arc
1_104_924523013.arc  1_112_924523013.arc  1_120_924523013.arc  1_128_924523013.arc  1_97_924523013.arc
1_105_924523013.arc  1_113_924523013.arc  1_121_924523013.arc  1_129_924523013.arc  1_98_924523013.arc
1_106_924523013.arc  1_114_924523013.arc  1_122_924523013.arc  1_130_924523013.arc  1_99_924523013.arc
1_107_924523013.arc  1_115_924523013.arc  1_123_924523013.arc  1_92_924523013.arc   bk
此時已經找回126號日誌檔案。

--手動註冊使用日誌:
SQL> alter database register physical logfile '/home/oracle/arch/PROD/1_126_924523013.arc';
Database altered.
註冊成功。

--恢復使用日誌並檢視使用狀況
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
Database altered.

SQL> select SEQUENCE#,APPLIED from v$archived_log;
... ...
SEQUENCE# APPLIED
---------- ---------
       121 YES
       122 YES
       123 NO
       124 YES
       125 YES
       123 YES
       126 NO
       127 YES
       128 YES
       129 YES
       130 IN-MEMORY
 SEQUENCE# APPLIED
---------- ---------
       126 YES
可以看到,恢復使用126日誌之後,126號日誌後面的日誌檔案自動使用到。

--使用日誌檔案之後,備庫檢視mytable中的資料是否與主庫保持一致性:
SQL> select * from suxing.mytable;
        ID NAME                   TEL CREATED
---------- --------------- ---------- ---------
     12349 ppenmo          1.3925E+10 20-OCT-16
     12350 qqenmo          1.3925E+10 20-OCT-16
     12345 Suxing su       1.2365E+10
     12346 Sky             1.3727E+10 16-OCT-16
     12347 prod            1.5825E+10
     12348 enmo            1.5925E+10
6 rows selected.
可以看到,備庫恢復到與主庫一致的狀態。

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

相關文章