如何打開歸檔
Oracle 數(shù)據(jù)庫可運(yùn)行在兩種模式下: ARCHIVELOG 模式和NOARCHIVELOG 模式讳侨。
NOARCHIVELOG 模式只能用于保護(hù)實(shí)例失敗跨跨,而不能用于保護(hù)介質(zhì)失敗囱皿。為了避免數(shù)據(jù)庫物理文件損壞所引起的數(shù)據(jù)丟失,數(shù)據(jù)庫可運(yùn)行在ARCHIVELOG 模式耕渴。后者就是所謂的歸檔模式橱脸。
Oracle 能夠?qū)⒁呀?jīng)寫滿的重做日志文件在被覆蓋之前保存到指定位置上愧驱,被保存的重做日志文件的集合稱為“歸檔重做日志”,這個操作過程稱為“歸檔”,根據(jù)是否進(jìn)行歸檔糟红,數(shù)據(jù)庫可以運(yùn)行在歸檔模式(ARCHIVELOG)和非歸檔模式(NOARCHIVELOG)下盆偿,歸檔操作可
由ARCH 后臺進(jìn)程自動完成准浴,也可由DBA 手工完成。
在NOARCHIVELOG 模式下求橄,每次聯(lián)機(jī)重做日志文件已滿并發(fā)生日志切換時罐农,都要覆蓋原來聯(lián)機(jī)重做日志文件涵亏。直到對重做日志文件組的檢查點(diǎn)操作完成后,LGWR 才覆蓋該重做日志文件組拆内。
如果數(shù)據(jù)庫配置為在ARCHIVELOG 模式運(yùn)行下麸恍,那么必須將已滿的聯(lián)機(jī)重做日志文件的不活動(INACTIVE)組歸檔光稼。因?yàn)閷?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,確實(shí)發(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ú)w檔重做日志轧粟。因?yàn)槿罩窘M只有在歸檔后才能被覆蓋兰吟,所以如果不歸檔該日志組,那么當(dāng)下次切換到該日志組時將會導(dǎo)致LGWR 處于等待狀態(tài)履腋。為了避免出現(xiàn)這種情況府树,必須要及時歸檔重做日志料按,歸檔重做日志有手工歸檔和自動歸檔兩種方法载矿。
1.自動歸檔
DBA 可以選擇在實(shí)例啟動前或?qū)嵗龁雍髥⒂米詣託w檔功能闷盔。
如果要在實(shí)例啟動前啟用自動歸檔功能逢勾, 需要將初始化參數(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;
如果實(shí)例啟動時沒啟用自動歸檔沐扳,不必關(guān)閉實(shí)例再對初始化參數(shù)行修改句占,可以直接使用
如下語句啟用自動歸檔功能:
ALTER SYSTEM ARCHIVE LOG START;
執(zhí)行上述語句后纱烘,無須重新啟動實(shí)例,即可立即啟用自動歸檔功能哄陶,但是實(shí)例在下一次啟動時啤它,自動歸檔功能仍然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;