一、查看當前歸檔模式
archive log list;
二、歸檔/不歸檔切換
shutdown immediate; -- 或shutdown normal startup mount; alter database archivelog; -- 或NOARCHIVELOG alter database open;
三、開啟自動歸檔
alter system archive log start;
四、查看默認的存檔位置
show parameter db_reco;
五、歸檔進程ARCn
重做日志寫進程(LGWR)負責將redo-buffer中的數據順序的寫入redolog中———讀內存寫外存;
歸檔進程(ARCn)負責把切換后的redolog復制到歸檔日志文件。————讀外存寫外存;
顯然,LGWR的讀寫效率要比ARCn高得多,而在經常發生DML操作的數據庫中,可能發生由於歸檔慢而重做日志寫入速度快所造成的數據庫被暫時停止執行的情況,此時數據庫就是等待ARCn將當前的重做日志數據寫入歸檔日志。
解決方案:增加歸檔進程的數量(log_archive_max_processes)
SQL> show parameter log_archive_max_processes;
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_max_processes integer 4
SQL> alter system set log_archive_max_processes=5;
六、自定義存檔路徑
執行命令show parameter log_archive_dest;
可以查看到多條記錄,這些記錄都是用於存放用戶自定義路徑的“預定義變量”。當有一個變量被設定后,就不會再歸檔至默認路徑。當多個變量被設定,會同時歸檔至各個指定路徑下(安全性)。
SQL> show parameter log_archive_dest; NAME TYPE VALUE ------------------------------------ ----------- log_archive_dest string -- 這個參數從10g開始已經被廢棄!! log_archive_dest_1 string ...... log_archive_dest_8 string log_archive_dest_9 string log_archive_dest_10 string SQL> alter system set log_archive_dest_1='location=/u01/app/oracle/archive/arch1'; SQL> alter system set log_archive_dest_8='location=/u01/app/oracle/archive/arch8'; SQL> alter system switch logfile -- 手動強制歸檔
執行如上代碼,結果會發現在arch1和arch8目錄下都會生成歸檔文件。
那么如果不想再歸檔至arch8目錄了該怎么辦?
每一個log_archive_dest_x參數都有一個對應的state參數,如下所示,可以執行命令alter system set log_archive_dest_state_8='defer';使其失效。
SQL> show parameter log_archive_dest; NAME TYPE VALUE ---------------------------------------------------------------------- log_archive_dest_state_1 string enable log_archive_dest_state_2 string enable ... ... log_archive_dest_state_7 string enable log_archive_dest_state_8 string enable log_archive_dest_state_9 string enable
七、查詢成功歸檔日志文件組的最低數(安全性)
在第六步“自定義存檔位置”的基礎上,進一步提升歸檔安全性。
log_archive_min_succeed_dest:限定Oracle必須保證成功的歸檔文件組的數量;
比如之前定義了兩個歸檔路徑,如果該值設定為2,則限定Oracle必須保證該兩個路徑中的歸檔必須成功完整。
注:自定義的歸檔路徑數量 > log_archive_min_succeed_dest的值
SQL> alter system set log_archive_min_succeed_dest=2; alter system set log_archive_min_succeed_dest=2 ORA-02097: parameter cannot be modified because specified value is invalid ORA-16020: fewer destinations available than specified by LOG_ARCHIVE_MIN_SUCCEED_DEST
報錯原因:當前僅有一個默認歸檔路徑,最低數要求卻設置為了2!
解決方法:再添加一個歸檔路徑,重新設置該值。
八、一些日志統計腳本
1. 估算系統每秒產生的日志量和每天產生的日質量(待梳理驗證)

declare ac number; sec_redo number; day_redo number; sec_redo_90 number; day_redo_90 number; str varchar(100); begin select count(*) into ac from v$database where log_mode = 'NOARCHIVELOG'; if ac = 1 then dbms_output.put_line('The database is running on NOARCHIVELOG mode,No archivelog !!!'); else str := ''; for i in (select destination from v$archive_dest where status = 'VALID' and destination is not null) loop str := str || ',' || i.destination; end loop; dbms_output.put_line('Archive dest is' || substr(str, 2)); select trunc(sum((blocks * block_size) / 1024) / ((max(first_time) - min(first_time)) * 24 * 3600)), trunc(sum((blocks * block_size) / 1024 / 1024) / ((max(first_time) - min(first_time)))) into sec_redo, day_redo from v$archived_log; dbms_output.put_line('每秒產生日志的頻率:' || sec_redo || '(KB)'); dbms_output.put_line('每天產生日志的頻率:' || day_redo || '(MB)'); dbms_output.put_line('最近3個月的統計數據:'); select trunc(sum((blocks * block_size) / 1024) / ((max(first_time) - min(first_time)) * 24 * 3600)), trunc(sum((blocks * block_size) / 1024 / 1024) / ((max(first_time) - min(first_time)))) into sec_redo_90, day_redo_90 from v$archived_log where first_time > SYSDATE - 91; dbms_output.put_line('每秒產生日志的頻率:' || sec_redo_90 || '(KB)'); dbms_output.put_line('每天產生日志的頻率:' || sec_redo_90 || '(MB)'); end if; end;
2. 統計歸檔日志的每日生成量
SQL> select lpad(to_char(first_time,'yyyymmdd'),12) "Date", trunc(sum(blocks*block_size)/1024/1024) "size(MB)", count(*) "count" from v$archived_log where first_time>SYSDATE-31 group by lpad(to_char(first_time,'yyyymmdd'),12) order by 1 desc; Date size(MB) count ------------------------------------------------ ---------- ---------- 20211102 113 5 20211101 236 9 20211031 285 11 20211030 309 11 20211029 238 10 20211028 279 16 20211027 257 10