存檔日志的管理(二)
?
??? 接著學習archivelog的性質和管理方法。今天介紹一些比較不常用的操作。
?
?
一、指定日志傳送模式
?
??? 1、正常模式
?
??? 一般正常模式是將存檔文件傳送到數據庫服務器的另一個磁盤。
??? 可以通過設置LOG_ARCHIVE_DEST_n或LOG_ARCHIVE_DEST參數來指定目標位置。
?
??? 理想情況下,應該將已存檔的重做日志文件以及相應數據庫備份從本地磁盤中永久地轉移到并不昂貴的脫機存儲介質中,例如磁帶。
?
??? 2、備用傳送模式
?
??? <建議在遠程站點維護備用數據庫,以盡量避免出現災難性錯誤>
?
??? 要將文件傳送到備用數據庫,ARCn需要:
??? ① 識別遠程位置(tnsname.ora)
??? ② 通過RFS(遠程文件服務器)進程傳送已存檔日志
?
??? RFS進程主要負責以下任務:
??? ① 使用ARCn進程的網絡I/O資源
??? ② 在備用數據庫上使用STANDBY_ARCHIVE_DEST參數創建文件
??? ③ 在遠程站點添加日志文件
??? ④ 更新備用數據庫的控制文件
?
??? <這樣存檔的文件主要用于維護備用數據庫,該備用數據庫是某個數據庫的精確復制品>
?
?
二、管理存檔目標失敗
?
??? 1、指定最小成功目標
?
??? 指定參數 LOG_ARCHIVE_MIN_SUCCEED_DEST=n 來決定Oracle必須成功存檔重做日志組的目標的最小數目,默認為1
?
??? 2、指定強制目標和任選目標
?
??? 使用
LOG_ARCHIVE_DEST_n參數來指定目標擁有OPTIONAL還是MANDATORY屬性
?
??? ① 不為目標指定MANDATORY屬性和為其指定OPTIONAL屬性是一樣的
??? ② 必須至少擁有一個可以聲明OPTIONAL或MANDATORY屬性的本地目標
??? ③ 在至少一個本地目標上使用LOG_ARCHIVE_MIN_SUCCEED_DEST=n參數時,將按MANDATORY方式操作,因為最小值為1
??? ④ 任何MANDATORY屬性目標的失敗,包括MANDATORY屬性的備用目標,都和LOG_ARCHIVE_MIN_SUCCEED_DEST沒有關系
??? ⑤ LOG_ARCHIVE_MIN_SUCCEED_DEST不能比目標總數大,也不能比MANDATORY加上OPTIONAL的本地目標總和要大
??? ⑥ 若果MANDATORY屬性目標具有DEFER屬性,且Oracle沒有將已存檔日志傳送到備用站點情況下重寫了聯機日志,則必須手動傳送
?
??? 也可使用LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEXT來建立強制目標或任選目標
??? ① 任何LOG_ARCHIVE_DEST聲明的目標都是強制的
??? ② 如果LOG_ARCHIVE_DUPLEX_DEXT=1,那么任何他來聲明的目標都是任選的
??? ③ 如果LOG_ARCHIVE_DUPLEX_DEXT=2,那么任何他來聲明的目標都是強制的
?
??? 3、方案舉例
?
??? ① 指定了3個全為OPTIONAL的本地目標位置,則LOG_ARCHIVE_MIN_SUCCEED_DEST
??????? 1---------僅在至少一個OPTIONAL目標成功的情況下,Oracle可重用日志文件
??????? 2---------僅在至少兩個OPTIONAL目標成功的情況下,Oracle可重用日志文件
??????? 3---------僅在所有OPTIONAL目標成功的情況下,Oracle可重用日志文件
??????? 4+ -------出現錯誤:這個值大于目標總數
?
??? ② 指定了2個MANDATORY、2個OPTIONAL的目標,則LOG_ARCHIVE_MIN_SUCCEED_DEST
??????? 1---------Oracle忽略這個值,并使用MANDATORY目標的數目(2)
??????? 2---------即使沒有任何一個OPTIONAL成功,Oracle也可重用日志文件
??????? 3---------僅在至少一個OPTIONAL目標成功的情況下,Oracle可重用日志文件
??????? 4---------僅在兩個OPTIONAL目標都成功的情況下,Oracle可重用日志文件
??????? 5+ -------出現錯誤:這個值大于目標的總數
?
??? 4、重新存檔到失敗過的目標位置
?
??? 設置LOG_ARCHIVE_DEST_n參數的REOPEN屬性來指定重新存儲到失敗過的目標位置
?
??? REOPEN=n設置了ARCn打開失敗過的目標所需要的最小秒數,默認為360秒,若設置為0則表示關掉REOPEN選項。
??? 如果沒有REOPEN選項,則失敗后ARCn不再打開該目標
?
?
三、多個ARCn進程調整存檔性能
?
??? 一般來說ARCn都不會影響整個系統的性能,但是一些大型數據庫站點上的存檔將有一定的影響。如果ARCn運轉的時間太快,則會消耗當前周期的CPU資源,而降低了系統性能,如果ARCn運轉太慢,則又會讓其他重做日志組等待,造成瓶頸。
??? 可以通過設置多個ARCn進程來進行調節。Oracle可以通過LOG_ARCHIVE_MAX_PROCESSES = n來指定最多10個的ARCn進程,默認情況下參數值為1
?
??? 可以使用 ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES = 2; 來限制當前進程數
??? 另外,可通過 SELECT * FROM V$ARCHIVE_PROCESSES; 來查看每個進程的狀態信息
?
??? 當以下情況時,使用多個ARCn進程會比較有優勢:
??? ① 使用3個或3個以上的聯機重做日志時
??? ② 存檔到不止一個目標位置時
?
??? 下圖說明了多個ARCn進程寫入存檔的邏輯:
?
???
?
?
四、跟蹤存檔日志進程
?
??? 通過設置LOG_ARCHIVE_TRACE參數來指定trace level,具體定義如下:
?
??? 0 :不允許存檔日志跟蹤(默認設置)
??? 1 :跟蹤重做日志文件的存檔
??? 2 :跟蹤每個存檔日志目標的存檔狀態
??? 4 :跟蹤存檔操作的階段
??? 8 :跟蹤存檔日志目標的活動
??? 16:跟蹤詳細的存檔日志目標的活動
??? 32:跟蹤存檔日志目標的參數修改
??? 64:跟蹤ARCn進程的狀態活動
?
??? 指定LOG_ARCHIVE_TRACE = n,這個n是各項跟蹤級別的總和
??? 例如n=12,代表跟蹤4和8兩項
?
??? ALTER SYSTEM SET LOG_ARCHIVE_TRACE = 12; --在下次存檔操作啟動時生效
?
?
五、查看已存檔的重做日志信息
?
??? 1、V$DATABASE :查看是否啟用ARCHIVELOG模式
??? 2、V$ARCHIVED_LOG :顯示控制文件中的歷史存檔日志信息
??? 3、V$ARCHIVE_DEST :描述當前的實例、所有存檔目標、以及這些目標的當前值、模式、狀態
??? 4、V$ARCHIVE_PROCESSES :顯示實例用到的各種存檔進程的狀態信息
??? 5、V$BACKUP_REDOLOG :包含有關已存檔的日志的任何備份信息
??? 6、V$LOG :顯示數據庫所用的所有聯機重做日志組,以及是否需要歸檔
??? 7、V$LOG_HISTORY :包含日志歷史信息,例如哪些已存檔以及每個已存檔日志的SCN范圍
?
??? 舉例:
?
??? ...
?
?