最近一年,手頭上負責的項目要部署到不少個地方,因爲項目組裏沒有人對oracle比較熟悉,只能給本身增長一個DBA的角色了。因爲短期內要部署不少單位,備份策略沒有設置好,結果過了一個月,用戶報告程序開始連不上數據庫了,而且發給我錯誤報告。主要是ora-1603八、 ora-1980九、 ora-00312三個錯誤,意思很明確,就是歸檔日誌寫滿了,無法繼續寫入歸檔日誌了,致使數據庫被暫停了,等待繼續寫入歸檔日誌到硬盤。sql
因爲用戶業務比較緊張,先考慮緊急處理方案,先將數據庫恢復正常,而後再給用戶數據庫設計合理的備份方案,使數據庫之後再也不出現相似錯誤了。數據庫
(爲保護用戶信息,使用密碼,鏈接 指示符使用manager和orcl代替用戶實際數據)安全
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就可使數據庫恢復正常。markdown
若是沒有使用快速恢復區,檢查 show parameter
log_archive_dest,根據目錄位置,看可不能夠增大歸檔的目錄的大小,好比刪除目錄所在分區的其餘文件。若是能夠清理出空間,數據庫應該就能夠恢復正常了oracle
若是不想使用上面的方法,想要刪除之前的歸檔日誌來釋放空間,爲安全起見,首先將要刪除的歸檔日誌複製到其餘地方,而後使用rman刪除剛剛備份的日誌。數據庫設計
若是歸檔日誌保存在文件系統上,則根據上面獲取的歸檔日誌目錄的位置,將準備刪除的歸檔日誌拷貝到指定位置,若是歸檔日誌存儲在asm裏,就稍微麻煩一點,須要在asmcmd裏使用cp命令將歸檔日誌備份。spa
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的時候使用了強制關閉數據庫時,可能在開機時會遇到其它的問題,此時須要先清理待歸檔的日誌文件,方法爲code
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;