一、查看歸檔信息java
SQL> archive log list Database log mode No Archive Mode Automatic archival Disabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 244 Current log sequence 246
當前數據庫未開啓歸檔linux
二、設置歸檔目錄shell
oracle默認使用閃回恢復區DB_RECOVERY_FILE_DEST做爲歸檔路徑數據庫
SQL> show parameter DB_RECOVERY_FILE_DEST NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string /u01/app/oracle/flash_recovery_area db_recovery_file_dest_size big integer 3882M
閃回恢復區在安裝過程當中有限制其大小,若是閃回恢復區滿了,歸檔日誌會沒法寫入而致使數據庫hang住,解決辦法能夠增長閃回區大小或者修改歸檔路徑bash
三、修改歸檔路徑oracle
修改log_archive_dest_1參數可修改歸檔日誌路徑(pfile/spfile中參數db_recovery_file_dest指定的目錄將無效)app
實際上從Oracle 10g開始,能夠生成多份同樣的日誌,保存多個位置,以防不測。多個位置經過設置不一樣的log_archive_dest_n 參數實現,archive log list輸出中的Archive destination路徑只顯示最新修改的路徑。ssh
SQL> show parameter log_archive_dest_1 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_1 string log_archive_dest_10 string log_archive_dest_11 string log_archive_dest_12 string log_archive_dest_13 string log_archive_dest_14 string log_archive_dest_15 string log_archive_dest_16 string log_archive_dest_17 string log_archive_dest_18 string log_archive_dest_19 string
修改歸檔路徑爲/u01/app/oracle/archive_logspa
SQL> alter system set log_archive_dest_1='location=/u01/app/oracle/archive_log' scope=spfile; System altered.
重啓生效.net
四、修改歸檔日誌格式
SQL> alter system set log_archive_format='ARC%S_%R.%T_%D.dbf' scope=spfile; System altered.
重啓生效
五、開啓歸檔
須要在mount狀態下開啓數據庫歸檔,重啓至mount
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 1603411968 bytes Fixed Size 2213776 bytes Variable Size 989857904 bytes Database Buffers 603979776 bytes Redo Buffers 7360512 bytes Database mounted.
開啓數據庫歸檔
SQL> alter database archivelog; Database altered.
查看歸檔狀況
SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /u01/app/oracle/archive_log Oldest online log sequence 244 Next log sequence to archive 246 Current log sequence 246
ALTER DATABASE FORCE LOGGING;
開啓強制歸檔
打開數據庫
SQL> alter database open; Database altered.
六、確認數據庫爲歸檔模式
SQL> select log_mode from v$database; LOG_MODE ------------ ARCHIVELOG SQL> select archiver from v$instance; ARCHIVE ------- STARTED
七、強制日誌切換
先查看當前歸檔日誌視圖和歸檔日誌路徑:
SQL> select name from v$archived_log; no rows selected
[oracle@zml-rhel6 archive_log]$ ll total 0
沒有歸檔日誌,下面執行強制日誌切換
SQL> alter system switch logfile; System altered.
再次查看視圖
SQL> select name from v$archived_log; NAME -------------------------------------------------------------------------------- /u01/app/oracle/archive_log/ARC0000000246_0963417259.0001_6833bc69.dbf
有歸檔日誌產生,驗證成功
一、手動物理刪除歸檔日誌
該方式利用linux的命令find查找N天之前的日誌,直接刪除
[oracle@localhost archive_log]$ find . -type f -mtime +2.4 -print |xargs ls -rlt -rw-r----- 1 oracle oinstall 16092672 6月 4 20:45 ./ARC0000000606_0977259429.0001_fb0ffee2.dbf -rw-r----- 1 oracle oinstall 38390272 6月 4 22:00 ./ARC0000000607_0977259429.0001_fb0ffee2.dbf -rw-r----- 1 oracle oinstall 32950272 6月 4 22:02 ./ARC0000000608_0977259429.0001_fb0ffee2.dbf
該例子中查詢到2.4天前日誌列表。手工物理刪除這些日誌文件:
[oracle@localhost archive_log]$ find . -type f -mtime +2.4 -print |xargs rm -f
雖然手工刪除的了歸檔日誌文件,可是控制文件中依然會有這些日誌的記錄,下面須要在控制文件中清理這些歸檔日誌。利用rman:
查看過時日誌:
RMAN> list expired archivelog all; specification does not match any archived log in the repository
返回信息顯示沒有過時日誌,這是由於須要先檢查歸檔日誌有效性,再進行刪除:
RMAN> crosscheck archivelog all; .... .... .... archived log file name=/home/oracle/app/oracle/archive/orclwhs/archive_log/ARC0000002400_0977259429.0001_fb0ffee2.dbf RECID=1795 STAMP=978255518 validation succeeded for archived log archived log file name=/home/oracle/app/oracle/archive/orclwhs/archive_log/ARC0000002401_0977259429.0001_fb0ffee2.dbf RECID=1796 STAMP=978255659 validation succeeded for archived log archived log file name=/home/oracle/app/oracle/archive/orclwhs/archive_log/ARC0000002402_0977259429.0001_fb0ffee2.dbf RECID=1797 STAMP=978256043 Crosschecked 1797 objects
再次查看過時歸檔日誌,rm刪除的三個文件便被標記爲了過時日誌:
RMAN> list expired archivelog all; List of Archived Log Copies for database with db_unique_name ORCLWHS ===================================================================== Key Thrd Seq S Low Time ------- ---- ------- - --------- 1 1 606 X 04-JUN-18 Name: /home/oracle/app/oracle/archive/orclwhs/archive_log/ARC0000000606_0977259429.0001_fb0ffee2.dbf 2 1 607 X 04-JUN-18 Name: /home/oracle/app/oracle/archive/orclwhs/archive_log/ARC0000000607_0977259429.0001_fb0ffee2.dbf 3 1 608 X 04-JUN-18 Name: /home/oracle/app/oracle/archive/orclwhs/archive_log/ARC0000000608_0977259429.0001_fb0ffee2.dbf
刪除過時歸檔日誌:
RMAN> delete expired archivelog all; released channel: ORA_DISK_1 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=446 device type=DISK List of Archived Log Copies for database with db_unique_name ORCLWHS ===================================================================== Key Thrd Seq S Low Time ------- ---- ------- - --------- 1 1 606 X 04-JUN-18 Name: /home/oracle/app/oracle/archive/orclwhs/archive_log/ARC0000000606_0977259429.0001_fb0ffee2.dbf 2 1 607 X 04-JUN-18 Name: /home/oracle/app/oracle/archive/orclwhs/archive_log/ARC0000000607_0977259429.0001_fb0ffee2.dbf 3 1 608 X 04-JUN-18 Name: /home/oracle/app/oracle/archive/orclwhs/archive_log/ARC0000000608_0977259429.0001_fb0ffee2.dbf Do you really want to delete the above objects (enter YES or NO)? yes deleted archived log archived log file name=/home/oracle/app/oracle/archive/orclwhs/archive_log/ARC0000000606_0977259429.0001_fb0ffee2.dbf RECID=1 STAMP=977949943 deleted archived log archived log file name=/home/oracle/app/oracle/archive/orclwhs/archive_log/ARC0000000607_0977259429.0001_fb0ffee2.dbf RECID=2 STAMP=977954446 deleted archived log archived log file name=/home/oracle/app/oracle/archive/orclwhs/archive_log/ARC0000000608_0977259429.0001_fb0ffee2.dbf RECID=3 STAMP=977954551 Deleted 3 EXPIRED objects
再次查詢過時歸檔:
RMAN> list expired archivelog all; specification does not match any archived log in the repository
二、RMAN歸檔日誌清理
刪除歸檔日誌正確的流程:
RMAN> crosscheck archivelog all; //驗證的DB的歸檔日誌 RMAN> delete expired archivelog all; //刪除全部歸檔日誌 RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; //保留7天的歸檔日誌
定時shell腳本
#!/bin/bash export ORACLE_BASE=/home/oracle/app/oracle export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1 export export ORACLE_SID=orclwhs ${ORACLE_HOME}/bin/rman nocatalog log=/home/oracle/bin/cleararchivelog/del_arch$(date +%Y-%m-%d).log <<EOF connect target / #crosscheck archivelog all; #delete noprompt expired archivelog all; DELETE noprompt ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-2'; exit; EOF
可參考:https://blog.csdn.net/javaee_ssh/article/details/36906413