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