4_1_Oracle邏輯結(jié)構(gòu)篇之重做日志和歸檔日志管理-如何打開歸檔

如何打開歸檔

Oracle 數(shù)據(jù)庫可運行在兩種模式下: ARCHIVELOG 模式和NOARCHIVELOG 模式。
NOARCHIVELOG 模式只能用于保護(hù)實例失敗,而不能用于保護(hù)介質(zhì)失敗。為了避免數(shù)據(jù)庫物理文件損壞所引起的數(shù)據(jù)丟失,數(shù)據(jù)庫可運行在ARCHIVELOG 模式。后者就是所謂的歸檔模式。
Oracle 能夠?qū)⒁呀?jīng)寫滿的重做日志文件在被覆蓋之前保存到指定位置上,被保存的重做日志文件的集合稱為“歸檔重做日志”,這個操作過程稱為“歸檔”,根據(jù)是否進(jìn)行歸檔,數(shù)據(jù)庫可以運行在歸檔模式(ARCHIVELOG)和非歸檔模式(NOARCHIVELOG)下,歸檔操作可
由ARCH 后臺進(jìn)程自動完成,也可由DBA 手工完成。

在NOARCHIVELOG 模式下,每次聯(lián)機(jī)重做日志文件已滿并發(fā)生日志切換時,都要覆蓋原來聯(lián)機(jī)重做日志文件。直到對重做日志文件組的檢查點操作完成后,LGWR 才覆蓋該重做日志文件組。
如果數(shù)據(jù)庫配置為在ARCHIVELOG 模式運行下,那么必須將已滿的聯(lián)機(jī)重做日志文件的不活動(INACTIVE)組歸檔。因為對數(shù)據(jù)庫所做的所有更改都記錄在聯(lián)機(jī)重做日志文件內(nèi),數(shù)據(jù)庫管理員可以使用數(shù)據(jù)庫物理備份和歸檔的聯(lián)機(jī)重做日志文件恢復(fù)數(shù)據(jù)庫,而不
會丟失任何已提交數(shù)據(jù)。
數(shù)據(jù)庫創(chuàng)建時,缺省為NOARCHIVELOG 模式。
使用歸檔日志有兩個好處:
? 恢復(fù):數(shù)據(jù)庫物理備份連同聯(lián)機(jī)重做日志文件和歸檔重做日志文件可共同確?;謴?fù)所有已提交的事務(wù)處理。
? 備份:可在數(shù)據(jù)庫打開時執(zhí)行備份。

1.查詢當(dāng)前數(shù)據(jù)的日志模式

SQL> select log_mode from v$database;

LOG_MODE
------------
NOARCHIVELOG

2.設(shè)置歸檔路徑

SQL> show parameter archi

SQL> alter system set log_archive_dest_1='location=/u01/app/oracle/arch/orcl';    

System altered.

另啟一個會話設(shè)置保存路徑

[oracle@ocm oracle]$ mkdir -p arch/orcl
[oracle@ocm oracle]$ cd arch/orcl/
[oracle@ocm orcl]$ pwd
/u01/app/oracle/arch/orcl

3.關(guān)閉數(shù)據(jù)庫并打開到mount狀態(tài)

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area  368263168 bytes
Fixed Size                  1345016 bytes
Variable Size             247466504 bytes
Database Buffers          113246208 bytes
Redo Buffers                6205440 bytes
Database mounted.

4.配置數(shù)據(jù)庫為歸檔

SQL> alter database archivelog;

Database altered.

SQL> select log_mode from v$database;

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

SQL> alter database open;

Database altered.

注意:修改了日志操作模式之后,必須重新備份數(shù)據(jù)庫。
如果關(guān)閉歸檔模式,命令為:
ALTER DATABASE NOARCHIVELOG;

此時在歸檔日志目錄,可以看到當(dāng)前還沒有歸檔日志

[oracle@ocm orcl]$ pwd
/u01/app/oracle/arch/orcl
[oracle@ocm orcl]$ ll
total 0

我們進(jìn)行日志切換,就會有歸檔日志產(chǎn)生

SQL> set linesize 500
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
         1          1         19   20971520        512          1 YES INACTIVE                883967 24-JUL-17       894057 24-JUL-17
         2          1         21   20971520        512          1 NO  CURRENT                 896741 24-JUL-17   2.8147E+14
         3          1         18   20971520        512          1 YES INACTIVE                883961 24-JUL-17       883967 24-JUL-17
         4          1         20    8388608        512          1 YES INACTIVE                894057 24-JUL-17       896741 24-JUL-17

SQL> alter system switch logfile;

System altered.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
         1          1         19   20971520        512          1 YES INACTIVE                883967 24-JUL-17       894057 24-JUL-17
         2          1         21   20971520        512          1 YES ACTIVE                  896741 24-JUL-17       901128 24-JUL-17
         3          1         22   20971520        512          1 NO  CURRENT                 901128 24-JUL-17   2.8147E+14
         4          1         20    8388608        512          1 YES INACTIVE                894057 24-JUL-17       896741 24-JUL-17

SQL> 

上面可以看到日志CURRENT由21變成了22,確實發(fā)生了日志切換。
此時在歸檔日志目錄,可以看到當(dāng)前備份的歸檔日志

[oracle@ocm orcl]$ ll
total 3328
-rw-r----- 1 oracle oinstall 3400704 Jul 24 14:04 1_21_950125053.dbf
SQL> set linesize 500
SQL> col member for a50
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                             IS_
---------- ------- ------- -------------------------------------------------- ---
         3         ONLINE  /u01/app/oracle/oradata/orcl/redo03.log            NO
         2         ONLINE  /u01/app/oracle/oradata/orcl/redo02.log            NO
         1         ONLINE  /u01/app/oracle/oradata/orcl/redo01.log            NO
         4         ONLINE  /u01/app/oracle/oradata/orcl/redo04.log            NO
SQL> alter database orcl add logfile (  '/u01/app/oracle/oradata/orcl/redo05a.log','/u01/app/oracle/oradata/orcl/redo05b.log') size 8M;                        

Database altered.
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                             IS_
---------- ------- ------- -------------------------------------------------- ---
         3         ONLINE  /u01/app/oracle/oradata/orcl/redo03.log            NO
         2         ONLINE  /u01/app/oracle/oradata/orcl/redo02.log            NO
         1         ONLINE  /u01/app/oracle/oradata/orcl/redo01.log            NO
         4         ONLINE  /u01/app/oracle/oradata/orcl/redo04.log            NO
         5         ONLINE  /u01/app/oracle/oradata/orcl/redo05a.log           NO
         5         ONLINE  /u01/app/oracle/oradata/orcl/redo05b.log           NO

6 rows selected.

SQL> alter database orcl add logfile group 6 (  '/u01/app/oracle/oradata/orcl/redo06a.log','/u01/app/oracle/oradata/orcl/redo06b.log') size 8M;                        

Database altered.

SQL> select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                             IS_
---------- ------- ------- -------------------------------------------------- ---
         3         ONLINE  /u01/app/oracle/oradata/orcl/redo03.log            NO
         2         ONLINE  /u01/app/oracle/oradata/orcl/redo02.log            NO
         1         ONLINE  /u01/app/oracle/oradata/orcl/redo01.log            NO
         4         ONLINE  /u01/app/oracle/oradata/orcl/redo04.log            NO
         5         ONLINE  /u01/app/oracle/oradata/orcl/redo05a.log           NO
         5         ONLINE  /u01/app/oracle/oradata/orcl/redo05b.log           NO
         6         ONLINE  /u01/app/oracle/oradata/orcl/redo06a.log           NO
         6         ONLINE  /u01/app/oracle/oradata/orcl/redo06b.log           NO

8 rows selected.

設(shè)置日志歸檔

當(dāng)數(shù)據(jù)庫處于ARCHIVELOG 模式時,在進(jìn)行了日志切換后必須要歸檔重做日志。因為日志組只有在歸檔后才能被覆蓋,所以如果不歸檔該日志組,那么當(dāng)下次切換到該日志組時將會導(dǎo)致LGWR 處于等待狀態(tài)。為了避免出現(xiàn)這種情況,必須要及時歸檔重做日志,歸檔重做日志有手工歸檔和自動歸檔兩種方法。

1.自動歸檔

DBA 可以選擇在實例啟動前或?qū)嵗龁雍髥⒂米詣託w檔功能。
如果要在實例啟動前啟用自動歸檔功能, 需要將初始化參數(shù)文件中參數(shù)LOG_ARCHIVE_START 的值改為TRUE。步驟如下:
1)以管理員身份登錄數(shù)據(jù)庫
CONN / AS SYSDBA
2)修改服務(wù)器端初始化參數(shù)
ALTER SYSTEM SET LOG_ARCHIVE_START=TRUE SCOPE=SPFILE;
3)重新啟動數(shù)據(jù)庫,使參數(shù)生效
SHUTDOWN;
STARTUP;
如果實例啟動時沒啟用自動歸檔,不必關(guān)閉實例再對初始化參數(shù)行修改,可以直接使用
如下語句啟用自動歸檔功能:
ALTER SYSTEM ARCHIVE LOG START;
執(zhí)行上述語句后,無須重新啟動實例,即可立即啟用自動歸檔功能,但是實例在下一次啟動時,自動歸檔功能仍然FALSE。

2.手工歸檔

一旦禁用自動歸檔功能,DBA 必須手動執(zhí)行一條命令,對所有或特定的聯(lián)機(jī)重做日志文件進(jìn)行手動歸檔。在歸檔模式下,如果禁用自動歸檔模式,但是又沒有及時進(jìn)行手工歸檔,
LGWR 進(jìn)程無法寫入下一個已經(jīng)寫滿的可用重做日志組,這時數(shù)據(jù)庫將被掛起,直到完成對重做日志組的歸檔為止。
可以使用下面語句對日志文件進(jìn)行歸檔:
ALTER SYSTEM ARCHIVE LOG ALL;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容