ORA-16014 與 ORA-00312,ora-16014ora-00312
情境:
SQL> alter system archive log current;
alter system archive log current
*
第 1 行出現錯誤:
ORA-16014: 日誌 2 sequence# 34 未歸檔, 沒有可用的目的地
ORA-00312: 聯機日誌 2 線程 1: '+DATA_DG/orcl/onlinelog/group_2.258.885126161'
ORA-00312: 聯機日誌 2 線程 1: '/orabak/clog/orcl02.log'
環境是個人的實驗環境。
排查:
切日誌時發現該日誌無法歸檔了,然後進行以下排查
1. 檢查日誌格式,確定日誌格式log_archive_format正確
2. 檢查日誌歸檔目錄正常,包括位置、許可權、可用空間,確定無誤
3. 查看錯誤記錄檔
cat /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_ora_18338.trc
ORA-00313: 無法開啟日誌組 4 (用於線程 2) 的成員
DDE: Problem Key 'ORA 313' was flood controlled (0x1) (no incident)
ORA-00313: 無法開啟日誌組 4 (用於線程 2) 的成員
ORA-00313: 無法開啟日誌組 4 (用於線程 2) 的成員
Initial buffer sizes: read 1024K, overflow 832K, change 805K
DDE: Problem Key 'ORA 313' was flood controlled (0x1) (no incident)
ORA-00313: 無法開啟日誌組 4 (用於線程 2) 的成員
ORA-00313: 無法開啟日誌組 4 (用於線程 2) 的成員
可以看到記憶體有一定溢出
分析:
經過排查可以確定是日誌本身出現了問題,比較官方的解釋如下
ORA-01624: log string needed for crash recovery of instance string (thread string).
Cause: A log cannot be dropped or cleared until the thread's checkpoint has advanced out of the log..
Action: If the database is not open, then open it. Crash recovery will advance the checkpoint. If the database is open force a global checkpoint. If the log is corrupted so that the database cannot be opened, it may be necessary to do incomplete recovery until cancel at this log.
大概意思是檢查點進程在一直在處理該檔案,不能被刪除或清除其內容,類似於卡死,可以通過recover來恢複。通過錯誤記錄檔,我們推測該問題很有可能是因為記憶體溢出造成的。
查看記憶體:
[root@rac1 ~]# free -m
total used free shared buffers cached
Mem: 1878 1736 142 0 6 683
-/+ buffers/cache: 1045 832
Swap: 3999 354 3645
空閑記憶體不足,並且swap分區發生了交換,確實記憶體不足。
解決方案:
資料庫有rman備份,啟動到mount狀態進行recover.
SQL>shutdown immediate
SQL>startup mount;
SQL>recover
ORA-00283: 恢複會話因錯誤而取消
ORA-00264: 不要求恢複
SQL>alter database open;
資料庫已更改。
SQL>alter system archive log current;
系統已更改。
回顧:
recover的時候報錯了,但庫啟動後可以歸檔,並且是無損恢複,資料沒有任何的丟失。那麼這個過程發生了什嗎?
recover會讀取記錄檔、undo等檔案,進行資料庫事務的復原前滾等操作,而在open資料庫的時候還會對資料庫檔案的一致進行處理。
查看alert可以看到以下過程
Thread 2 advanced to log sequence 33 (before internal thread enable)
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_ora_18338.trc:
ORA-00313: 無法開啟日誌組 4 (用於線程 2) 的成員
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_ora_18338.trc:
ORA-00313: 無法開啟日誌組 4 (用於線程 2) 的成員
Archived Log entry 56 added for thread 2 sequence 32 ID 0xb9a2cd8c dest 1:
Thread 2 advanced to log sequence 34 (after internal thread enable)
Wed Jul 22 18:28:47 2015
ARC2 started with pid=35, OS id=18513
Wed Jul 22 18:28:47 2015
Thread 1 opened at log sequence 39
Current log# 1 seq# 39 mem# 0: +DATA_DG/orcl/onlinelog/group_1.257.885126161
Current log# 1 seq# 39 mem# 1: /orabak/clog/orcl01.log
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Wed Jul 22 18:28:47 2015
SMON: enabling cache recovery
Instance recovery: looking for dead threads
Instance recovery: lock domain invalid but no dead threads
ARC1: Archival started
可以看到Oracle進行了緩衝的恢複並對死進程進行了處理。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。