Oracle在開啟了歸檔模式后,會在指定的archive目錄下產生很多的archivelog文件,
而且默認是不會定期清除的,時間長久了,該文件夾會占用很大的空間。
數據庫開啟歸檔模式之后,雖然可以保障數據的完整性,然而一定程度上會消耗系統性能,
另一個比較關鍵的地方就是,增加了維護的成本,因此需要做好管理工作,實際生產環境中有很多由於開啟了日志歸檔,沒有做好管理工作導致出現各種故障。
很多人直接在archive目錄下刪除文件,這樣其實不能達到在Oracle CLF文件中刪除文件記錄的效果。
常用的管理方法,有兩種:
1、配置RMAN自動管理ARCHIVELOG。也可在RMAN中將數據備份到備份服務器或者磁帶上,然后將過期的ARCHIVELOG刪除;
刪除歸檔腳本:/home/oracle/backup/rman_backup/rman_script/deletearch.sh
RMAN_LOG_FILE=/home/oracle/backup/rman_backup/rman_script/deletearch.out if [ -f "$RMAN_LOG_FILE" ] then rm -f "$RMAN_LOG_FILE" fi echo >> $RMAN_LOG_FILE chmod 666 $RMAN_LOG_FILE echo Script $0 >> $RMAN_LOG_FILE echo ==== started on `date` ==== >> $RMAN_LOG_FILE echo >> $RMAN_LOG_FILE ORACLE_USER=oracle export ORACLE_SID=ENMOEDU export ORACLE_HOME=/u01/oracle/product/11.2.0/db_1 $ORACLE_HOME/bin/rman target / msglog $RMAN_LOG_FILE append<<EOF run { delete noprompt archivelog until time 'sysdate-7'; crosscheck archivelog all; }
2、可以手工來處理,步驟如下
(1) 將/oracle下的相關ARCHIVELOG日志文件移到別的文件系統下(保留一段時間的ARCHIVELOG日志即可,其他的可移走,用系統命令mv移走)。然后打包、壓縮,備份到介質上,此時可將這些移出的文件刪除。注意:別在原來的/oracle打包了,否則空間占滿了就有些麻煩了。
(2) 以oracle用戶登錄,執行rman target /。如有多個實例此時執行rman target 用戶名/密碼@實例名,進入rman
(3) 在rman中執行
RMAN>list archivelog all; /*列出所有的歸檔日志文件 RMAN>crosscheck archivelog all; /*與物理歸檔日志文件保持同步,之前移走了一部分文件,因此執行此命令后會在/oracle目錄下找不到的歸檔日志標記為expired RMAN>list expired archivelog all; /*列出所有expired(過期)的歸檔日志文件,此時你就可看到移走的歸檔日志文件均被標記為expired RMAN>delete expired archivelog all; /*在oracle中刪除所有過期的expired文件 RMAN>list archivelog all; /*再列出所有的歸檔日志文件,就可發現移走的日志文件被刪掉了 RMAN>exit /*退出
###################
有用的查詢腳本:
1.查詢每日歸檔備份大小情況:
SELECT TRUNC(FIRST_TIME) "日期", TRUNC(SUM(BLOCKS*BLOCK_SIZE)/1024/1024/1024,2) "大小(GB/DAY)" FROM V$ARCHIVED_LOG GROUP BY TRUNC(FIRST_TIME) ORDER BY 1 DESC;
2.查看歸檔空間占用情況:
SQL> col name for a60 SQL> select NAME,SPACE_LIMIT/1024/1024/1024,SPACE_USED/1024/1024/1024,NUMBER_OF_FILES from V$RECOVERY_FILE_DEST; NAME SPACE_LIMIT/1024/1024/1024 SPACE_USED/1024/1024/1024 NUMBER_OF_FILES ------------------------------------------------------------ -------------------------- ------------------------- --------------- /home/oracle/u01/app/oracle/account_flashback_area 5 .09765625 2
3.查詢系統使用的是哪一組日志文件:
SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# NEXT_TIME ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------------- ------------ ------------------- 1 1 7 52428800 512 1 YES INACTIVE 979398 2017-06-30 14:20:02 980053 2017-06-30 14:29:07 2 1 8 52428800 512 1 YES INACTIVE 980053 2017-06-30 14:29:07 990274 2017-06-30 17:38:43 3 1 9 52428800 512 1 NO CURRENT 990274 2017-06-30 17:38:43 2.8147E+14
4.查詢正在使用的組所對應的日志文件:
SQL> col MEMBER for a60 SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER IS_ ---------- ------- ------- ------------------------------------------------------------ --- 3 ONLINE /home/oracle/u01/app/oracle/oradata/orcl/redo03.log NO 2 ONLINE /home/oracle/u01/app/oracle/oradata/orcl/redo02.log NO 1 ONLINE /home/oracle/u01/app/oracle/oradata/orcl/redo01.log NO
5.強制日志切換:
alter system switch logfile;
6.查詢歷史日志:
SQL> select * from v$log_history; RECID STAMP THREAD# SEQUENCE# FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# RESETLOGS_CHANGE# RESETLOGS_TIME ---------- ---------- ---------- ---------- ------------- ------------------- ------------ ----------------- ------------------- 1 947091134 1 1 925702 2017-06-19 16:50:54 925918 925702 2017-06-19 16:50:54 2 947091237 1 2 925918 2017-06-19 16:52:14 930555 925702 2017-06-19 16:50:54 3 947091304 1 3 930555 2017-06-19 16:53:56 949834 925702 2017-06-19 16:50:54 4 947091545 1 4 949834 2017-06-19 16:55:03 962092 925702 2017-06-19 16:50:54 5 947092728 1 5 962092 2017-06-19 16:59:05 972833 925702 2017-06-19 16:50:54 6 948032402 1 6 972833 2017-06-19 17:18:47 979398 925702 2017-06-19 16:50:54 7 948032947 1 7 979398 2017-06-30 14:20:02 980053 925702 2017-06-19 16:50:54 8 948044323 1 8 980053 2017-06-30 14:29:07 990274 925702 2017-06-19 16:50:54 8 rows selected.
7.查詢日志的歸檔模式:
SQL> select dbid,name,created,log_mode from v$database; DBID NAME CREATED LOG_MODE ---------- ------------------------------------------------------------ ------------------- ------------ 1474871786 ORCL 2017-06-19 16:50:50 ARCHIVELOG
8.查詢歸檔日志的信息:
SQL> col name for a100 SQL> select recid,stamp,thread#,sequence#,name from v$archived_log; RECID STAMP THREAD# SEQUENCE# NAME ---------- ---------- ---------- ---------- ---------------------------------------------------------------------------------------------------- 1 948032402 1 6 /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_6_947091054.dbf 2 948032947 1 7 /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/archarchive_1_7_947091054.log 3 948044324 1 8 /home/oracle/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch_1_8_947091054.log
9.增加與刪除日志文件組
alter database add logfile group 1 ('/home1/oracle/oradata/ora/log1a.log'),'/home2/oracle/oradata/ora/log1b.log') size 100M; alter database drop logfile group 1;
10.增加與刪除日志成員
alter database add logfile member '/home1/oracle/oradata/ora/log1a.log' to group 1,'/home1/oracle/oradata/ora/log2a.log' to group 2; alter database drop logfile member '/home1/oracle/oradata/ora8i/log1a.log' ;
11.日志文件移動
alter database rename file '/home1/oracle/oradata/ora/log1a.log' to '/home2/oracle/oradata/ora/log1a.log';
執行該命令之前必須保證該日志文件物理上已經移動到新目錄
12.清除日志文件
alter database clear logfile '/home1/oracle/oradata/ora/log1a.log';
該命令不能用刪除組及組成員命令刪除日志時使用。