oracle啓用歸檔日誌

1、開啓歸檔

一、查看歸檔信息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

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

 

2、歸檔日誌清理

一、手動物理刪除歸檔日誌

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

相關文章
相關標籤/搜索