程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle歸檔日志寫滿錯誤解決方法,oracle歸檔

oracle歸檔日志寫滿錯誤解決方法,oracle歸檔

編輯:Oracle教程

oracle歸檔日志寫滿錯誤解決方法,oracle歸檔


最近一年,手頭上負責的項目要部署到很多個地方,由於項目組裡沒有人對oracle比較熟悉,只能給自己增加一個DBA的角色了。由於短時間內要部署很多單位,備份策略沒有設置好,結果過了一個月,用戶報告程序開始連不上數據庫了,並且發給我錯誤報告。主要是ora-16038、 ora-19809、 ora-00312三個錯誤,意思很明確,就是歸檔日志寫滿了,沒法繼續寫入歸檔日志了,導致數據庫被暫停了,等待繼續寫入歸檔日志到硬盤。

由於用戶業務比較緊張,先考慮緊急處理方案,先將數據庫恢復正常,然後再給用戶數據庫設計合理的備份方案,使數據庫以後不再出現類似錯誤了。

(為保護用戶信息,使用密碼,連接 指示符使用manager和orcl代替用戶實際數據)

  • 使用rman清理歸檔日志和備份,看可不可以清理出來一部分空間,如果清理出來足夠的空間,則數據庫應該可以恢復正常了。
rman target sys/manager@orcl
crosscheck backup;
crosscheck archivelog all;
crosscheck copy;
delete expired backup;
delete expired archivelog all;
delete expired copy;
delete obsolete;
  • 如果使用了快速恢復區,檢查db_recovery_file_dest和db_recovery_file_dest_size,如果目錄所在位置還有空間,只需增大db_recovery_file_dest_size就可以使數據庫恢復正常。

  • 如果沒有使用快速恢復區,檢查 show parameter
    log_archive_dest,根據目錄位置,看可不可以增大歸檔的目錄的大小,比如刪除目錄所在分區的其他文件。如果可以清理出空間,數據庫應該就可以恢復正常了

  • 如果不想使用上面的方法,想要刪除以前的歸檔日志來釋放空間,為安全起見,首先將要刪除的歸檔日志復制到其他地方,然後使用rman刪除剛剛備份的日志。

    如果歸檔日志保存在文件系統上,則根據上面獲取的歸檔日志目錄的位置,將准備刪除的歸檔日志拷貝到指定位置,如果歸檔日志存儲在asm裡,就稍微麻煩一點,需要在asmcmd裡使用cp命令將歸檔日志備份。

rman target sys/manager@orcl
--查看歸檔日志文件信息
list archivelog all;
--然後使用以下方法中的任意一種刪除剛剛已經備份過的歸檔日志文件。
--刪除從序列號為xxx開始的所有歸檔日志文件
delete archivelog from sequence xxx;
--或者,刪除序列號在xxx和yyy之間的所有歸檔日志文件
delete archivelog sequence between xxx and yyy;
--或者刪除序列號一直到xxx的所有歸檔日志文件
delete archivelog until sequence xxx
--或者使用時間來指定要刪除的歸檔日志文件
--刪除從datestring指定的時間開始的所有歸檔日志
delete archivelog from time 'datestring'
--或者,刪除時間在datestring1和datestring2之間的所有歸檔日志文件
delete archivelog time between 'datestring1' and 'datestring2'
--或者刪除時間一直到datestring的所有歸檔日志文件
delete archivelog until time 'datestring'

刪除歸檔日志文件後,馬上對數據庫做全備份。然後就可以使用以下代碼清理歸檔日志文件了。

rman target sys/manager@orcl
crosscheck backup;
crosscheck archivelog all;
crosscheck copy;
delete expired backup;
delete expired archivelog all;
delete expired copy;
delete obsolete;

總體來說,這個錯誤是由數據庫空間規劃和備份策略沒有提前設計好導致,做完應急處理後應該盡快重新對數據庫空間和備份策略重新進行設計,以防再次出現以上問題,影響用戶使用。

ps
如果在數據庫hold的時候使用了強制關閉數據庫時,可能在開機時會遇到其它的問題,此時需要先清理待歸檔的日志文件,方法為

sqlplus sys/manager@orcl as sysdba
startup mount;
--獲取inactive且沒有歸檔的組
select group#,sequence#,archived,status from v$log;
--清理上一步獲取的歸檔日志組
alter database clear unarchived logfile group x;
alter database open;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved