ORA-16014 與 ORA-00312,ora-16014ora-00312

來源:互聯網
上載者:User

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進行了緩衝的恢複並對死進程進行了處理。










著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.