1. 程式人生 > 資料庫 >資料庫ORA-01196故障-歸檔日誌丟失恢復詳解

資料庫ORA-01196故障-歸檔日誌丟失恢復詳解

問題:

由於機房停電,其中一DG備庫無法open,啟動時報錯

啟動資料庫時報下面的錯誤

SQL> alter database open;
alter database open
*

第 1 行出現錯誤:

ORA-10458: standby database requiresrecovery
ORA-01196: 檔案 1 由於介質恢復會話失敗而不一致
ORA-01110: 資料檔案 1:'+DATA/htdb7/datafile/system.313.884996245'

檢視歸檔日誌應用情況,發現一部分日誌沒應用

SQL> Select Name,Sequence#,applied,completion_time From v$archived_log Order By Sequence# Desc;
Name,Sequence# applied completion_time
+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328776.705.939567729   328776   YES  NO  2017/3/2515:02
+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328775.713.939567727   328775   YES  NO  2017/3/2515:02
+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328774.777.939567727   328774   YES  NO  2017/3/2515:02
+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328773.771.939567725   328773   YES  NO  2017/3/2515:02
+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328772.422.939567721   328772   YES  NO  2017/3/2515:02
+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328771.482.939567721   328771   YES  NO  2017/3/2515:02
+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328770.755.939567721   328770   YES  NO  2017/3/2515:02
+FRA/htdb7/archivelog/2017_03_24/thread_1_seq_328757.1255.939481573  328757   YES  NO  2017/3/2415:06
+FRA/htdb7/archivelog/2017_03_24/thread_1_seq_328756.795.939480431   328756   YES  YES  2017/3/2414:47
+FRA/htdb7/archivelog/2017_03_24/thread_1_seq_328755.543.939479395   328755   YES  YES  2017/3/2414:29
+FRA/htdb7/archivelog/2017_03_24/thread_1_seq_328754.390.939478683   328754   YES  YES  2017/3/2414:18
+FRA/htdb7/archivelog/2017_03_24/thread_1_seq_328753.1845.939477943  328753   YES  YES  2017/3/2414:05
 
--再和其它備庫或主庫的歸檔日誌做對比,很明顯發現這個備庫沒有同步並應用主庫的日誌
--此備庫:
[oracle@hotel07 ~]$ asmcmd -p
ASMCMD [+fra/htdb7/ARCHIVELOG] > cd 2017_03_24/
ASMCMD [+fra/htdb7/ARCHIVELOG/2017_03_24]> ls
......
thread_1_seq_328754.390.939478683
thread_1_seq_328755.543.939479395
thread_1_seq_328756.795.939480431
thread_1_seq_328757.1255.939481573
 
--其它正常的備庫
[oracle@hotel05 ~]$ asmcmd -p
ASMCMD [+fra/htdb5/ARCHIVELOG/2017_03_24]> ls
thread_1_seq_328754.4124.939478683
thread_1_seq_328755.349.939479395
thread_1_seq_328756.852.939480431
thread_1_seq_328757.1420.939481575
thread_1_seq_328758.3356.939510647
thread_1_seq_328759.4592.939510649
thread_1_seq_328760.3205.939510647
thread_1_seq_328761.5308.939510649
thread_1_seq_328762.5227.939510653
.....

解決辦法:

需要從其它備庫或主庫上面把此備庫缺失的歸檔日誌手動傳輸過來,然後再進行open操作

步驟如下:

1. 在另一正常的備庫用rman備份缺失的歸檔日誌

[oracle@hotel05 ~]$ rman target /
RMAN> copy archivelog'+fra/htdb5/ARCHIVELOG/2017_03_24/thread_1_seq_328759.4592.939510649' to'/home/oracle/arcbak/thread_1_seq_328759.4592.939510649';

啟動 backup 於 25-3月 -17

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在開始複製歸檔日誌

輸入歸檔日誌執行緒=1 序列=328759 RECID=328754 STAMP=939510652

輸出檔名=/home/oracle/arcbak/thread_1_seq_328759.4592.939510649 RECID=328794STAMP=939571923

通道 ORA_DISK_1: 歸檔日誌複製完成,經過時間: 00:00:03

完成 backup 於 25-3月 -17
......

. 備份完成後,把歸檔傳輸到丟失歸檔的備庫
[oracle@hotel05 arcbak]$ scp * hotel07:/home/oracle/arcbak/

3. 然後在此備庫上進行恢復操作

-- 編制歸檔檔案目錄
[oracle@hotel07 ~]$ rman target /

恢復管理器: Release 11.2.0.2.0 - Production on 星期六 3月 25 15:42:112017
Copyright (c) 1982,2009,Oracle and/or itsaffiliates. All rights reserved.
已連線到目標資料庫: HTDB4 (DBID=1083719948,未開啟)

RMAN> catalog start with '/home/oracle/arcbak';

搜尋與樣式 /home/oracle/arcbak 匹配的所有檔案

資料庫未知檔案的列表
=====================================
檔名: /home/oracle/arcbak/thread_1_seq_328763.4773.939510653
檔名: /home/oracle/arcbak/thread_1_seq_328767.2765.939511033
檔名: /home/oracle/arcbak/thread_1_seq_328766.5854.939511023
檔名: /home/oracle/arcbak/thread_1_seq_328759.4592.939510649
檔名: /home/oracle/arcbak/thread_1_seq_328758.3356.939510647
檔名: /home/oracle/arcbak/thread_1_seq_328760.3205.939510647
檔名: /home/oracle/arcbak/thread_1_seq_328762.5227.939510653
檔名: /home/oracle/arcbak/thread_1_seq_328761.5308.939510649
檔名: /home/oracle/arcbak/thread_1_seq_328757.1420.939481575
檔名: /home/oracle/arcbak/thread_1_seq_328764.5801.939510653
檔名: /home/oracle/arcbak/thread_1_seq_328765.3298.939510657

是否確實要將上述檔案列入目錄(輸入 YES 或 NO)? y

正在編制檔案目錄...

目錄編制完畢

已列入目錄的檔案的列表
=======================
檔名: /home/oracle/arcbak/thread_1_seq_328763.4773.939510653
檔名: /home/oracle/arcbak/thread_1_seq_328767.2765.939511033
檔名: /home/oracle/arcbak/thread_1_seq_328766.5854.939511023
檔名: /home/oracle/arcbak/thread_1_seq_328759.4592.939510649
檔名: /home/oracle/arcbak/thread_1_seq_328758.3356.939510647
檔名: /home/oracle/arcbak/thread_1_seq_328760.3205.939510647
檔名: /home/oracle/arcbak/thread_1_seq_328762.5227.939510653
檔名: /home/oracle/arcbak/thread_1_seq_328761.5308.939510649
檔名: /home/oracle/arcbak/thread_1_seq_328757.1420.939481575
檔名: /home/oracle/arcbak/thread_1_seq_328764.5801.939510653
檔名: /home/oracle/arcbak/thread_1_seq_328765.3298.939510657
-- 恢復歸檔日誌
RMAN> copy archivelog '/home/oracle/arcbak/thread_1_seq_328757.1420.939481575' to '+fra';

啟動 backup 於 25-3月 -17

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在開始複製歸檔日誌

輸入歸檔日誌執行緒=1 序列=328760 RECID=149368 STAMP=939573701
輸出檔名=+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328760.474.939573739RECID=149375 STAMP=939573738

通道 ORA_DISK_1: 歸檔日誌複製完成,經過時間: 00:00:01

完成 backup 於 25-3月 -17
......

4. 最後就可以open資料庫了

SQL> alter database open;
SQL> select open_mode from v$database;
 
OPEN_MODE
--------------------
READ ONLY WITH APPLY
 
-- 檢視日誌 ,歸檔日誌正常進行應用
alter database open
Data Guard Broker initializing...
Data Guard Broker initialization complete
Beginning standby crash recovery.
Serial Media Recovery started
Managed Standby Recovery starting Real TimeApply
Media Recovery Log+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328757.499.939573737
Media Recovery Log/home/oracle/arcbak/thread_1_seq_328758.3356.939510647
Sat Mar 25 16:43:57 2017
Incomplete Recovery applied until change91347484119 time 03/24/2017 15:06:26
Completed standby crash recovery.
Sat Mar 25 16:43:58 2017
SMON: enabling cache recovery
Dictionary check beginning
Dictionary check complete
Database Characterset is ZHS16GBK
No Resource Manager plan active
replication_dependency_tracking turned off(no async multimaster replication found)
Physical standby database opened for readonly access.
Completed: alter database open
Sat Mar 25 16:44:01 2017
ALTER DATABASE RECOVER MANAGED STANDBYDATABASE THROUGH ALL SWITCHOVERDISCONNECT USING CURRENT LOGFILE
Attempt to start background Managed StandbyRecovery process (htdb7)
Sat Mar 25 16:44:01 2017
MRP0 started with pid=47,OS id=9619
MRP0: Background Managed Standby Recoveryprocess started (htdb7)
 started logmerger process
Sat Mar 25 16:44:06 2017
Managed Standby Recovery starting Real TimeApply
Parallel Media Recovery started with 16slaves
Waiting for all non-current ORLs to bearchived...
All non-current ORLs have been archived.
Media Recovery Log /home/oracle/arcbak/thread_1_seq_328758.3356.939510647
Media Recovery Log+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328759.1574.939573739
Completed: ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE THROUGH ALL SWITCHOVERDISCONNECT USING CURRENT LOGFILE
Media Recovery Log+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328760.922.939573741
Media Recovery Log+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328761.695.939573743
Media Recovery Log+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328762.1769.939573745
Media Recovery Log+FRA/htdb7/archivelog/2017_03_25/thread_1_seq_328763.1422.939573745

總結:

在由於停電和網路原因,造成主備資料不同步,日誌丟失的情況,主要學會使用rman工具把歸檔檔案在fs和asm之間傳輸。在資料庫恢復時會經常用到。

另外,如果資料庫開啟了閃回功能 ,也可以使用閃回資料庫的某個時點進行恢復。可以參考另一篇博文:oracle資料庫ORA-01196錯誤解決辦法分享。

希望對大家有所幫助,感謝閱讀。