天天看點

AG閱讀總結9.2——日志管理*

Oracle可以将聯機日志檔案儲存到多個不同的位置,将聯機日志轉換為歸檔日志的過程稱之為歸檔。相應的日志被稱為歸檔日志。

一、歸檔日志

    是聯機重做日志組檔案的一個副本

    包含redo記錄以及一個唯一的log sequence number

    對日志組中的一個日志檔案進行歸檔,如果該組其中一個損壞,則另一個可用的日志将會被歸檔

    對于歸檔模式的日志切換,當日志歸檔完成後,下一個日志才能被覆寫或重新使用

    自動歸檔功能如開啟,則背景程序arcn在日志切換時自動完成歸檔,否則需要手動歸檔

    歸檔日志用途

        恢複資料庫

        更新standby資料庫

        使用LogMiner 提取曆史日志的相關資訊

二、日志的兩種模式

    1.非歸檔模式

        不适用與生産資料庫

        建立資料庫時,預設的日志管理模式為非歸檔模式

        當日志切換,檢查點産生後,聯機重做日志檔案即可被重新使用

        聯機日志被覆寫後,媒體恢複僅僅支援到最近的完整備份

        不支援聯機備份表空間,一個表空間損壞将導緻整個資料庫不可用,需要删除掉損壞的表空間或從備份恢複

        對于作業系統級别的資料庫備份需要将資料庫一緻性關閉

        應當備份所有的資料檔案、控制檔案(單個)、參數檔案、密碼檔案、聯機日志檔案(可選)

    2.歸檔模式

        能夠對聯機日志檔案進行歸檔,生産資料庫強烈建議歸檔

        在日志切換時,下一個即将被寫入日志組必須歸檔完成之後,日志組才可以使用

        歸檔日志的Log sequence number資訊會記錄到控制檔案之中

        必須有足夠的磁盤空間用于存放歸檔日志

        Oracle 9i 需要設定參數log_archive_start=true 才能夠進行自動歸檔

        備份與恢複

            支援熱備份,且當某個非系統表空間損壞,資料庫仍然處于可用狀态,且支援線上恢複

            使用歸檔日志能夠實作聯機或脫機時點恢複(即可以恢複到指定的時間點、指定的歸檔日志或指定的SCN)

三、兩種模式的切換設定及手動歸檔

    1.非歸檔到歸檔模式

        a.一緻性關閉資料庫(shutdown [immediate | transactional |normal])

        b.啟動到mount階段(startup mount)

        c.切換到歸檔模式(alter database archivelog  [manual])

        d.切換到open階段(alter database open)

        e.對資料做一個完整備份(full backup)

--示範非歸檔到歸檔模式

            SQL> ARCHIVE LOG LIST    --檢視資料庫是否處于歸檔模式

            Database log mode              No Archive Mode

            Automatic archival             Disabled

            Archive destination            USE_DB_RECOVERY_FILE_DEST

            Oldest online log sequence     14

            Current log sequence           16

            SQL> SELECT log_mode FROM v$database;  --檢視資料庫是否處于歸檔模式

            LOG_MODE

            ------------

            NOARCHIVELOG       

            SQL> SHUTDOWN IMMEDIATE;     --一緻性關閉資料庫

            Database closed.

            Database dismounted.

            ORACLE instance shut down.

            SQL> STARTUP MOUNT;         --啟動到mount狀态

            ORACLE instance started.

            Total System Global Area  251658240 bytes

            Fixed Size                  1218796 bytes

            Variable Size              75499284 bytes

            Database Buffers          171966464 bytes

            Redo Buffers                2973696 bytes

            Database mounted.

            SQL> ALTER DATABASE ARCHIVELOG;         -----切換到自動歸檔模式

            Database altered.

            SQL> ALTER DATABASE OPEN;        --切換到open狀态

            SQL> ARCHIVE LOG LIST;           --檢視資料庫的歸檔狀态

            Database log mode              Archive Mode    --已置為歸檔模式

            Automatic archival             Enabled         --對日志進行自動歸檔

            Next log sequence to archive   16

   2.歸檔模式切換到非歸檔模式(步驟同非歸檔到歸檔模式僅僅是c步驟使用alter database noarchivelog,示範省略)

        c.切換到歸檔模式(alter database noarchivelog  )

 3.手動歸檔

        手動歸檔時需要将日志模式切換為alter database archivelog manual

        再使用alter system archive log current | all 實作歸檔

        注意:

            手動歸檔模式下不支援stanby資料庫

            在alter database archivelog模式下也可以實作對日志的歸檔

            SQL> ALTER DATABASE ARCHIVELOG MANUAL;     --将日志模式切換為手工歸檔模式

            SQL> ALTER DATABASE OPEN;                  --打開資料庫

            SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;     --對目前的日志進行歸檔(建議在mount階段完成)

            System altered.

            SQL> ALTER SYSTEM ARCHIVE LOG ALL;         --對所有的日志進行歸檔

            alter system archive log all

            *

            ERROR at line 1:

            ORA-00271: there are no logs that need archiving  --沒有需要歸檔的日志

 4.歸檔程序的調整

        通過設定LOG_ARCHIVE_MAX_PROCESSES 參數,可以指定資料庫規定所需初始化的程序數,預設的歸檔程序數為2

        一般情況下不需要修改該參數,Oracle會根據歸檔情況自動啟動額外的歸檔程序

        也可以動态的增加或減少歸檔程序數,比如有些業務在月底需要進行大量歸檔,平時則歸檔較少,對此可以動态修改

        修改方法

            ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;

 5.配置歸檔(兩種歸檔位置配置方法)

        a.歸檔到本機且少于等于兩個歸檔位置

            設定LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST參數

            alter system set log_archive_dest = '/u01/app/oracle/archivelog1' scope = spfile;

            alter system set log_archive_duplex_dest = '/u01/app/oracle/archivelog2' scope = spfile;

        b.歸檔到本機或遠端主機

            設定LOG_ARCHIVE_DEST_n 參數,n最大值為10

            alter system set log_archive_dest_1 = 'LOCATION=/u01/app/oracle/archivelog3';

            alter system set log_archive_dest_2 = 'SERVICE=standby1';

            對于遠端歸檔位置,SERVICE選項需要指定遠端資料庫的網絡服務名(在tnsnames.ora檔案中配置)

            LOG_ARCHIVE_DEST_n的兩個常用選項

                MANADATORY | OPTIONAL:

                    MANADATORY:表示歸檔必須成功複制到目的路徑之後,聯機重做日志才能被複用,OPTIONAL正好相反

                REOPEN:

                    指定歸檔失敗後指定間隔多少時間重試歸案,預設的為300秒

                示例:

                log_archive_dest_1 = 'LOCATION=/u01/app/oracle/archivelog3 manadatory reopen = 600'

                log_archive_dest_2 = 'SERVICE=standby1 manadatory reopen'

        c.兩種歸檔方法異同(前者log_archive_dest、log_archive_duplex_dest ,後者log_archive_dest_n)

            兩者都可以歸檔到本機,後者可以歸檔到遠端主機,前者不支援該功能

            前者最多配置兩個歸檔位置,後者可以配置10個歸檔位置

            兩者互不相容,要麼使用前者,要麼使用後者

            使用後者歸檔到本地時需要增加LOCATION選項,備份到遠端主機需要使用SERVICE選項

            但上述兩種方式未指定路徑時,歸檔日志位于db_recovery_file_dest 預設為$ORACLE_BASE/flash_recovey_area

        d.歸檔日志命名格式

            設定LOG_ARCHIVE_FORMAT參數,Unix下的預設設定為LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf

                %s: 日志序列号:

                %S: 日志序列号(帶有前導)

                %t: 重做線程編号.

                %T: 重做線程編号(帶有前導)

                %a: 活動ID号

                %d: 資料庫ID号

                %r RESETLOGS的ID值.

            alter system set log_archive_format = 'arch_%t_%s_%r.arc';

        e.歸檔位置狀态

            Valid/Invalid               --磁盤位置及服務名等是否有效

            Enabled/Disabled    --磁盤位置的可用狀态及資料庫能否使用該歸檔位置

            Active/Inactive            --通路歸檔目的地是否有異常

        f.歸檔成功的最小個數(使用參數log_archive_min_succeed_dest = n)

            alter system set log_archive_min_succeed_dest = 2;   --預設為1

            聯機重做日志組能夠被覆寫的前提

                所有強制路徑歸檔位置成功實作歸檔

                歸檔目的地的成功歸檔的個數大于或等于上述參數設定的值

                當強制個數大于該參數設定的個數,則以強制個數為準

                當強制個數小于該參數設定的個數,則可選的成功歸檔路徑加上強制的歸檔路徑個數至少等于該參數設定值

        g.控制歸檔的可用性(使用參數log_archive_dest_state_n)

            alter system set log_archive_dest_state_1 = enable | defer

            enable  -->預設狀态,可以在該歸檔位置進行歸檔

            defer   -->禁用該歸檔位置

        h.示範歸檔路徑配置及檢視歸檔程序,歸檔位置狀态

            SQL> ARCHIVE LOG LIST;         --檢視日志是否處于歸檔狀态

            Database log mode              Archive Mode

            Automatic archival             Enabled

            Oldest online log sequence     24

            Next log sequence to archive   26

            Current log sequence           26

            SQL> ho ps -ef | grep ora_arc    --檢視歸檔程序是否已啟動

            oracle    4062     1  0 11:43 ?        00:00:00 ora_arc0_orcl

            oracle    4064     1  0 11:43 ?        00:00:00 ora_arc1_orcl

            SQL> SHOW PARAMETER ARCHIVE  --檢視歸檔路徑是否已設定,為空值表示未設定

            NAME                                 TYPE        VALUE

            ------------------------------------ ----------- ------------------------------

            archive_lag_target                   integer     0

            log_archive_config                   string

            log_archive_dest                     string

            log_archive_dest_1                   string

            log_archive_dest_10                  string

            log_archive_dest_2                   string

            log_archive_dest_3                   string

            log_archive_dest_4                   string

            log_archive_dest_5                   string

            log_archive_dest_6                   string

            log_archive_dest_7                   string

            log_archive_dest_8                   string

            log_archive_dest_9                   string

            log_archive_dest_state_1             string      enable

            log_archive_dest_state_10            string      enable

            log_archive_dest_state_2             string      enable

            log_archive_dest_state_3             string      enable

            log_archive_dest_state_4             string      enable

            log_archive_dest_state_5             string      enable

            log_archive_dest_state_6             string      enable

            log_archive_dest_state_7             string      enable

            log_archive_dest_state_8             string      enable

            log_archive_dest_state_9             string      enable

            log_archive_duplex_dest              string

            log_archive_format                   string      %t_%s_%r.dbf

            log_archive_local_first              boolean     TRUE

            log_archive_max_processes            integer     2

            log_archive_min_succeed_dest         integer     1

            log_archive_start                    boolean     FALSE --該參數在9i中使用

            log_archive_trace                    integer     0

            remote_archive_enable                string      true

            standby_archive_dest                 string      ?/dbs/arch

            SQL> alter system set log_archive_dest = '/u01/app/oracle/archivelog1' scope = spfile;

            SQL> alter system set log_archive_duplex_dest= '/u01/app/oracle/archivelog2' scope=spfile;

            SQL> alter system set log_archive_format = 'arch_%t_%s_%r.arc' scope = spfile;

   --設定完畢後需要重新啟動執行個體,在此省略關閉啟動資訊

            SQL> ho ls /u01/app/oracle/archivelog1  --檢視歸檔路徑下是否存在檔案或檔案夾

            SQL> ho ls /u01/app/oracle/archivelog2  --檢視歸檔路徑下是否存在檔案或檔案夾

            SQL> alter system archive log current;  --手動進行歸檔

            SQL> ho ls -l /u01/app/oracle/archivelog1   --在指定的檔案夾archivelog1已産生歸檔日志

            total 18224

            -rw------- 1 oracle oinstall 18636800 Jul 28 20:39 arch_1_26_724852763.arc

            SQL> ho ls -l /u01/app/oracle/archivelog2   --在指定的檔案夾archivelog2已産生歸檔日志

 下面驗證兩種歸檔位置同時設定不相容的問題:

            SQL> ho mkdir /u01/app/oracle/archivelog3   --建立新的歸檔路徑

            SQL> ho mkdir /u01/app/oracle/archivelog4   --建立新的歸檔路徑

            SQL> alter system set log_archive_dest_1 = 'location=/u01/app/oracle/archivelog3'

              2 scope = spfile;

            SQL>  alter system set log_archive_dest_2 = 'location=/u01/app/oracle/archivelog4'

              2   scope = spfile;

            SQL> shutdown immediate;       --關閉執行個體

            SQL> startup                  

 --啟動執行個體後,收到錯誤提示表明兩種歸檔方式不相容

            ORA-16019: cannot use LOG_ARCHIVE_DEST_1 with LOG_ARCHIVE_DEST or LOG_ARCHIVE_DUPLEX_DEST

 --下面是正确的處理辦法,應當先将一種歸檔方式路徑置空,此處是将log_archive_dest置空

            SQL> alter system set log_archive_dest = '' scope = spfile;

            --此處是将log_archive_duplex_dest置空

            SQL> alter system set log_archive_duplex_dest = '' scope = spfile;

            --接下來再設定log_archive_dest_1,log_archive_dest_2

            SQL> alter system set log_archive_dest_2 = 'location=/u01/app/oracle/archivelog4'

              2  scope = spfile;

            --由于沒有配置standby伺服器,是以省略配置到遠端主機

   --設定完畢後需要重新啟動執行個體,此時系統能正常啟動,在此省略關閉啟動資訊

            SQL> alter system archive log current;  --進行手動歸檔

            SQL> ho ls -l /u01/app/oracle/archivelog3/   --檢視歸檔日志

            total 27752

            -rw------- 1 oracle oinstall 28382208 Aug  2 13:46 arc_1_38_724852763.arc

            SQL> ho ls -l /u01/app/oracle/archivelog4/   --檢視歸檔日志

            -rw------- 1 oracle oinstall 28382208 Aug  2 13:45 arc_1_38_724852763.arc  

--檢視歸檔目的地的相關狀态資訊:

    SQL> col dest_name format a20; 

    SQL> col destination format a30;

    SQL> select dest_name,status,archiver,destination,

      2  log_sequence,reopen_secs,transmit_mode,process

      3  from v$archive_dest;    

    DEST_NAME            STATUS    ARCHIVER   DESTINATION                    LOG_SEQUENCE REOPEN_SECS TRANSMIT_MOD PROCESS

    -------------------- --------- ---------- ------------------------------ ------------ ----------- ------------ -------

    LOG_ARCHIVE_DEST_1   VALID     ARCH       /u01/app/oracle/archivelog3/             38         300

SYNCHRONOUS  ARCH

    LOG_ARCHIVE_DEST_2   VALID     ARCH       /u01/app/oracle/archivelog4/             38         300

    LOG_ARCHIVE_DEST_3   INACTIVE  ARCH                                                 0           0 SYNCHRONOUS  ARCH

    -----------------------------------------------------------------------------------------------------------------------

        SQL> alter system set log_archive_dest_state_2 = defer;   --停用log_archive_dest_state_2

        System altered.

        SQL> show parameter log_archive_dest_state

        NAME                                 TYPE        VALUE

        ------------------------------------ ----------- ---------------

        log_archive_dest_state_1             string      enable

        log_archive_dest_state_10            string      enable

        log_archive_dest_state_2             string      DEFER     --該路徑顯示為defer

        log_archive_dest_state_3             string      enable

        log_archive_dest_state_4             string      enable

        log_archive_dest_state_5             string      enable

        log_archive_dest_state_6             string      enable

        log_archive_dest_state_7             string      enable

        log_archive_dest_state_8             string      enable

        log_archive_dest_state_9             string      enable        

        SQL> alter system archive log current;   --手動歸檔

        SQL> ho ls -l /u01/app/oracle/archivelog3; --可以看出archivelog3比archivelog4多出幾個歸檔檔案

        total 124772                               --建議将多出檔案件的使用系統指令複制到archivelog4

        -rw------- 1 oracle oinstall 28382208 Aug  2 13:46 arc_1_38_724852763.arc

        -rw------- 1 oracle oinstall  1788416 Aug  2 20:41 arc_1_39_724852763.arc

        -rw------- 1 oracle oinstall 30257664 Aug  2 22:21 arc_1_40_724852763.arc

        -rw------- 1 oracle oinstall 30257664 Aug  2 22:22 arc_1_41_724852763.arc

        -rw------- 1 oracle oinstall 30257664 Aug  2 22:22 arc_1_42_724852763.arc

        -rw------- 1 oracle oinstall  6647296 Aug  2 22:23 arc_1_43_724852763.arc

        SQL> ho ls -l /u01/app/oracle/archivelog4;

        total 29504

        -rw------- 1 oracle oinstall 28382208 Aug  2 13:45 arc_1_38_724852763.arc

        SQL> alter system set log_archive_dest_state_2 = enable; --啟用log_archive_dest_state_2

        SQL> ho ls -l /u01/app/oracle/archivelog3; --啟用後出現了相同的arc_1_44_724852763.arc檔案

        total 124856

        -rw------- 1 oracle oinstall    81408 Aug  2 22:25 arc_1_44_724852763.arc

        total 29588

四、歸檔日志相關視圖

    v$archived_log         -->從控制檔案中獲得歸檔的相關資訊

    v$archive_dest           -->歸檔路徑及狀态

    v$log_history                 -->控制檔案中日志的曆史資訊

    v$database                       -->檢視資料庫是否處于歸檔狀态

    v$archive_processes         -->歸檔相關的背景程序資訊

    指令:archive log list

        SQL> select  name,sequence#,registrar,standby_dest,archived,status

          2  from v$archived_log;  

          NAME                                                                                             SEQUENCE#      REGISTR    STA      ARC      S

        -------------------------------------------------------                                    ----------                   -------        ---          ----        ---

        /u01/app/oracle/archivelog4/arc_1_38_724852763.arc              38

                    FGRD          NO       YES       A

        /u01/app/oracle/archivelog3/arc_1_39_724852763.arc              39

                    ARCH          NO       YES       A

        /u01/app/oracle/archivelog4/arc_1_39_724852763.arc              39

        /u01/app/oracle/archivelog3/arc_1_40_724852763.arc              40

                    ARCH          NO       YES       A

        /u01/app/oracle/archivelog3/arc_1_41_724852763.arc              41

        /u01/app/oracle/archivelog3/arc_1_42_724852763.arc              42

        /u01/app/oracle/archivelog3/arc_1_43_724852763.arc              43

        /u01/app/oracle/archivelog3/arc_1_44_724852763.arc              44

        /u01/app/oracle/archivelog4/arc_1_44_724852763.arc              44

                     FGRD         NO       YES       A

五、确定redo大小

Oracle10g預設的redo log file大小為50m,在使用中經常會發現alter log裡存在大量Checkpoint not complete的問題。

這個問題大家應該都清楚是什麼,要解決無非就要增加redo log file的大小,但是增加到多少比較合适呢? 其實估測的方法很簡單,10g可以使用awr(9i使用statspack)對一個穩定運作周期生成報表,具體周期要看db的使用情況。

Load Profile           Per Second            Per Transaction

  Redo size:              173,302.31             470,896.98

根據報表給出的資料,redo size 每秒是173k,而對redo log的建議一般是每小時切換2-3次,就以20分鐘切換一次為例,redo log file的大小就應該設定為 redo size x 60 x 20 即 173k x 60 x 20,是以redo log file的大小應設定為208m,空間比較充足的可以設定富裕一些。 當然,10g可以使用ADDM來自動完成以上的診斷步驟,不過ADDM并不是每次都能診斷出所有的問題(也許是我用的不得當),感覺還是看awr報表比較容易發現問題.

另一處理方法:   

設定redolog檔案的原則就是要保證30分鐘之内進行logswitch. ogswitch的資訊被記錄在alertSID.log中。 

 如果兩次switch的時間是10分鐘,你需要增加redolog檔案到三倍的尺寸。   

如果兩次switch的時間是15分鐘,你需要增加redolog檔案到兩倍的尺寸。   

如果兩次switch的時間超過30分鐘,你不需要需要增加redo log檔案的尺寸。