存檔日志的管理(一)
?
??? 相較redo log來說,archivelog對于系統(tǒng)的功用可能會更多一些。很多Oracle的特性都需要archivelog的支持才能得到應(yīng)用。當(dāng)然redolog絕對要比archivelog要重要的多,可以沒有archivelog的DB,但不可能沒有redolog。OK,看一下archivelog的性質(zhì):
?
?
一、存檔日志概念
?
??? 已填滿的聯(lián)機(jī)重做日志文件組可以保存到一個或多個脫機(jī)目的地,這些日志就是存檔日志。必須要將DATABASE設(shè)定ARCHIVELOG模式才可以使用存檔,可以選擇自動存檔和手動存檔兩種方式。
?
??? 存檔日志與被復(fù)制的聯(lián)機(jī)重做日志是完全相同的,并且可以保留組的唯一日志序號。當(dāng)ARCn進(jìn)程進(jìn)行存檔時,不允許日志寫入進(jìn)程LGWR的使用,也不能重寫聯(lián)機(jī)重做日志組,直到存檔完成為止。
?
?
二、ARCHIVELOG模式
?
??? 1、NOARCHIVELOG模式
?
??? ① 當(dāng)運(yùn)行在NOARCHIVELOG模式時,已填滿的組不需要存檔,因此在日志切換后,已填充的組可以用于LGWR的重用。
??? ② 要存檔NOARCHIVELOG模式下的已填充組,需要進(jìn)行額外的管理操作,如果不能接收任何數(shù)據(jù)丟失,那必須采用ARCHIVELOG模式。
??? ③ NOARCHIVELOG模式只能保護(hù)數(shù)據(jù)庫免于實例的失敗,但不能避免介質(zhì)失敗。也就是說,只能將數(shù)據(jù)庫恢復(fù)到最近的完整備份,而不能恢復(fù)后來的事務(wù)。
??? ④ NOARCHIVELOG模式下,不能進(jìn)行聯(lián)機(jī)表空間備份。所以在這種模式下,需要定時進(jìn)行數(shù)據(jù)庫的備份。
?
??? 2、ARCHIVELOG模式
?
??? 使用ARCHIVELOG模式有以下好處:
??? ① 數(shù)據(jù)庫備份時聯(lián)機(jī)重做日志文件也一起備份,可以保證在操作系統(tǒng)或磁盤失敗時間后,恢復(fù)所有已提交的事務(wù)。
??? ② 可以使用 打開數(shù)據(jù)庫時以及正常系統(tǒng)使用中所獲得的備份。
??? ③ 將已存檔日志用于備份數(shù)據(jù)庫,可以將當(dāng)前的備用數(shù)據(jù)庫與原來的數(shù)據(jù)庫一起保留
?
??? 下圖說明了歸檔的邏輯結(jié)構(gòu):
?
???
?
?
三、控制存檔模式
?
??? 1、設(shè)置初始存檔模式
?
??? 可以在CREATE DATABASE 語句中設(shè)置數(shù)據(jù)庫的初始?xì)w檔模式。
??? 一般若沒有指定,都是NOARCHIVELOG模式,一開始沒有什么必要指定,可以在創(chuàng)建后數(shù)據(jù)庫之后進(jìn)行修改。
?
??? 2、改變歸檔模式
?
??? 將NOARCHIVELOG轉(zhuǎn)換到ARCHIVELOG:
??? ① SHUTDOWN
??? ② 備份數(shù)據(jù)庫
??? ③ 修改初始化參數(shù)(是否允許自動存檔以及存檔日志位置)
??? ④ STARTUP MOUNT
??? ⑤ ALTER DATABASE ARCHIVELOG;
??? ⑥ ALTER DATABASE OPEN;
?
??? 3、允許自動存檔方式
?
??? ① 實例啟動時
??????? 修改初始化參數(shù)LOG_ARCHIVE_START = TRUE (下次啟動時生效)
?
??? ② 實例啟動后
??????? ALTER SYSTEM ARCHIVE LOG START;
?
??? ③ 存檔進(jìn)程的數(shù)目
??????? 設(shè)置LOG_ARCHIVE_MAX_PROCESSES參數(shù),最多可設(shè)置10個ARCn進(jìn)程
??????? 也可以動態(tài)修改 ALTER SYSTEM LOG_ARCHIVE_MAX_PROCESSES=3;
?
??????? 注:一般沒有必要修改LOG_ARCHIVE_MAX_PROCESSES參數(shù)的默認(rèn)值1,因為Oracle會根據(jù)系統(tǒng)工作量適當(dāng)調(diào)配ARCn進(jìn)程
?
??? 4、禁止自動存檔
?
??? 一旦禁止自動存檔,則必須及時手動存檔,否則聯(lián)機(jī)重做日志文件組全部寫滿時,數(shù)據(jù)庫會暫時中斷,直到存檔位置。
?
??? ① 實例啟動時
??????? LOG_ARCHIVE_START = FALSE
?
??? ② 實例啟動后
??????? ALTER SYSTEM ARCHIVE LOG STOP;
?
??????? 注:當(dāng)正在存檔時禁止,則ARCn會完成當(dāng)前組的存檔操作,但不進(jìn)行下一個日志組的存檔。
?
??? 5、執(zhí)行手動存檔
?
??? 不管是否允許自動存檔,都可以進(jìn)行手動存檔。
?
??? ALTER SYSTEM ARCHIVE ALL;
?
??? 該會存檔所有未存檔的日志文件。
?
?
四、指定存檔目標(biāo)位置
?
??? 1、使用LOG_ARCHIVE_DEST_n定義
?
??? ① 本地路徑指定
??? LOG_ARCHIVE_DEST_1 = 'LOCATION = /disk1/archive'
??? LOG_ARCHIVE_DEST_2 = 'LOCATION = /disk2/archive'
??? LOG_ARCHIVE_DEST_3 = 'LOCATION = /disk3/archive'
?
??? ② 遠(yuǎn)程存檔
??? LOG_ARCHIVE_DEST_1 = 'SERVICE = standby1'
??? 注:standby1是在tnsname.ora文件中定義的網(wǎng)絡(luò)服務(wù)名
?
??? ③ 定義文件名
??? LOG_ARCHIVE_FORMAT = arch%s.arc
??? 注:%s作為序號,%t包含線程號,%S和%T以0補(bǔ)充文件名左邊的空白
?
??? 2、使用LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST
?
??? 這個指定方法最多指定兩個位置,分別是由LOG_ARCHIVE_DEST指定的主存檔位置,以及LOG_ARCHIVE_DUPLEX_DEST指定的輔助存檔位置
?
??? 舉例:
??? LOG_ARCHIVE_DEST = '/disk1/archive'
??? LOG_ARCHIVE_DUPLEX_DEST = '/disk2/archive'
??? LOG_ARCHIVE_FORMAT = arch_t%_%s.arc
?
??? 3、存檔位置的狀態(tài)
?
??? 通過查詢v$archive_dest視圖來查看狀態(tài)
?
?
?