oracle 日志写满,Oracle归档日志写满错误解决方法
最近一年,手頭上負(fù)責(zé)的項目要部署到很多個地方,由于項目組里沒有人對Oracle比較熟悉,只能給自己增加一個DBA的角色了。由于短時間內(nèi)要部署很多單位,備份策略沒有設(shè)置好,結(jié)果過了一個月,用戶報告程序開始連不上數(shù)據(jù)庫了,并且發(fā)給我錯誤報告。主要是ora-16038、 ora-19809、 ora-00312三個錯誤,意思很明確,就是歸檔日志寫滿了,沒法繼續(xù)寫入歸檔日志了,導(dǎo)致數(shù)據(jù)庫被暫停了,等待繼續(xù)寫入歸檔日志到硬盤。
由于用戶業(yè)務(wù)比較緊張,先考慮緊急處理方案,先將數(shù)據(jù)庫恢復(fù)正常,然后再給用戶數(shù)據(jù)庫設(shè)計合理的備份方案,使數(shù)據(jù)庫以后不再出現(xiàn)類似錯誤了。
(為保護(hù)用戶信息,使用密碼,連接 指示符使用manager和orcl代替用戶實際數(shù)據(jù))
?使用rman清理歸檔日志和備份,看可不可以清理出來一部分空間,如果清理出來足夠的空間,則數(shù)據(jù)庫應(yīng)該可以恢復(fù)正常了。
rman target sys/manager@orcl
crosscheck backup;
crosscheck archivelog all;
crosscheck copy;
delete expired backup;
delete expired archivelog all;
delete expired copy;
delete obsolete;
?
如果使用了快速恢復(fù)區(qū),檢查db_recovery_file_dest和db_recovery_file_dest_size,如果目錄所在位置還有空間,只需增大db_recovery_file_dest_size就可以使數(shù)據(jù)庫恢復(fù)正常。
?
如果沒有使用快速恢復(fù)區(qū),檢查 show parameter
log_archive_dest,根據(jù)目錄位置,看可不可以增大歸檔的目錄的大小,比如刪除目錄所在分區(qū)的其他文件。如果可以清理出空間,數(shù)據(jù)庫應(yīng)該就可以恢復(fù)正常了
?
如果不想使用上面的方法,想要刪除以前的歸檔日志來釋放空間,為安全起見,首先將要刪除的歸檔日志復(fù)制到其他地方,然后使用rman刪除剛剛備份的日志。
如果歸檔日志保存在文件系統(tǒng)上,則根據(jù)上面獲取的歸檔日志目錄的位置,將準(zhǔn)備刪除的歸檔日志拷貝到指定位置,如果歸檔日志存儲在asm里,就稍微麻煩一點,需要在asmcmd里使用cp命令將歸檔日志備份。
rman target sys/manager@orcl
--查看歸檔日志文件信息
list archivelog all;
--然后使用以下方法中的任意一種刪除剛剛已經(jīng)備份過的歸檔日志文件。
--刪除從序列號為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'
刪除歸檔日志文件后,馬上對數(shù)據(jù)庫做全備份。然后就可以使用以下代碼清理歸檔日志文件了。
rman target sys/manager@orcl
crosscheck backup;
crosscheck archivelog all;
crosscheck copy;
delete expired backup;
delete expired archivelog all;
delete expired copy;
delete obsolete;
總體來說,這個錯誤是由數(shù)據(jù)庫空間規(guī)劃和備份策略沒有提前設(shè)計好導(dǎo)致,做完應(yīng)急處理后應(yīng)該盡快重新對數(shù)據(jù)庫空間和備份策略重新進(jìn)行設(shè)計,以防再次出現(xiàn)以上問題,影響用戶使用。
ps
如果在數(shù)據(jù)庫hold的時候使用了強制關(guān)閉數(shù)據(jù)庫時,可能在開機(jī)時會遇到其它的問題,此時需要先清理待歸檔的日志文件,方法為
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;
總結(jié)
以上是生活随笔為你收集整理的oracle 日志写满,Oracle归档日志写满错误解决方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle管理用户安全,oracle中
- 下一篇: oracle 批量修改表结构,关于Ora