oracle啟用歸檔日志


一、開啟歸檔

1、查看歸檔信息

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

當前數據庫未開啟歸檔

2、設置歸檔目錄

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住,解決辦法可以增加閃回區大小或者修改歸檔路徑

3、修改歸檔路徑

修改log_archive_dest_1參數可修改歸檔日志路徑(pfile/spfile中參數db_recovery_file_dest指定的目錄將無效)

實際上從Oracle 10g開始,可以生成多份一樣的日志,保存多個位置,以防不測。多個位置通過設置不同的log_archive_dest_n 參數實現,archive log list輸出中的Archive destination路徑只顯示最新修改的路徑。

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_log

SQL> alter system set log_archive_dest_1='location=/u01/app/oracle/archive_log' scope=spfile;

System altered.

重啟生效

4、修改歸檔日志格式

SQL> alter system set log_archive_format='ARC%S_%R.%T_%D.dbf' scope=spfile;

System altered.

重啟生效

5、開啟歸檔

需要在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.

6、確認數據庫為歸檔模式

SQL> select log_mode from v$database;

LOG_MODE
------------
ARCHIVELOG

SQL> select archiver from v$instance;

ARCHIVE
-------
STARTED

7、強制日志切換

先查看當前歸檔日志視圖和歸檔日志路徑:

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

有歸檔日志產生,驗證成功

 

關閉數據庫歸檔

在mount狀態下關閉:

alter database noarchivelog

 

 

 

二、歸檔日志清理

1、手動物理刪除歸檔日志

該方式利用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

 

 

2、RMAN歸檔日志清理

刪除歸檔日志正確的流程:

RMAN> crosscheck archivelog all; //驗證的DB的歸檔日志
RMAN> delete expired archivelog all; //刪除所有過期歸檔日志
RMAN>DELETE 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

 


免責聲明!

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



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