Oracle 歸檔日志文件


 

 

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

以下內容針對沒有使用Oracle ASM磁盤組情況,使用了Oracle ASM磁盤組的情況以后分析。

  • Oracle日志操作模式分為兩種:ARCHIVELOG、NOARCHIVELOG

連接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。

測試入庫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;

通過切換日志,查看歸檔路徑下是否有歸檔日志產生來驗證歸檔路徑設置是否正確,切換日志命令如下

alter system switch logfile;

方法二和方法三都是修改歸檔文件存儲路徑,具體區別是什么呢,要想理解具體區別就要先理解歸檔日志路徑三個參數

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

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

  • 3、LOG_ARCHIVE_DEST_n:指定歸檔文件存放的路徑,Oracle最多支持把日志文件歸檔到31個地方,n從1到31。歸檔地址可以為本地磁盤,或者網絡設備。

     三個參數區別如下

    • 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_n和DB_RECOVERY_FILE_DEST。如果設置了LOG_ARCHIVE_DEST_n,就不能設置LOG_ARCHIVE_DEST。也就是說,LOG_ARCHIVE_DEST參數和DB_RECOVERY_FILE_DEST、LOG_ARCHIVE_DEST_n都不共存。而DB_RECOVERY_FILE_DEST和LOG_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);

完全正確,至此歸檔文件完全刪除~!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM