Oracle 歸檔日誌文件

今天數據羣有人反應網站不能正常打開,經檢查Oracle數據庫遠程連不上,提示信息:ORA-00257: archiver error. Connect internal only, until freed。多是archivelog滿了。之前學習SQL只關注CRUD,對日誌瞭解甚少,這次宕機雖然對生成沒有形成惡劣影響,但也是由於業務不熟悉所致,特花一天時間學習並記錄Oracle日誌歸檔功能。.sql

如下內容針對沒有使用Oracle ASM磁盤組狀況,使用了Oracle ASM磁盤組的狀況之後分析。數據庫

  • Oracle日誌操做模式分爲兩種:ARCHIVELOGNOARCHIVELOG

鏈接Oracle終端

  • windows系統:sqlplus

  • Linux系統:先登陸ssh,切換到oracle用戶,再啓動sqlplus登陸oracle

查看當前日誌操做模式

  • 通用方法:SELECT log_mode from v$database;

  • sys用戶:

開啓日誌歸檔

  • 啓用歸檔日誌前要先中止數據庫
shutdown immediate;

  • 數據庫以mount方式啓動
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

測試入庫100w數據,生成歸檔文件

  • 查看閃回空間已經佔用狀況
select * from V$FLASH_RECOVERY_AREA_USAGE;

  • 查看歸檔日誌文件數量
select  * from v$recovery_file_dest;

 當出現ORA-00257: archiver error. Connect internal only, until freed錯誤連不上數據的時候,若是數據庫歸檔目標爲USE_DB_RECOVERY_FILE_DEST且DB_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;
  • 方法修改歸檔日誌的路徑,將歸檔日誌放到其餘不受限制的路徑下來解決這個問題,可經過下面的SQL來修改歸檔日誌的存放路徑
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

  • 一、DB_RECOVERY_FILE_DEST閃回恢復區路徑
show parameter db_recovery_file_dest;

  • 二、LOG_ARCHIVE_DESTLOG_ARCHIVE_DEST:指定歸檔文件存放的路徑,該路徑只能是本地磁盤,默認爲’’
show parameter LOG_ARCHIVE_DEST;

  • 三、LOG_ARCHIVE_DEST_n:指定歸檔文件存放的路徑,Oracle最多支持把日誌文件歸檔到31個地方,n131。歸檔地址能夠爲本地磁盤,或者網絡設備。

     三個參數區別以下ssh

    • 1 若是設置了DB_RECOVERY_FILE_DEST,就不能設置LOG_ARCHIVE_DEST,默認的歸檔日誌存放於DB_RECOVERY_FILE_DEST指定的閃回恢復區中。能夠設置LOG_ARCHIVE_DEST_n,若是這樣,那麼歸檔日誌再也不存放於DB_RECOVERY_FILE_DEST中,而是存放於LOG_ARCHIVE_DEST_n設置的目錄中。若是想要歸檔日誌繼續存放在DB_RECOVERY_FILE_DEST中,能夠經過以下命令:alter system set log_archive_dest_1=’location=USE_DB_RECOVERY_FILE_DEST’;
    • 2 若是設置了LOG_ARCHIVE_DEST,就不能設置LOG_ARCHIVE_DEST_nDB_RECOVERY_FILE_DEST。若是設置了LOG_ARCHIVE_DEST_n,就不能設置LOG_ARCHIVE_DEST。也就是說,LOG_ARCHIVE_DEST參數和DB_RECOVERY_FILE_DESTLOG_ARCHIVE_DEST_n都不共存。而DB_RECOVERY_FILE_DESTLOG_ARCHIVE_DEST_n能夠共存。
    • 3 LOG_ARCHIVE_DEST只能與LOG_ARCHIVE_DUPLEX_DEST共存。這樣能夠設置兩個歸檔路徑。LOG_ARCHIVE_DEST設置一個主歸檔路徑,LOG_ARCHIVE_DUPLEX_DEST設置一個從歸檔路徑。全部歸檔路徑必須是本地的。
    • 4 若是LOG_ARCHIVE_DEST_n設置的路徑不正確,那麼Oracle會在設置的上一級目錄歸檔。好比設置LOG_ARCHIVE_DEST_1=’location=C:\archive1’,而OS中並無archive1這個目錄,那麼Oracle會在C盤歸檔。

刪除歸檔文件

  • 首先刪除歸檔文件在物理主機磁盤中的文件
  • 物理文件刪除後ORACLE的controlfile中仍然記錄着這些archivelog的信息,在oracle的OEM管理器中有可視化的日誌展示出,接下來要作的就是從controlfile中清除掉多餘歸檔日誌文件記錄

利用RMAN進行刪除操做,操做步驟以下:學習

window客戶端系統爲例測試

  • 打開Rman鏈接數據庫

  • 查看歸檔日誌的狀態
list archivelog all;
  • 執行archivelog校驗命令
crosscheck archivelog all;

  • 刪除校驗失敗的記錄
delete expired archivelog all; 

  • 選擇yes

 

  • 查看歸檔日誌
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);

徹底正確,至此歸檔文件徹底刪除~!網站

相關文章
相關標籤/搜索