Oracle_dg歸檔丟失問題處理

chenoracle發表於2017-11-16


Oracle_dg歸檔丟失問題處理


環境:
OS:RedHat 6.3 
DB: Oracle Database 11g Enterprise Edition Release 12.1.0.2.0

故障:主,備庫歸檔檔案只保留7天,超過7天的歸檔會自動刪除;

由於備庫伺服器停機過一段時間,導致主庫部分歸檔還沒有傳到備庫,就已經被刪除了;

解決方案:
(1)如果資料量很小,可以考慮重建備庫;
(2) 如果資料量很大,可以使用Rman基於SCN的增量備份來修復GAP問題

本文主要講解第二種解決方案

Rman基於SCN的增量備份來修復GAP
(1)問題現象
(2)查詢主庫中是否存在產生GAP的歸檔檔案

(3)確定增量恢復的起始SCN號
(4)主庫:使用Rman基於SCN的增量備份
(5)備庫:恢復
(6)測試

(1)問題現象
---備庫無法open,報錯無法獲取sequence# 43968
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-10458: standby database requires recovery
ORA-01196: file 1 is inconsistent due to a failed media recovery session
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
ORA-16043: Redo apply has been canceled.
ORA-16016: archived log for thread 1 sequence# 43968 unavailable
ORA-10877: error signaled in parallel recovery slave
ORA-10877: error signaled in parallel recovery slave
ORA-10877: error signaled in parallel recovery slave
ORA-10877: error signaled in parallel recovery slave
ORA-10877: error signaled in parallel recovery slave
ORA-10877: error signaled in parallel recovery slave
ORA-10877: error signaled in parallel recovery slave

---警告日誌:
Wed Nov 15 16:04:56 2017
Errors in file /u01/app/oracle/diag/rdbms/standby_orcl/orcl/trace/orcl_pr00_13628.trc:
ORA-16043: Redo apply has been canceled.
ORA-16016: archived log for thread 1 sequence# 43968 unavailable
Wed Nov 15 16:04:56 2017
Standby Crash Recovery aborted due to error 10877.
Wed Nov 15 16:04:56 2017
Errors in file /u01/app/oracle/diag/rdbms/standby_orcl/orcl/trace/orcl_ora_12435.trc:
ORA-10877: error signaled in parallel recovery slave 
ORA-10877: error signaled in parallel recovery slave 
Wed Nov 15 16:04:56 2017
Completed Standby Crash Recovery.
Wed Nov 15 16:04:56 2017
Errors in file /u01/app/oracle/diag/rdbms/standby_orcl/orcl/trace/orcl_ora_12435.trc:
ORA-10458: standby database requires recovery
ORA-01196: file 1 is inconsistent due to a failed media recovery session
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
ORA-16043: Redo apply has been canceled.
ORA-16016: archived log for thread 1 sequence# 43968 unavailable
ORA-10877: error signaled in parallel recovery slave 
ORA-10877: error signaled in parallel recovery slave 
ORA-10877: error signaled in parallel recovery slave 
ORA-10877: error signaled in parallel recovery slave 
ORA-10877: error signaled in parallel recovery slave 
ORA-10877: error signaled in parallel recovery slave 
ORA-10877: error signaled in parallel recovery slave 
ORA-10458 signalled during: alter database open...

(2)查詢主庫中是否存在產生GAP的歸檔檔案
---備庫gap
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
   THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
         1         43968          50948

---主庫
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 43968 AND 50948;
NAME
--------------------------------------------------------------------------------
......
/u01/ora_arch/1_50943_910299442.dbf
/u01/ora_arch/1_50944_910299442.dbf
/u01/ora_arch/1_50945_910299442.dbf
/u01/ora_arch/1_50946_910299442.dbf
/u01/ora_arch/1_50947_910299442.dbf
/u01/ora_arch/1_50948_910299442.dbf

3966 rows selected.

---發現主備部分歸檔檔案已經自動刪除,無法直接恢復
[root@CHENorcdb1 ~]# cd /u01/ora_arch/
[root@CHENorcdb1 ora_arch]# ll -rth > 1116.txt
[root@CHENorcdb1 ora_arch]# vi 1116.txt
......

(3)確定增量恢復的起始SCN號
---備庫
SQL> select file#,checkpoint_change# from v$datafile order by checkpoint_change#;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         7            1812569
         5            1812569
         4         1879904814
         6         1879904814
        14         1879904814
         9         1879904814
        10         1879904814
        11         1879904814
        12         1879904814
        13         1879904814
         3         1879904814
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1         1879904814
         8         1879904814

13 rows selected.

主庫:
SQL> select file#,checkpoint_change# from v$datafile order by checkpoint_change#;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         7            1812569
         5            1812569
         4         2205980530
         6         2205980530
        14         2205980530
         9         2205980530
        10         2205980530
        11         2205980530
        12         2205980530
        13         2205980530
         3         2205980530
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1         2205980530
         8         2205980530

13 rows selected.

(4)主庫:使用Rman基於SCN的增量備份
[oracle@CHENorcdb1 ~]$ rman target / 
Recovery Manager: Release 12.1.0.2.0 - Production on Thu Nov 16 13:18:45 2017
Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
connected to target database: ORCL (DBID=1438080174)
RMAN> 
run
{
allocate channel c3 device type disk; 
backup as compressed backupset incremental from scn 1879904814 database format '/home/oracle/rman1116/%U';
release channel c3;
}

---將備份傳到備庫
[oracle@CHENorcdb1 oracle]# tar -zcvf rman1116.tar.gz rman1116/
rman1116/
rman1116/0vsjna6b_1_1
rman1116/10sjna9v_1_1
rman1116/12sjnabm_1_1

[oracle@CHENorcdb1 ~]$ scp -P 49622 rman1116.tar.gz 192.168.5.50:/home/oracle/
oracle@192.168.5.50's password: 
rman1116.tar.gz                               100%  496MB  99.1MB/s   00:05

(5)備庫:恢復
[oracle@CHENorcdb2 ~]$ tar -zxvf rman1116.tar.gz 

---1 nomount備庫
SQL> shutdown immediate.
SQL> startup nomount

---2 透過備份恢復控制檔案
RMAN>   restore standby controlfile from '/home/oracle/rman1116/12sjnabm_1_1';
Starting restore at 16-NOV-17
using channel ORA_DISK_1

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
output file name=/u01/app/oracle/oradata/orcl/standby_control01.ctl
output file name=/u01/app/oracle/fast_recovery_area/orcl/standby_control02.ctl
Finished restore at 16-NOV-17

---3 mount備庫
SQL> alter database mount standby database;
Database altered.

---4 恢復備庫
RMAN> catalog start with '/home/oracle/rman1116';
RMAN> recover database;
......
archived log file name=/u01/ora_arch/1_51211_910299442.dbf thread=1 sequence=51211
media recovery complete, elapsed time: 00:00:05
Finished recover at 16-NOV-17

(6)驗證
---1 open備庫
SQL> alter database open;
---3 啟動應用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
---4 檢視歸檔GAP
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
no rows selected
---5 檢視當前序列號
SQL> select file#,checkpoint_change# from v$datafile order by checkpoint_change#;
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         7            1812569
         5            1812569
         4         2206259949
         6         2206259949
        14         2206259949
         9         2206259949
        10         2206259949
        11         2206259949
        12         2206259949
        13         2206259949
         3         2206259949
     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1         2206259949
         8         2206259949

13 rows selected.

---主庫:建立測試資料
SQL> create table test1116 as select level as id from dual connect by level <=10;
---備庫:查詢測試資料
SQL> select * from test1116;
        ID
----------
         1
         2
         3
         4
         5
         6
         7
         8
         9
        10

10 rows selected.
歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!

Oracle_dg歸檔丟失問題處理

Oracle_dg歸檔丟失問題處理



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

相關文章