今天數據羣有人反應網站不能正常打開,經檢查Oracle數據庫遠程連不上,提示信息:ORA-00257: archiver error. Connect internal only, until freed。多是archivelog滿了。之前學習SQL只關注CRUD,對日誌瞭解甚少,這次宕機雖然對生成沒有形成惡劣影響,但也是由於業務不熟悉所致,特花一天時間學習並記錄Oracle日誌歸檔功能。.sql
如下內容針對沒有使用Oracle ASM磁盤組狀況,使用了Oracle ASM磁盤組的狀況之後分析。數據庫
shutdown immediate;
startup mount;
alter database archivelog;
alter database noarchivelog;
alter database open;
archive log list;
show parameter db_recovery_file_dest;
Oracle11g版本,ORACLE默認的日誌歸檔路徑爲閃回恢復區($ORACLE_BASE/fast_recovery_area)。對於這個路徑,Oracle有一個限制,就是默認只有4G的空間,並且不僅是歸檔日誌的默認路徑,也是備份文件和閃回日誌的默認地址,這樣的話歸檔日誌鎖使用的空間就達不到4G。windows
select * from V$FLASH_RECOVERY_AREA_USAGE;
select * from v$recovery_file_dest;
alter system set db_recovery_file_dest_size=8G scope=both;
alter system set db_recovery_file_dest='location=C:\app\Administrator\oracle_log' scope=both;
alter system set log_archive_dest_1=’location=C:\app\Administrator\oracle_log’;
查看archiv log所在位置網絡
show parameter log_archive_dest;
archive log list;
經過切換日誌,查看歸檔路徑下是否有歸檔日誌產生來驗證歸檔路徑設置是否正確,切換日誌命令以下oracle
alter system switch logfile;
方法二和方法三都是修改歸檔文件存儲路徑,具體區別是什麼呢,要想理解具體區別就要先理解歸檔日誌路徑三個參數app
show parameter db_recovery_file_dest;
show parameter LOG_ARCHIVE_DEST;
三個參數區別以下ssh
利用RMAN進行刪除操做,操做步驟以下:學習
window客戶端系統爲例測試
list archivelog all;
crosscheck archivelog all;
delete expired archivelog all;
List archivelog all;
select substr(t.NAME,1) NAME,ROUND(sum(t.BLOCKS*t.BLOCK_SIZE)/1024/1024) TOTAL_MB from v$archived_log t where t.DELETED='NO' group by substr(t.NAME,1);
徹底正確,至此歸檔文件徹底刪除~!網站