由於Standby停機造成主備歸檔不一致,從而產生GAP的解決方案_20100128
由於Standby停機造成主備歸檔不一致,從而產生GAP的解決方案
環境:
Oracle9i + Suse9 + DataGuard + 預設的最大效能模式
Primary引數檔案:
*.log_archive_dest_1='LOCATION=/u01/arch'
*.log_archive_dest_2='SERVICE=standby LGWR'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
Standby引數檔案:
*.fal_server='primary'
*.fal_client='standby'
DB_FILE_NAME_CONVERT=('/u01/oracle/oradata/dzzds20','/u01/oracle/oradata/dzzds20')
LOG_FILE_NAME_CONVERT=('/u01/oracle/oradata/dzzds20','/u01/oracle/oradata/dzzds20')
*.standby_file_management=auto
*.standby_archive_dest='/u01/arch'
LOG_ARCHIVE_DEST_1='LOCATION=/u01/arch'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
由於停機造成主備不一致,歸檔#Sequence = 538 到541的歸檔日誌未應用到備庫
備庫中Alert.log
Mon Jan 25 16:23:51 2010
Failed to request gap sequence. Thread #: 1, gap sequence: 538-541
All FAL server has been attempted.
SQL> select * from V$ARCHIVE_GAP;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
1 538 541
主庫有備份,但本地磁碟上的歸檔已透過RMAN delete archivelog 刪除,必須從磁帶上恢復.
現要求重新達到主備的一致性狀態.
解決方案:
1 將歸檔538 -- 541 從磁帶中恢復到Primary的歸檔路徑.觀察是否能夠主動傳送到Standby? 可以透過切換日誌的方法來觸發日誌傳輸?
分析:
控制檔案和Catalog 中記錄 Sequence 538-541的資訊已刪除,無法恢復Archivelog. 只能先恢復控制檔案.
這樣必須做Resetlogs,會丟失主庫之前所有的備份,且要重啟Primay,影響正常業務不合適
2 重做Standby (the last restore)
分析:在Primary不down的情況下利用RMAN做Standby ,這種方案是比較徹底的,但不夠理想.
參考<< RMAN學習筆記_ Duplicate重做DataGuard>>
5 最終解決方案DBMS_backup_retore 包
解決過程:
查詢538-541這些歸檔檔案在哪個Backup piece裡面.
SQL> select * from v_$backup_redolog where sequence# in (538,539,540,541);
RECID STAMP SET_STAMP SET_COUNT THREAD# SEQUENCE# RESETLOGS_CHANGE# RESETLOGS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME BLOCKS BLOCK_SIZE
---------- ---------- ---------- ---------- ---------- ---------- ----------------- --------- ------------- --------- ------------ --------- ---------- ----------
408 709002012 709002011 65 1 539 1 01-JUL-09 2.6961E+12 22-JAN-10 2.6961E+12 23-JAN-10 558 512
410 709002012 709002011 65 1 538 1 01-JUL-09 2.6961E+12 22-JAN-10 2.6961E+12 22-JAN-10 1 512
411 709002595 709002594 68 1 540 1 01-JUL-09 2.6961E+12 23-JAN-10 2.6961E+12 23-JAN-10 10 512
412 709088404 709088403 70 1 541 1 01-JUL-09 2.6961E+12 23-JAN-10 2.6961E+12 24-JAN-10 1203 512
413 709088404 709088403 70 1 540 1 01-JUL-09 2.6961E+12 23-JAN-10 2.6961E+12 23-JAN-10 10 512
540歸檔出現在兩個Backup Piece中,說明,540是重複備份的.
由此注意:備份過程中,Backup piece的Format 一定要標記backup set id, and backup piece ID;
declare
devtype varchar2(256);
done boolean;
begin
devtype := sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'t1');
sys.dbms_backup_restore.restoreSetArchivedLog(destination=>'/u01/arch/');
sys.dbms_backup_restore.restoreArchivedlog(thread=>1,sequence=>538);
sys.dbms_backup_restore.restoreArchivedlog(thread=>1,sequence=>539);
sys.dbms_backup_restore.restorebackuppiece(done=>done,handle=>'/u01/backup/dzzd/DZZDS20x_65_1.log',params=>null);
sys.dbms_backup_restore.devicedeallocate;
end;
/
declare
devtype varchar2(256);
done boolean;
begin
devtype := sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'t2');
sys.dbms_backup_restore.restoreSetArchivedLog(destination=>'/u01/arch/');
sys.dbms_backup_restore.restoreArchivedlog(thread=>1,sequence=>540);
sys.dbms_backup_restore.restoreArchivedlog(thread=>1,sequence=>541);
sys.dbms_backup_restore.restorebackuppiece(done=>done,handle=>'/u01/backup/dzzd/DZZDS20x_70_1.log',params=>null);
sys.dbms_backup_restore.devicedeallocate;
end;
/
歸檔恢復後,Oracle會自動傳遞迴檔到備端,備端會自動應用歸檔.可透過檢視兩邊Log來觀察.
應用完成後,檢視GAP
SQL> select * from V$ARCHIVE_GAP;
no rows selected
至此問題解決
相關問題
1 Primary上的歸檔538-- 541為什麼會被刪掉,之前不是測試過如沒用應用到Standby是不會刪除本地歸檔的嗎?
可能的原因是,當Standby被停機後,不再遵循這個規則?
進一步學習DataGuard相關文件,什麼情況下會產生Gap.
2 這證明目前的備份與歸檔的處理策略在Dataguard環境下不夠完善,
在GoldenGate環境下也同樣存在問題
要改進,確保刪除歸檔之前,歸檔已傳輸應用到了備庫或遠端.
3 如何手動觸發FAL去取Gap 歸檔?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10248702/viewspace-626241/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【ASK_ORACLE】由於索引分裂而產生的效能問題的解決方案Oracle索引
- 利用增量備份恢復因歸檔丟失造成的DG gap
- 使用RMAN增量備份處理Dataguard因歸檔丟失造成的gap
- dg 主庫丟失歸檔 解決方案
- [zt] 手工處理Standby 歸檔間隔(gap)的問題
- 在用package方式產生.xml時由於有&造成問題的處理PackageXML
- ModuleAB:基於beego框架開發的阿里雲備份/歸檔解決方案Go框架阿里
- GlobalFoundries生產eMRAM解決方案
- mysql主備庫資料不一致的原因和解決方案MySql
- 用於巧克力生產的RFID完整解決方案
- Oracle Standby如何檢視歸檔檔案(從主庫傳來的)是否真的應用?Oracle
- mysql雙寫造成主從資料不一致的實驗MySql
- 《MySQL主從不一致情形與解決方法》MySql
- MySQL主從不一致情形與解決方法MySql
- 歸檔日誌大小 與使用rman 備份後的歸檔日誌產生的備份集大小的關係
- 工控主機加固解決方案
- 利用增量備份恢復gap歸檔丟失DG
- 生產上刪除歸檔的命令
- Oracle主庫歸檔丟失,備庫日誌有gap,在不重建備庫的情況下,恢復備庫Oracle
- 運用incremental backup(增量備份)恢復歸檔GAP的DGREM
- 生產環境中mysql資料庫由主從關係切換為主主關係MySql資料庫
- 通用模板解決方案,提升影片生產效率
- 造成黏包的原因,及解決方案
- innodb 庫的備份注意點(由phpmyadmin引起的解決方案)PHP
- dataguard 主備庫出現gap
- [記錄]Standby相關引數及gap問題解決
- MySQL主從複製延遲解決方案MySql
- 每天產生REDO歸檔日誌量
- 歸檔日誌滿造成資料庫當機資料庫
- MySQL主從延遲解決方法的歸納和總結MySql
- 解決物理standby 歸檔日誌損壞ORA-00334
- DG日誌不應用,GAP,主備切換解決思路與辦法
- 高階停車場停車計費解決方案
- 網路故障造成備庫standby logfile的損壞
- rman 非歸檔模式下停庫備份與恢復模式
- 乾貨:基於scss的主題配色解決方案CSS
- 如何基於生產環境mysql 5.6.25主從部署新的mysql從庫操作指南MySql
- 寫了一個SAP得關於專案型生產的FICO模組的解決方案