1. 程式人生 > >數據庫歸檔模式的管理

數據庫歸檔模式的管理

指定 默認 11.2 用戶 rdbms 進入 dmi run 開啟歸檔

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
    
    export ORACLE_BASE=/home/oracle/u01/app/oracle
    export ORACLE_HOME=${ORACLE_BASE}/product/11.2.0/dbhome_1
    export ORACLE_PATH=${ORACLE_HOME}/rdbms/admin
    export ORACLE_SID=orcl
    export PATH=${PATH}:${ORACLE_HOME}/bin::~/local/bin
    ORACLE_USER=oracle
    $ORACLE_HOME/bin/rman target / log $RMAN_LOG_FILE append<< all; archivelog crosscheck ?sysdate-7?; time until noprompt delete { run>


2、可以手工來處理,步驟如下
(1) 將/oracle下的相關ARCHIVELOG日誌文件移到別的文件系統下(保留一段時間的ARCHIVELOG日誌即可,其他的可移走,用系統命令mv移走)。然後打包、壓縮,備份到介質上,此時可將這些移出的文件刪除。註意:別在原來的/oracle打包了,否則空間占滿了就有些麻煩了。
(2) 以oracle用戶登錄,執行rman target /。如有多個實例此時執行rman target [email protected],進入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/ora8i/log1a.log‘),‘/home2/oracle/oradata/ora8i/log1b.log‘) size 100M;

alter database drop logfile group 1;

10.增加與刪除日誌成員

alter database add logfile member ‘/home1/oracle/oradata/ora8i/log1a.log‘ to group 1,‘/home1/oracle/oradata/ora8i/log2a.log‘ to group 2;

alter database drop logfile member ‘/home1/oracle/oradata/ora8i/log1a.log‘ ;

11.日誌文件移動

alter database rename file ‘/home1/oracle/oradata/ora8i/log1a.log‘ to ‘/home2/oracle/oradata/ora8i/log1a.log‘;

執行該命令之前必須保證該日誌文件物理上已經移動到新目錄
12.清除日誌文件

alter database clear logfile ‘/home1/oracle/oradata/ora8i/log1a.log‘;

該命令不能用刪除組及組成員命令刪除日誌時使用

數據庫歸檔模式的管理