【DG】Oracle Data Guard官方直譯
【DG】Oracle Data Guard官方直譯
1 Oracle Data Guard 介紹
Oracle Data Guard概念和管理10g版本2
Oracle Data Guard 確保企業資料的高可用性、資料保護以及災難恢復。Data Guard 提供了一套全面的服務來建立、維護、管理和監控一個或多個備資料庫,使得生產 Oracle 資料庫從災難和資料損壞中得以倖存。Data Guard 維護這些備資料庫作為生產資料庫的事務一致性複製。然後,如果生產資料庫因為計劃的或計劃外的中斷而變得不可用。Data Guard 能切換任何備資料為生產角色,從而最小化中斷引起的當機時間。Data Guard 能與傳統的備份、恢復和 cluster 技術一起使用,以提供高階別的資料保護和資料可用性。
使用Data Guard,管理員能透過將資源密集的備份和報表操作轉移到備系統上,來提高生產資料庫的效能。
本章包括下面描述Oracle Data Guard 亮點的主題: z Data Guard 配置
z Data Guard 服務
z Data Guard Broker
z Data Guard 保護模式
z Data Guard 和互補技術
z Data Guard 益處總結
1.1 Data Guard 配置
Data Guard 配置包含一個生產資料庫和一個或更多備資料庫。在 Data Guard 配置中的資料庫可以透過 Oracle Net 連線並可以分佈在不同地理位置。資料庫所處位置是沒有限制的,只要它們能互相通訊。例如,你能有一個備資料庫與生產資料庫處於同一系統上,並且有兩個備資料庫在異地的其它系統上。
你能使用SQL 命令列工具或 Data Guard broker 工具來管理主和備資料庫,包括命令列工具(DGMGRL)和在 Oracle 企業管理器中整合的圖形化使用者工具。
1.1.1 主資料庫
Data Guard 配置包含一個生產資料庫,也稱為主資料庫,作為主角。這是大多數你的應用訪問的資料庫。
主資料庫能是單例項Oracle 資料庫或 Oracle Real Application Clusters 資料庫。
1.1.2 備資料庫
備資料庫是主資料庫的一個事務一致性複製。使用主資料庫的備份複製,你能建立最多九個備資料庫,並將其合併到一個Data Guard 配置中。一旦建立,Data Guard 自動維護每個備資料庫,從主資料庫傳送重做資料然後應用重做到備資料庫。
類似於主資料庫,備資料庫也可以是單例項Oracle 資料庫或 Oracle Real Application
Clusters 資料庫。
備資料庫可以是物理備資料庫或邏輯備資料庫: z 物理備資料庫透過基於塊對塊的與主資料庫同樣的磁碟資料庫結構,提供主資料庫的完全一致的物理複製。資料庫方案,包括索引,是相同的。物理備資料庫與主資料庫保持同步,透過重做應用,恢復從主資料庫收到的重做資料並將重做應用到物理備資料庫。
除了災難恢復,物理備資料庫只能在有限的範圍內用於業務目的。
z 邏輯備資料庫
包含與生產資料庫同樣的邏輯資訊,儘管資料的物理組織和結構可以是不同的。邏輯備資料庫透過SQL 應用與主資料庫保持同步,其將從主資料庫收到的重做中的資料轉換成 SQL 語句,然後在備資料庫上執行 SQL 語句。
邏輯備資料庫能用於災難恢復需求以外的業務目的。這允許使用者在任何時間訪問邏輯備資料庫,進行查詢和報表。同時,使用邏輯備資料庫,你能升級Oracle 資料庫軟體和補丁集而幾乎沒有當機時間。這樣,邏輯備資料庫能併發用於資料保護、報表、和資料庫升級。
1.1.3 配置舉例
圖1-1 顯示典型的 Data Guard 配置,包含一個主資料庫,傳送重做資料到一個備資料庫。備資料庫異地於主資料庫以用於災難恢復和備份操作。你能配置備資料庫與主資料庫在同一位置。然而,為了災難恢復的目的,Oracle 建議你配置備資料庫在異地位置。
圖1-1 顯示典型的 Data Guard 配置,在其中重做被應用到備資料庫的備重做日誌檔案中。
1.2 Data Guard 服務
下面小節解釋了Data Guard 如何管理重做資料的傳送、重做資料的應用、以及更改資料庫角色:
z 重做傳輸服務
控制從生產資料自動傳輸重做資料到一個或更多歸檔的目的地。
z 日誌應用服務
在備資料庫上應用重做資料,與主資料庫維持事務同步。重做資料能從歸檔重做日誌檔案,或者,如果允許實時應用,當備重做日誌寫滿時直接從其中應用,而不需要將重做資料首先歸檔到備資料庫。
z 角色轉換 使用切換或故障轉移操作,從備資料庫更改資料的角色到主資料庫,或者從主資料
庫到備資料庫。
1.2.1 重做傳輸服務
重做傳輸服務控制重做資料從生產資料庫自動傳輸到一個或更多歸檔的目的地。重做傳輸服務執行下述任務: z 從主資料庫傳送重做資料到配置中的備系統 z 管理解決歸檔重做日誌檔案由於網路故障中斷的過程 z 強制資料庫保護模式(在 1.4 節中描述) z 自動探測在備系統上丟失或損壞的歸檔重做日誌檔案,並且自動從主資料庫或其它備資料庫檢索替代的歸檔重做日誌檔案
1.2.2 日誌應用服務
從主資料庫傳送的重做資料寫到備系統上的備重做日誌檔案中,如果配置了,然後再歸檔到歸檔重做日誌檔案。日誌應用服務自動應用備資料庫上的重做資料,以維持與主資料庫的一致性。其同時也允許對資料的只讀訪問。
物理與邏輯備資料庫的主要區別是日誌應用服務應用歸檔重做資料的方式:
z 對於物理備資料庫,Data Guard 使用重做應用技術,使用 Oracle 資料庫的標準恢復技術在備資料庫上應用重做資料,如圖 1-2 所示。
圖1-2 物理備資料庫的自動更新
z 對於邏輯備資料庫,Data Guard 使用 SQL 應用技術,首先將收到的重做資料轉換為 SQL 語句,然後在邏輯備資料庫執行生成的 SQL 語句,如圖 1-3 所示。
1.2.3 角色轉換
Oracle 資料庫操作在兩種角色之一:主或備。使用 Data Guard,你能使用切換或故障轉移操作更改資料庫的角色。
切換是在主資料庫與其備資料庫之一進行的角色反轉。切換確保不丟失資料。這是對於主系統計劃維護的典型操作。在切換期間,主資料庫轉換到備角色,備資料庫轉換到主角色。轉換髮生不需要重建任何資料庫。
故障轉移是當主資料庫不可用時。故障轉移只有在主資料庫的災難故障的情況下執行,並且故障轉移導致備資料庫轉換到主角色。資料庫管理員能配置 Data Guard 以確保不丟失資料。
在本文件中描述的角色轉換是使用SQL 語句手工執行。你也能使用 Oracle Data Guard broker 來簡化角色轉換,並使用 Oracle 企業管理器或 DGMGRL 命令列介面來自動化故障轉移,如 1.3 節所述。
1.3 Data Guard Broker
Data Guard Broker 是一個分散式的管理構架,用於自動化 Data Guard 配置的建立、維護、和監控。你能使用 Oracle Enterprise Manager 圖形化使用者介面(GUI)或 Data Guard 命令列介面(DGMGRL)來:
z 建立和允許 Data Guard 配置,包括設定重做傳輸服務和日誌應用服務 z 從配置中的任何系統管理整個 Data Guard 配置
z 管理和監控包含 Real Application Clusters 主或備資料庫的 Data Guard 配置
z 透過允許你使用 Oracle 企業管理器中的單次點選或在 DGMGRL 命令列介面中的單條命令簡化切換和故障轉移
z 當主資料庫變得不可用時允許快速啟動故障轉移來自動轉移故障。當允許快速啟動故障轉移時,由 Data Guard broker 決定是否需要故障轉移,並自動啟動故障轉移到指定的目標備資料庫,不需要 DBA 的介入並且不丟失資料。
另外,Oracle 企業管理器自動化及簡化了:
z 從主資料庫的備份複製中建立物理或邏輯備資料庫
z 新增新的或現有的備資料庫到現有的 Data Guard 配置
z 監控日誌應用速度,捕獲診斷資訊,以及使用集中化的監控、測試、和效能工具快速發現問題。
1.3.1 使用 Oracle 企業管理器
Oracle 企業管理器,也稱為企業管理器,提供了一個基於 web 的介面,用於檢視、監控、和管理Data Guard配置中的主和備資料庫。企業管理器的易於使用的介面結合了broker 的集中管理和 Data Guard 配置的監控,增強了對於高可用性、站點保護、和企業的資料保護的 Data Guard 解決方案。
從企業管理器中央控制檯,所有的管理操作能在本地或異地執行。你能檢視Oracle 資料庫的主頁,包括主和備資料庫以及例項,建立或新增現有的備資料庫,氣筒和停止例項,監控例項效能,檢視事件,排程作業,以及執行備份和恢復操作。檢視 Oracle Data Guard
Broker 和 Oracle 企業管理器聯機幫助系統。
圖1-4 顯示了在企業管理器中的 Data Guard 管理概要頁面。
1.3.2 使用 Data Guard 命令列介面
Data Guard 命令列介面(DGMGRL)允許你從 DGMGRL 提示符或指令碼中控制和監控 Data Guard 配置。你能使用 DGMGRL 執行大多數所需的行動來管理和監控配置中的資料庫。檢視 Oracle Data Guard Broker 以獲得完整的 DGMGRL 參考資訊和舉例。
1.4 Data Guard 保護模式
在一些情況下,業務不允許丟失資料。在另外一些情況下,資料庫的可用性比丟失資料更為重要。一些應用需要最強的資料庫效能並且能容忍丟失少量的資料。下面的描述概述了三種不同的資料保護模式。
最大保護 這種保護模式確保如果主資料庫故障不會發生資料丟失。要提供這種級別的保護,恢復每個事務所需的重做資料必須在事務提交之前同時寫到本地聯機重做日誌和至少一個備資料庫上的備重做日誌。要確保不發生資料丟失,如果故障導致主資料庫無法寫重做流到至少一個事務一致性備資料庫的備重做日誌時,主資料庫會關閉。
最大可用性 這種保護模式提供了可能的最高階別的資料保護,而不用與主資料庫的可用性相折衷。與最大保護模式相同,在恢復事務所需的重做寫到本地聯機重做日誌和至少一個事務一致性備資料庫上的備重做日誌之前,事務將不會提交。與最大保護模式不同的是,如果故障導致主資料庫無法寫重做流到異地備重做日誌時,主資料庫不會關閉。替代地,主資料庫以最大效能模式執行直到故障消除,並且解決所有重做日誌檔案中的中斷。當所有中斷解決之後,主資料庫自動繼續以最大可用性模式執行。
這種模式確保如果主資料庫故障,但是隻有當第二次故障沒有阻止完整的重做資料集從主資料庫傳送到至少一個備資料庫時,不發生資料丟失。
最大效能 這種保護模式(預設)提供了可能的最高階別的資料保護,而不影響主資料庫的效能。這是透過允許事務在恢復該事務所需重做資料在寫到本地聯機重做日誌後立即提交而實現的。主資料庫的重做資料流也寫到至少一個備資料庫,但是那個重做流相對於建立重做資料的事務是非同步寫的。
當所用的網路連線有足夠的頻寬,這種模式提供了近似於最大可用性模式的資料保護級別,並且對主資料庫效能的影響最小。
最大保護和最大可用性模式需要備重做日誌檔案配置在配置中的至少一個備資料庫上。所有三種保護模式需要在LOG_ARCHIVE_DEST_n 初始化引數上指定特定的日誌傳輸屬性以傳送重做資料到至少一個備資料庫。檢視 5.6 節以獲得資料保護模式的完整資訊。
1.5 Data Guard 和互補技術
Oracle資料庫提供了幾種獨特的技術互補Data Guard確保業務關鍵系統以比使用其中任何單種技術更高階別的可用性和資料保護執行。下面的列表總結了一些 Oracle 高可用性技術:
z Oracle Real Application Clusters(RAC)
RAC 允許多個獨立伺服器透過內部連線共享訪問一個 Oracle 資料庫,提供了高可用性、可擴充套件性、和在故障時的冗餘性。RAC 和 Data Guard 一起提供了系統級別、站點級別、和資料級別的保護,導致了高階別的可用性和災難恢復而不丟失資料:
{ RAC 透過提供從故障的快速和自動恢復來處理系統故障,如節點故障和例項崩潰。其也提供了對應用的增加的可擴充套件性。
{ Data Guard 透過保持不共享磁碟的主和備資料庫的事務一致性來處理站點故障,允許從站點災難和資料損壞中恢復。
可能有許多不同的使用RAC 和 Data Guard 的架構,依賴於本地和異地站點的使用以及節點和邏輯與物理備資料庫的結合的使用。檢視附錄 D,“Data Guard 和 Real Application Clusters”和 Oracle 資料庫高可用性概述以獲得 RAC 和 Data Guard 的整合。
z Flashback 資料庫
Flashback 資料庫特性提供了從邏輯資料損壞和使用者錯誤中的快速恢復。透過允許你閃回時間點,可能已經被錯誤更改或刪除的前面版本的業務資訊能被再次訪問。這種特性:
{ 消除了還原備份並前滾更改到錯誤或損壞出現的時間的需求。替代地,
Flashback 資料庫能回滾 Oracle 資料庫到一個前面的時間點,而不用還原資料檔案。
{ 提供了延遲重做的應用的選項,以保護使用者錯誤或邏輯損壞。因此,備資料庫能近地與主資料庫同步,從而減少了故障轉移和切換的時間。
{ 避免在故障轉移後完全重建原始主資料庫。故障的主資料庫能閃回到故障轉移前的時間點,並轉換成新的主資料庫的備資料庫。
檢視Oracle 資料庫備份和恢復高階使用者指南以獲得 Flashback 資料庫的資訊,以及 6.2.2 節以獲得延遲重做資料的應用的資訊。
z 恢復管理器(RMAN)
RMAN 是一種 Oracle 工具,簡化了備份、還原、和恢復資料庫檔案。與 Data Guard 相同,RMAN 是一種 Oracle 資料庫的特性,不需要額外的安裝。Data Guard 能很好地與 RMAN 整合,允許你:
{ 使用恢復管理器 DUPILCATE 命令來從你的主資料庫的備份中建立備資料庫。 { 用物理備資料庫取代生產資料庫來進行備份,減少生產資料庫的負載並允許有效地使用備站點的系統資源。此外,備份能在物理備資料庫在應用重做時進行。
{ 透過自動刪除用於在執行備份後輸入的歸檔重做日誌檔案,幫助管理歸檔重做日誌檔案。
檢視附錄 F,“使用恢復管理器建立備資料庫”和 Oracle 資料庫備份和恢復基礎。
1.6 Data Guard 益處總結
Data Guard 提供了這些益處:
z 災難恢復,資料保護,和高可用性
Data Guard 提供了一個有效的、廣泛的災難恢復及高可用性解決方案。易於管理的切換和故障轉移能力允許角色在主和備資料庫之間轉換,最小化了主資料庫在計劃和非計劃中斷的當機時間。
z 完全的資料保護
Data Guard 能確保沒有資料丟失,即使面對無法預料的災難。備資料庫提供了對資料損壞和使用者錯誤的保護。在主資料庫上的儲存級別的物理損壞不會蔓延到備資料庫。類似地,導致主資料庫永久損害的邏輯損壞或使用者錯誤能被解決。最後,重做資料在應用到備資料庫時要驗證。
z 系統資源的有效使用
由從主資料庫收到的重做資料更新的備資料庫表,能用於其它任務如備份、報表、總結、和查詢,從而減少了主資料庫用於執行這些任務所需的工作負載,節省了寶貴的CPU 和 I/O 迴圈。在邏輯備資料庫中,使用者能在不是從主資料庫更新的方案的表上執行常規的資料操作。邏輯備資料庫能在表被從主資料庫更新時保持開啟,並且表同時能被只讀訪問。最後,在維護的表上能建立額外的索引和物化檢視,以獲得更好的查詢效能並適合特定的業務需求。
z 靈活保護資料,平衡可用性與效能需求
Oracle Data Guard 提供了最大保護、最大可用性、和最大效能模式,以幫助企業平衡資料可用性與系統效能需求。
z 自動探測和解決中斷
如果在主和一個或更多備資料庫之間的連線丟失了(例如,由於網路問題),在主資料庫上生成的重做資料無法傳送到那些備資料庫。一旦重新建立連線,Data Guard 能自動探測丟失的歸檔重做日誌檔案(稱之為中斷),然後自動傳輸丟失的歸檔重做日誌到備資料庫。備資料庫與主資料庫同步,不需要 DBA 的手工介入。
z 集中和簡單的管理
Data Guard broker 提供了一個圖形化的使用者介面和一個命令列介面來自動化管理和操作在 Data Guard 配置中的跨多個資料庫的任務。Broker 也監控在單個 Data Guard 配置中的所有系統。
z 與 Oracle 資料庫整合
Data Guard 是 Oracle 資料庫企業版中的一個特性,不需要單獨地安裝。
z 自動角色轉換
當允許快速啟動故障轉移時,在主站點災難的情況下,Data Guard broker 自動故障轉移到一個同步的備站點上,不需要 DBA 的介入。另外,角色轉換自動通知應用。
2 Data Guard 入門
Data Guard 配置包含一個主資料庫和最多九個相關的備資料庫。本章描述了 Data Guard 入門的下述考慮: z 備資料庫型別
z 管理 Data Guard 配置的使用者介面
z Data Guard 操作的先決條件 z 備資料庫目錄結構考慮 z 聯機重做日誌、歸檔重做日誌、和備重做日誌
2.1 備資料庫型別
備資料庫是一個 Oracle 生產資料庫的事務一致性複製,初始從主資料庫的備份複製建立。一旦建立並配置備資料庫後,Data Guard 透過傳輸主資料庫重做資料到備系統自動維護備資料庫,在那裡重做資料應用到備資料庫。
備資料庫可用是兩種型別之一:物理備資料庫或邏輯備資料庫。如果需要,任何一種型別的備資料能承擔主資料庫的角色並接管生產過程。Data Guard 配置能包括物理備資料庫,邏輯備資料庫,或兩種型別的組合。
2.1.1 物理備資料庫
以基於塊對塊的與主資料庫同樣的磁碟資料庫結構,物理備資料庫物理等同於主資料庫。資料庫方案、包括索引,是同樣的。
Data Guard 透過執行重做應用,維護物理備資料庫。當沒有執行恢復的時候,物理備資料庫能以只讀模式開啟,或者如果允許 Flashback 資料庫則可以臨時以讀/寫模式開啟。
z 重做應用
物理備資料庫透過使用Oracle 恢復機制,從歸檔重做日誌檔案或直接從備系統上的備重做日誌檔案應用重做資料來維護。恢復操作使用資料塊地址應用重做塊中的更改到資料塊中。資料庫在應用重做時不能開啟。
z 只讀開啟
物理備資料庫能以只讀模式開啟,使得你能在資料庫上執行查詢。當以只讀模式開啟時,備資料庫能繼續接受重做資料,但是從日誌檔案的重做資料的應用會延遲,直到資料庫繼續重做應用。
雖然物理備資料庫不能在同一時間重做應用和以只讀模式開啟,但是你能在兩者之間切換。例如,你能執行重做應用,然後以只讀模式開啟以執行報表應用,再將其改回以執行重做應用任何未應用的歸檔重做日誌檔案。你能在必要時重複這個迴圈,在重做應用和只讀之間切換。
物理備資料庫可用於執行備份。此外,物理備資料庫將繼續接受重做資料,即使歸檔重做日誌檔案或備重做日誌檔案沒有在那個時刻被應用。
z 讀/寫開啟
為了諸如建立一個克隆資料庫或讀/寫報表的目的,物理備資料庫也能為讀/寫訪問開啟。當以讀/寫模式開啟時,備資料庫不會從主資料庫接受重做資料並且無法提供災難保護。
物理備資料庫能臨時地以讀/寫模式開啟,以用於開發、報表、或測試目的,然後閃回到過去的點以回覆到物理備資料庫。當資料庫閃回之後,Data Guard 自動同步備資料庫與主資料庫,而不需要從主資料庫的備份複製重建物理備資料庫。
物理備資料庫的益處
物理備資料庫提供以下益處: z 災難回覆和高可用性
物理備資料庫提供了強壯的和有效的災難回覆以及高可用性解決方案。易於管理的切換和故障轉移能力允許在主和物理備資料庫之間容易地進行角色轉換,最小化主資料庫由於計劃的或計劃外的斷電而導致的當機時間。
z 資料保護 使用物理備資料庫,Data Guard 能確保沒有資料丟失,即使面對不可預見的災難。
物理備資料庫支援主資料庫能支援的所有資料型別和所有DDL 和 DML 操作。其同時提供了對資料損壞和使用者錯誤的保護。在主資料庫上的儲存級別的物理損壞不會蔓延到備資料庫。類似地,造成主資料庫永久損害的邏輯損壞或使用者錯誤也能被解決。最後,重做資料在應用到備資料庫時要驗證。
z 減少主資料庫的工作負載
Oracle 回覆管理器(RMAN)能使用物理備資料庫進行非負載備份,從而節省了主資料庫的寶貴 CPU 和 I/O 迴圈。物理備資料庫也能以只讀模式開啟,用於報表和查詢。
z 效能 物理備資料庫使用的重做應用技術使用低階別的恢復機制應用更改,繞過了所有
SQL 級別程式碼層;因此,這是應用海量重做資料最有效的機制。
2.1.2 邏輯備資料庫
邏輯備資料庫最初建立為主資料庫的等同複製,但是以後能更改為不同的結構。邏輯備資料庫透過執行SQL 語句來更新。這允許使用者在任何時間訪問備資料庫進行查詢和報表。這樣,邏輯備資料庫能併發用於資料保護和報表操作。
Data Guard 透過轉換日誌檔案中的資料到 SQL 語句然後在邏輯備資料庫上執行 SQL 語句,自動應用從歸檔重做日誌檔案或備重做日誌檔案中的資訊到邏輯備資料庫。因為邏輯備資料庫是使用 SQL 語句更新的,其必須保持開啟。雖然邏輯備資料庫是以讀/寫模式開啟的,但是用於重新生成 SQL 的目標表只能用於只讀操作。當那些表被更新時,他們能同時用於其它任務如報表、統計、和查詢。此外,這些任務能透過在維護表上建立額外的索引和物化檢視進行最佳化。
邏輯備資料庫在資料型別、表的型別、和DDL 與 DML 操作型別上有一些限制。4.1.1 節描述了不支援的資料型別和表的儲存屬性。
邏輯備資料庫的益處
邏輯備資料庫提供了與物理備資料類似的災難恢復,高可用性,和資料保護益處。它同時還提供下述專門的益處:
z 備硬體資源的有效利用邏輯備資料庫能用於災難恢復需求以外的其它業務用途。它能在 Data Guard 配置中保護的資料庫方案之上主動建立額外的方案,並且使用者能在任何時間對這些方案執行正常的 DDL 或 DML 操作。因為由 Data Guard 保護的邏輯備表能儲存在主資料庫以外的不同物理層次,所以能建立額外的索引和物化檢視以提高查詢效能並滿足特定的業務需求。
z 減少主資料庫的工作負載
邏輯備資料庫能在表被主資料庫更新的同時保持開啟,並且這些表同時可用於讀訪問。這使得邏輯備資料庫是進行查詢、統計、和報表活動的極好選擇,從而減少了主資料庫執行這些任務的負載並節省了寶貴的CPU 和 I/O 迴圈。
2.2 管理 Data Guard 配置的使用者介面
你能使用下述介面來配置、實施、和管理Data Guard 配置: z Oracle 企業管理器
企業管理器提供了一個Data Guard broker 的 GUI 介面,能自動化許多工,包括建立、配置、和監控 Data Guard 環境。檢視 Oracle Data Guard Broker 和 Oracle 企業管理器聯機幫助以獲得 GUI 及其嚮導相關的資訊。
z SQL*Plus 命令列介面
個別SQL*Plus 語句使用 STANDBY 關鍵詞來指定備資料庫上的操作。其它 SQL 語句不包含備-特定語法,但是它們對於在備資料庫上執行操作是有用的。檢視第 15 章以獲得相關語句的列表。
z 初始化引數
個別初始化引數用於定義Data Guard 環境。檢視第 13 章以獲得相關初始化引數的列表。
z Data Guard broker 命令列介面(DGMGRL)
DGMGRL 命令列介面是使用 Oracle 企業管理器的替代選項。如果你想從批處理程式或指令碼使用 broker 來管理 Data Guard 配置,DGMGRL 命令列介面是很有用的。檢視
Oracle Data Guard Broker 以獲得完整資訊。
2.3 Data Guard 操作的先決條件
下面小節描述了使用Data Guard 的操作需求: z 硬體和作業系統需求 z Oracle 軟體需求
2.3.1 硬體和作業系統需求
下面列表描述了使用Data Guard 的硬體和作業系統需求:
z Data Guard 配置中的所有成員必須執行在同一平臺建立的 Oracle 映像上。
例如,這意味著在Intel 系統上的 32 位 Linux 上的主資料庫的 Data Guard 配置可以有配置在 Intel 系統上的 32 位 Linux 上的備資料庫。然而,在 64 位 HP-UX 系統上的主資料庫也能配置在 32 位 HP-UX 系統上的備資料庫,只要兩個伺服器都執行 32 位的映像。
z 主和備系統的硬體(例如,CPU 的數量、記憶體大小、儲存配置)可以是不同的。
如果備系統比主系統要小,你可能必須限制在切換或故障轉移後備系統上的工作量。備系統必須有足夠的可用資源來接收和應用所有從主資料庫來的重做資料。邏輯
備資料庫需要額外的資源以轉換重做資料為SQL 語句並在邏輯備資料庫上執行 SQL。
z 在主和備位置執行的作業系統必須是相同的,但是作業系統版本不需要一樣。另外,備資料庫能使用與主資料庫不同的目錄結構。
2.3.2 Oracle 軟體需求
下面列表描述了使用Data Guard 的 Oracle 軟體需求:
z Oracle Data Guard 只是作為 Oracle 資料庫企業版的一個特性。在 Oracle 資料庫標準版中沒有這個特性。著意味著在 Data Guard 配置中必須在主資料庫和所有備資料庫上必須安裝同樣版本的 Oracle 資料庫企業版。
注:
可以使用執行Oracle 資料庫標準版的資料庫來模擬備資料庫環境。你能透過使用作業系統複製工具或自定義指令碼定時從一個資料到另一個傳送歸檔重做日誌檔案,手工傳送歸檔重做日誌檔案。後果是這種配置無法提供 Data Guard 所具有的易於使用、易於管理、高效能、和災難恢復能力。
z 使用 Data Guard SQL 應用,你將能夠執行 Oracle 資料庫軟體的滾動升級,從補丁集版本 n(最低地,這必須是版本 10.1.0.3)到下面的資料庫 10.1.0.(n+1)補丁集版本。在滾動升級期間,你能在升級的同時在主和邏輯備資料上執行不同版本的
Oracle 資料庫,一次升級一個。要獲得完整的資訊,檢視第 11 章,“使用 SQL 應用來升級 Oracle 資料庫”和應用 Oracle 資料庫 10g 補丁集版本的自述檔案。
z 在 Data Guard 配置中所有資料庫上的 COMPATIBLE 初始化引數必須設為同樣的值。
z 如果你當前在 Oracle8i 資料庫軟體上執行 Oracle Data Guard,檢視 Oracle 資料庫升級指南以獲得升級 Oracle Data Guard 的完整資訊。
z 主資料庫必須執行在 ARCHIVELOG 模式。檢視 Oracle 資料庫管理員指南以獲得更多資訊。
z 主資料庫可以是單例項資料庫或多例項 Real Application Clusters 資料庫。備資料庫可以是單例項資料庫或多例項 Real Application Clusters(RAC)資料庫,並且這些備資料庫可以是物理和邏輯型別的混合。檢視 Oracle 資料庫高可用性概述以獲得更多配置和使用 Oracle Data Guard 與 RAC 的資訊。
z 每個主資料庫和備資料庫必須有自己的控制檔案。
z 如果備資料庫與主資料庫位於同樣的系統上,備資料庫的歸檔目錄必須使用與主資料庫不同的目錄結構。否則,備資料庫可能覆蓋主資料庫的檔案。
z 要保護在主資料庫上的不記日誌的直接寫,無法傳送到備資料庫,在執行用於建立備資料庫的資料檔案備份之前在主資料庫上開啟 FORCE LOGGING。只要需要備資料庫就保持資料庫在 FORCE LOGGING 模式。
z 你用於管理主和備資料庫例項的使用者帳戶必須有 SYSDBA 系統許可權。
Oracle 建議當你在 Data Guard 配置中設定 Oracle 自動儲存管理(ASM)和 Oracle 管理檔案(OMF)時,必須在主和備資料庫上對稱地設定。就是說,如果在 Data Guard 配置中的任何資料庫使用 ASM、OMF、或兩者都,則在配置中的每個資料庫都必須相應地使用 ASM、OMF、或兩者都。檢視在 12.12 節中的場景以獲得更多資訊。
注:
因為一些執行包括基於時間的資料更新的應用無法處理從多個時區輸入的資料,所以考慮設定主與遠端備系統的時區相一致,以確保在角色轉換之後維持記錄的時間順序。
2.4 備資料庫目錄結構考慮
不同備資料庫的目錄結構是很重要的,因為它決定備資料檔案、歸檔重做日誌檔案、和備重做日誌檔案的路徑名稱。如果可能,主和備系統上的資料檔案、日誌檔案、和控制檔案應該擁有同樣的名字和路徑名稱,並且使用Optimal Flexible Architecture(OFA)命名協定。在備資料庫上的歸檔目錄在站點之間也應該是同樣的,包括大小和結構。這種策略允許其它操作如備份、切換、和故障轉移執行同樣的步驟集合,減少維護的複雜性。
否則,你必須設定檔名轉換引數(如表 2-1 中所示)或者重新命名資料檔案。不過,如果你需要使用不同目錄結構的系統或將備和主資料庫放在同一系統上,你能這麼做以最小化額外的管理。
在圖 2-1 中舉例說明了三種基本的配置選項。這些包括:
z 備資料庫與主資料庫處於同一系統上,並使用與主系統不同的目錄結構。這在圖 2
-1 中舉例為 Standby1。
如果你有備資料庫在與主資料庫相同的系統上,你必須使用不同的目錄結構。否則,備資料庫會檢視覆蓋主資料庫的檔案。
z 在分離系統上的備資料庫使用與主系統相同的目錄結構。這在圖 2-1 中舉例為
Standby2。這是建議的模式。
z 在分離系統上的備資料庫使用與主系統不同的目錄結構。這在圖 2-1 中舉例為
Standby3。
注:
如果在 Data Guard 配置中的任何資料庫使用 ASM、OMF、或兩者都,則在配置中的每個資料庫應該相應地使用 ASM、OMF、或兩者都。檢視第 12 章以獲得如何在 Data Guard 配置中設定 OMF 的場景描述。
表2-1 備資料庫位置和目錄選項
備系統 |
目錄結構 |
結果 |
|
與主系統相同 |
不同與主系統 (需要) |
z z |
你必須設定 DB_UNIQUE_NAME 初始化引數。 你能手工重新命名檔案或在備資料庫上設定 DB_FILE_NAME_CONVERT 和 LOG_FILE_NAME_CONVERT 初始化引數,以自動化更新備資料庫控制檔案中的主資料庫資料檔案與歸檔重做日誌檔案和備重做日誌檔案的路徑名稱。(見 3.1.4 節) |
|
|
z |
備資料庫不保護摧毀主和備資料庫所在系統的災難,但是它提供了計劃維護的切換能力。 |
分離系統 |
與主系統相同 |
z |
你不需要重新命名在備資料庫控制檔案中的主資料庫檔案、歸檔重做日誌檔案、和備重做日誌檔案,如果你需要新的命名方式(例如,要將檔案分佈到不同磁碟上),你還是可以這麼做。 |
|
|
z |
透過將備資料庫放在分離的物理媒質上,你能保護主資料庫上的資料不受摧毀主系統的災難影響。 |
分離系統 |
不同與主系統 |
z |
你可以手工重新命名檔案或在備資料庫上設定 DB_FILE_NAME_CONVERT 和 LOG_FILE_NAME_CONVERT 初始化引數來自動化重新命名資料檔案。(見 3.1.4 節) |
|
|
z |
透過將備資料庫放在分離的物理媒質上,你能保護主資料庫上的資料不受摧毀主系統的災難的影響。 |
2.5 聯機重做日誌、歸檔重做日誌、和備重做日誌
Data Guard 恢復操作的最關鍵結構是聯機重做日誌、歸檔重做日誌、和備重做日誌。從主資料庫傳送的重做資料由備系統上的遠端檔案服務(RFS)程式接收,RFS 程式寫重做資料到歸檔日誌檔案或備重做日誌檔案中。重做資料可以在重做寫到歸檔重做日誌檔案或備重做日誌檔案之後應用,或者,如果允許實時應用的話,當備重做日誌檔案寫滿後直接應用。
本文件假設你已經理解聯機重做日誌和歸檔重做日誌之後的概念。2.5.1 節透過提供了 Data Guard 配置相關的資訊補充了基本概念。2.5.2 節提供了使用備重做日誌檔案的詳細資訊。
檢視Oracle 資料庫管理員指南以獲得更多重做日誌和歸檔日誌的資訊,並且 6.2.1 節提供了實時應用的資訊。
2.5.1 聯機重做日誌和歸檔重做日誌
重做的傳送是維護主和備資料庫的事務一致性所必須的。聯機重做日誌和歸檔重做日誌在Data Guard 環境中是需要的: z 聯機重做日誌
Oracle 主資料庫和邏輯備資料庫的每個例項都有聯機重做日誌以保護例項故障情況下的資料庫。物理備資料庫不使用聯機重做日誌,因為物理備資料庫不開啟用於讀/ 寫 I/O。不允許對物理備資料庫進行更高並且不會生成新的重做資料。
z 歸檔重做日誌
歸檔重做日誌是必須的,因為歸檔是用於使備資料庫與主資料庫保持事務一致性的方法。主資料庫、以及物理和邏輯備資料庫都使用歸檔重做日誌。Oracle 資料庫預設設定以 ARCHIVELOG 模式執行,所以歸檔(ARCn)程式自動複製每個寫滿的聯機重做日誌檔案到一個或更多歸檔重做日誌檔案。 不像物理備資料庫,邏輯備資料庫是開啟的資料庫,能生成日誌資料並有多個日
志檔案,包括聯機重做日誌檔案、歸檔重做日誌檔案、和備重做日誌檔案(如果配置)。
聯機重做日誌檔案的大小和日誌切換的頻率都能影響主站點上歸檔重做日誌檔案的生成。Oracle 資料庫高可用性概述提供了日誌組大小的推薦值。
Oracle 資料庫在每次日誌切換時會檢視進行檢查點。因此,如果聯機重做日誌檔案的尺寸太小了,頻繁的日誌切換會導致頻繁的檢查點並且負面影響備資料庫的系統效能。
同時檢視:
Oracle 資料庫管理員指南以獲得配置重做日誌、歸檔日誌、和日誌組的更多細節。
2.5.2 備重做日誌
備重做日誌類似與聯機重做日誌,除了備重做日誌是用於儲存從其它資料庫接收的重做資料。
如果你希望實施下述,則需要備重做日誌: z 資料保護的最大保護和最大可用性級別(在 1.4 節中描述,在 5.6 節中詳述) z 實時應用(在 6.2 節中描述) z 級聯目標(在附錄 E 中描述)
備重做日誌提供了一些優點:
z 備重做日誌檔案能存放在裸裝置上,這在主與備資料庫都處於 Real Application
Clusters 環境中時很重要。
z 備重做日誌檔案能使用多個成員進行多重,提高歸檔重做日誌檔案的可靠性。
z 在故障轉移期間,Data Guard 能從備重做日誌檔案比單獨重歸檔重做日誌檔案恢復和應用更多的重做資料。
z 在主資料庫上的歸檔(ARCn)程式或日誌寫(LGWR)程式能直接傳送資料到遠端備重做日誌檔案,潛在地消除了註冊部分歸檔重做日誌檔案的需求(例如,在備資料庫崩潰後的恢復)。檢視第 5 章以獲得更多資訊。
3.1.3 節描述瞭如何配置備重做日誌檔案。
3 建立物理備資料庫
本章逐步指導你建立物理備資料庫。它包括下述主要主題: z 為備資料庫建立準備主資料庫 z 建立物理備資料庫的逐步指導 z 建立後的步驟
在本章中描述的步驟以最高效能模式配置備資料庫,這是預設的資料保護模式。第 5 章提供了配置不同資料保護模式的相關資訊。在本章中的討論假設你在伺服器引數檔案
(SPFILE)中指定了初始化引數,替代了文字初始化引數檔案(PFILE)。
同時檢視: z Oracle 資料庫管理員指南以獲得建立和使用伺服器引數檔案相關資訊
z Oracle Data Guard Broker 和企業管理器聯機幫助系統以獲得使用圖形使用者介面自動建立物理備資料庫相關資訊
3.1 為備資料庫建立準備主資料庫
在你建立備資料庫之前,你必須首先確保正確地配置好主資料庫。
表3-1 提供了你在主資料庫上執行的為物理備資料庫建立準備的任務的檢查列表。每小節還有相關參考更詳細地描述任務。
表3-1 為物理備資料庫建立準備主資料庫
參考 |
任務 |
3.1.1 節 |
允許強制記日誌 |
3.1.2 節 |
建立口令檔案 |
3.1.3 節 |
配置備重做日誌 |
3.1.4 節 |
設定主資料庫初始化引數 |
3.1.5 節 |
允許歸檔 |
注:
只要執行這些準備任務一次。在你完成這些步驟之後,資料庫就準備好以主資料庫為一個或更多備資料庫服務了。
3.1.1 允許強制記日誌
在資料庫建立之後使用下面的SQL 語句將主資料庫置於 FORCE LOGGING 模式:
SQL> ALTER DATABASE FORCE LOGGING;
這條語句可能需要相當長的時間才能完成,因為它會等待所有未記日誌的直接寫I/O 完成。
3.1.2 建立口令檔案如果沒有已經存在的口令檔案則建立一個。在Data Guard 配置中的每個資料庫必須使用口令檔案,並且對於 SYS 使用者的口令檔案在每個系統上必須相同,以確保重做資料傳輸成功。檢視 Oracle 資料庫管理員指南。
3.1.3 配置備重做日誌
最大保護和最大可用性模式是需要備重做日誌的,並且對於所有資料庫推薦LGWR
ASYNC 傳送模式。Data Guard 從備重做日誌比單獨從歸檔重做日誌檔案能恢復和應用更多重做資料。
你應該在建立備資料庫的時候,計劃備重做日誌配置並建立所有所需的日誌組和組成
員。為了提高可用性,考慮多重備重做日誌檔案,類似於多重聯機重做日誌檔案的方式。
執行下述步驟來配置備重做日誌。
第1 步 確保主和備資料庫上的日誌檔案尺寸是相同的。
當前備重做日誌檔案的尺寸必須與當前主資料庫聯機重做日誌檔案的尺寸完全符合。例如,如果主資料庫使用兩個聯機重做日誌組,其日誌檔案是200K,則備重做日誌組也應該是 200K 大小的日誌檔案。
第2 步 確定備重做日誌檔案組的適當數目。
最少地,配置應該比主資料庫上的聯機重做日誌檔案組的數目多一個備重做日誌檔案組。然而,推薦的備重做日誌檔案組數目依賴於主資料庫上的執行緒數。使用下面的等式來確定備重做日誌檔案組的適當數目。
(每個執行緒的日誌檔案的最大數目+1)×執行緒最大數目
使用這個等式減少了主例項的日誌寫(LGWR)程式因為在備資料庫上無法分配備重做日誌檔案而被鎖住的可能性。例如,如果主資料庫每個執行緒有 2 個日誌檔案,並有 2 個執行緒,則在備資料庫上需要有 6 個備重做日誌檔案組。
注:
邏輯備資料庫根據工作負載可能需要更多的備重做日誌檔案(或額外的 ARCn 程式)。這是因為邏輯備資料庫也寫聯機重做日誌檔案,這優先於備重做日誌檔案。因此,備重做日誌檔案可能沒有聯機重做日誌檔案歸檔速度快。同樣,檢視 5.7.3.1 節。
第3 步 檢驗相關資料庫引數和設定。
檢驗在SQL CREATE DATABASE 語句上的 MAXLOGFILES 和 MAXLOGMEMBERS 子句使用的值,不會限制你能新增的重做日誌檔案組和成員。唯一覆蓋由 MAXLOGFILES 和 MAXLOGMEMBERS 子句指定的限制的方法就是重建主資料庫或控制檔案。
檢視Oracle 資料庫 SQL 參考和你的作業系統相關 Oracle 文件,以獲得預設的
MAXLOGFILES 和 MAXLOGMEMBERS 子句的有效值。
第4 步 建立備重做日誌檔案組。
要建立新的備重做日誌檔案組,你必須擁有ALTER DATABASE 系統許可權。備資料庫開始使用新建立的備重做資料,下一時刻在主資料庫上發生日誌切換。例子 3-1 和例子 3 -2 顯示瞭如何使用 ALTER DATABASE 語句和不同的 ADD STANDBY LOGFILE GROUP 子句建立一個新的備重做日誌檔案組。
例子3-1 新增一個備重做日誌檔案組到一個指定的執行緒下面的語句新增一個新的備重做日誌檔案組到一個備資料庫,並指派到THREAD 5: SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 5
2> ('/oracle/dbs/log1c.rdo','/oracle/dbs/log2c.rdo') SIZE 500M;
THREAD 子句只有在你想新增一個或更多備重做日誌檔案組到指定的主資料庫執行緒。
如果你沒有包括THREAD 子句並且配置使用 Real Application Clusters(RAC),Data Guard 會在執行時當不同 RAC 例項需要時自動指派備重做日誌檔案組到執行緒。
例子3-2 新增一個備重做日誌檔案組到一個指定的組號
你也能使用GROUP 子句指定標識組的號碼:
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 10
2> ('/oracle/dbs/log1c.rdo','/oracle/dbs/log2c.rdo') SIZE 500M;
使用組號能使得管理備重做日誌檔案組更容易。然而,組號必須在1 到 MAXLOGFILES 子句的值之間。不要跳過日誌檔案組號(就是說,不要編號組為 10、20、30、等等),否則你會使用備資料庫控制檔案中的額外空間。
注:
雖然備重做日誌只有在資料庫執行在備角色時才使用,Oracle 建議你在主資料庫上建立一個備重做日誌,使得主資料庫能快速切換到備角色而不需要額外的 DBA 干涉。考慮使用 Oracle 企業管理器來在你的主和備資料庫上自動配置備重做日誌。
第5 步 檢驗備重做日誌檔案組已建立
要檢驗備重做日誌檔案組已建立並正確地執行,在主資料庫上呼叫一個日誌切換,然
後查詢備資料庫上的V$STANDBY_LOG 檢視或 V$LOGFILE 檢視。例如:
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM
V$STANDBY_LOG;
GROUP# THREAD# SEQUENCE# ARC STATUS
--------- -------- ---------- --- ----------
3 1 16 NO ACTIVE 4 0 0 YES UNASSIGNED
5 0 0 YES UNASSIGNED
3.1.4 設定主資料庫初始化引數
在主資料庫上,你定義當資料庫處於主角色時控制重做傳輸服務的初始化引數。當主
資料庫轉換到備角色時,你需要新增額外的引數來控制接收重做資料和日誌應用服務。
例子3-3 顯示了你在主資料庫上維護的主角色初始化引數,這個例子表現了主資料庫位於 Chicago,一個物理備資料庫位於 Boston 的 Data Guard 配置。在例子 3-3 中所示的引數對於 Chicago 資料庫當它執行在主或備資料庫角色時都是有效的。配置舉例使用下面表中所示的名字:
資料庫 |
DB_UNIQUE_NAME |
Oracle 網路服務名 |
主 |
chicago |
chicago |
物理備 |
boston |
boston |
例子3-3 主資料庫:主角色初始化引數
DB_NAME=chicago
DB_UNIQUE_NAME=chicago
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
CONTROL_FILES='/arch1/chicago/control1.ctl',
'/arch2/chicago/control2.ctl'
LOG_ARCHIVE_DEST_1=
'LOCATION=/arch1/chicago/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_2=
'SERVICE=boston LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
這些引數控制重做傳輸服務如何傳送重做資料到備系統和本地檔案系統上的重做資料
的歸檔。注意到舉例指定了LGWR 程式和非同步(ASYNC)網路傳輸來傳送 LOG_ARCHIVE_DEST_2 初始化引數上的重做資料。這些是推薦的設定並且需要備重做日誌檔案(檢視 3.1.3 節,“配置備重做日誌”)。
例子3-4 顯示了在主資料庫上額外的備角色初始化引數。這些引數在主資料庫轉換到
備角色時起效果。例子3-4 主資料庫:備角色初始化引數
FAL_SERVER=boston
FAL_CLIENT=chicago
DB_FILE_NAME_CONVERT='boston','chicago'
LOG_FILE_NAME_CONVERT=
'/arch1/boston/','/arch1/chicago/','/arch2/boston/','/arch2/chica go/'
STANDBY_FILE_MANAGEMENT=AUTO
如例子 3-4 中所示指定初始化引數設定主資料庫來解決中斷,從新的主資料庫轉換新的資料檔案和日誌檔案路徑名,並在這個資料庫處於備角色時歸檔收到的重做資料。使用上述主和備角色集的初始化引數,在角色轉換後不需要更改任何引數。
下面表提供了在例子 3-3 和例子 3-4 中所示的每個引數設定相關的簡短解釋。
引數 推薦設定
DB_NAME |
指定一個 8 字元名字。對於所有備資料庫使用相同名字。 |
DB_UNIQUE_NAME |
為每個資料庫指定一個唯一的名字。這個名字與資料庫繫結不會更改,即使主和備資料庫交換角色。 |
LOG_ARCHIVE_CONFIG |
在這個引數上指定 DG_CONFIG 屬性,以在 Data Guard 配置中列出主和備資料庫的 DB_UNIQUE_NAME;這允許動態 |
新增備資料庫到Data Guard 配置,該配置有執行在最大保護或最大可用性模式的 Real Application Clusters 主資料庫。預設地,LOG_ARCHIVE_CONFIG 引數執行資料庫傳送和接收重做;在角色轉換之後,你可能需要使用 SEND、NOSEND、
RECEIVE、或 NORECEIVE 關鍵詞再次指定這些設定
CONTROL_FILES |
指定在主資料庫上的控制檔案的路徑名。例子 3-3 顯示瞭如何為兩個控制檔案指定。推薦使用控制檔案的第二個複製,使得例項能在複製好的控制檔案到壞的控制檔案位置之後很容易地重啟。 |
LOG_ARCHIVE_DEST_n |
指定重做資料在主和備系統上歸檔的位置。在例子 3-3 中: z LOG_ARCHIVE_DEST_1 歸檔由主資料庫生成的重做資料,從本地聯機重做日誌檔案到在 /arch1/chicago/目錄的本地歸檔重做日誌檔案。 z LOG_ARCHIVE_DEST_2 只對於主角色有效。這個目的地傳送重做資料到遠端物理備目的地 boston。 注:如果配置了閃回恢復區域(使用 DB_RECOVERY_FILE_DEST 初始化引數)並且你沒有使用 LOCATION 屬性顯式配置本地歸檔目的地,Data Guard 自動使用 LOG_ARCHIVE_DEST_10 初始化引數作為本地歸檔的預設目的地。檢視 5.2.3 節以獲得更多資訊。也檢視第 14 章以獲得完整的 LOG_ARCHIVE_DEST_n 資訊。 |
LOG_ARCHIVE_DEST_STATE_n |
指定 ENABLE 以執行重做傳輸服務傳送重做資料到指定的目的地。 |
REMOTE_LOGIN_PASSWORDFILE 在主和備資料庫上為 SYS 都設定同樣的口令。推薦的設定為 EXCLUSIVE 或 SHARED。 LOG_ARCHIVE_FORMAT 使用執行緒(%t),序列號(%s),和重置日誌 ID(%r)指定歸檔重做日誌檔案的格式。檢視 5.7.1 節以獲得其它例子。 LOG_ARCHIVE_MAX_PROCESSES 指定你需要 Oracle 軟體初始化呼叫歸檔(ARCn)程式的最 =integer 大數目(從 1 到 30)。預設值是 4。檢視 5.3.1.2 節以獲得 ARCn 處理的更多資訊。 FAL_SERVER 指定 FAL 伺服器(典型地這是執行在主角色的資料庫)的 Oracle 網路服務名。當 chicago 資料庫執行在備角色,它使用 boston 資料庫作為 FAL 伺服器,如果 boston 無法自動傳送丟失的日誌檔案,可以從那裡取得(請求)丟失的歸檔重做日誌檔案。檢視 5.8 節。 FAL_CLIENT 指定 chicago 資料庫的 Oracle 網路服務名。FAL 伺服器 (boston)複製丟失的歸檔重做日誌檔案到 chicago 備資料庫。檢視 5.8 節。 DB_FILE_NAME_CONVERT 在備位置後面指定主資料庫檔案的路徑名和檔名位置。這 |
個引數將主資料庫的資料檔案路徑名轉換成備資料檔案路徑名。如果備資料庫與主資料庫處於同一系統上或如果資料檔案在備站點上的目錄結構與主站點不同,則需要這個引數。注意這個引數只是用於轉換物理備資料庫的路徑名。這個引數可以指定多對路徑。
LOG_FILE_NAME_CONVERT |
在備位置後面指定主資料庫聯機重做日誌檔案的位置。這個引數將主資料庫日誌檔案的路徑名轉換成備資料庫上的路徑名。如果備資料庫與主資料庫處於同一系統上或如果資料檔案在備站點上的目錄結構與主站點不同,則需要這個引數。這個引數可以指定多對路徑。 |
STANDBY_FILE_MANAGEMENT |
設定為 AUTO 使得當在主資料庫上新增或刪除資料檔案時,相應的更改會自動應用到備資料庫。 |
警告: 為可能需要更改的額外引數檢查初始化引數檔案。例如,如果在備資料庫上的目錄位置與在主資料庫上指定的不同,你可能需要更改轉儲目的地引數
(BACKGROUND_DUMP_DEST,CORE_DUMP_DEST,USER_DUMP_DEST)。另外,如果沒有已經存在,你可能必須在備系統上建立目錄。
3.1.5 允許歸檔
如果沒有允許歸檔,執行下面的語句將主資料庫置於ARCHIVELOG 模式並允許自動歸檔:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
檢視Oracle 資料庫管理員指南以獲得歸檔相關資訊。
3.2 建立物理備資料庫的逐步指導
本節描述了你執行建立物理備資料庫的任務。
表3-2 提供了你執行建立物理備資料庫的任務和你執行每個任務的資料庫的檢查列表。每個小節還有參考以更詳細地描述任務。
表3-2 建立物理備資料庫
參考 |
任務 |
資料庫 |
3.2.1 節 |
建立主資料庫資料檔案的備份複製 |
主 |
3.2.2 節 |
為備資料庫建立控制檔案 |
主 |
3.2.3 節 |
為備資料庫準備初始化引數檔案 |
主 |
3.2.4 節 |
從主系統複製檔案到備系統 |
主 |
3.2.5 節 |
設定環境以支援備資料庫 |
備 |
3.2.6 節 |
啟動物理備資料庫 |
備 |
3.2.7 節 |
檢驗物理備資料庫正確執行 |
備 |
3.2.1 建立主資料庫資料檔案的備份複製你能使用主資料庫的任何備份複製來建立物理備資料庫,只要你有必要的歸檔重做日誌檔案來完全恢復資料庫。Oracle 推薦你使用恢復管理工具(RMAN)。
檢視Oracle 高可用性體系結構以獲得備份推薦和 Oracle 資料庫備份和恢復高階使用者指南來執行 RMAN 備份操作。
3.2.2 為備資料庫建立控制檔案
如果備份過程需要你關閉主資料庫,執行下面的SQL*Plus 語句來啟動主資料庫:
SQL> STARTUP MOUNT;
然後,為備資料庫建立控制檔案,並開啟主資料庫允許使用者訪問,如下面舉例所示:
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/boston.ctl';
SQL> ALTER DATABASE OPEN;
注:
對於主和備資料庫你不能使用單個控制檔案。
3.2.3 為備資料庫準備初始化引數檔案
執行下面的步驟來建立備初始化引數檔案。
第1 步 複製主資料庫引數檔案到備資料庫。
從主資料庫使用的伺服器引數檔案(SPFILE)建立一個文字初始化引數檔案;文字初始化引數檔案能複製到備位置並修改。例如:
SQL> CREATE PFILE='/tmp/initboston.ora' FROM SPFILE;
後面,在3.2.5 節,在修改這個檔案以包含適用於物理備資料庫的引數值之後,你將這個檔案轉換回伺服器引數檔案。
第2 步 在物理備資料庫上設定初始化引數
雖然在你從主系統複製來的文字初始化引數檔案中的大多數初始化引數設定也適用於物理備資料庫,但是需要進行一些修改。
例子3-5 顯示了備初始化引數檔案中部分,對於物理備資料庫進行的修改。與例子 3 -3 和例子 3-4 中不同的引數值以粗體所示。在例子 3-5 中所示的引數在 boston 資料庫執行於主或備資料庫角色時都是有效的。
例子3-5 為物理備資料庫修改初始化引數
.
.
.
DB_NAME=chicago
DB_UNIQUE_NAME=boston
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
CONTROL_FILES='/arch1/boston/control1.ctl',
'/arch2/boston/control2.ctl'
DB_FILE_NAME_CONVERT='chicago','boston' LOG_FILE_NAME_CONVERT='/arch1/chicago/','/arch1/boston/','/arch2/ chicago/','/arch2/boston/' LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
LOG_ARCHIVE_DEST_1=
'LOCATION=/arch1/boston/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_2=
'SERVICE=chicago LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
STANDBY_FILE_MANAGEMENT=AUTO
FAL_SERVER=chicago
FAL_CLIENT=boston
.
.
.
注意該例子假設使用LGWR 程式來傳送重做資料到本地和在 LOG_ARCHIVE_DEST_2
初始化引數上的遠端目的地。另外,確保在主和備資料庫上設定COMPATIBLE 初始化引數為相同值。如果該值不同,
重做傳輸服務可能無法從主資料庫傳送重做資料到備資料庫。在Data Guard 配置中,
COMPATIBLE 必須設為最小值 9.2.0.1.0。然而,如果你想利用新的 Oracle 資料庫 10g 的特性,設定 COMPATIBLE 引數為 10.2.0.0 或更高。
使用SHOW PARAMETERS命令來檢查沒有其它的引數需要更改總是一個很好的習慣。下面的表提供了在例子 3-5 中所示的與主資料庫不同設定的引數設定的簡要解釋。
引數 推薦設定
DB_UNIQUE_NAME 為這個資料庫指定唯一的名字。這個名字與資料庫繫結不會更改,即使主和備資料庫交換角色。
CONTROL_FILES 指定在主資料庫上的控制檔案的路徑名。例子 3-3 顯示瞭如何為兩個控制檔案指定。推薦使用控制檔案的第二個複製,使得例項能在複製好的控制檔案到壞的控制檔案位置之後很容易地重啟。
DB_FILE_NAME_CONVERT 在備位置後面指定主資料庫檔案的路徑名和檔名位置。這個引數將主資料庫的資料檔案路徑名轉換成備資料檔案路徑名。如果備資料庫與主資料庫處於同一系統上或如果資料檔案在備站點上的目錄結構與主站點不同,則需要這個引數。
LOG_FILE_NAME_CONVERT 在備位置後面指定主資料庫聯機重做日誌檔案的位置。這個引數將主資料庫日誌檔案的路徑名轉換成備資料庫上的路徑名。如果備資料庫與主資料庫處於同一系統上或如果資料檔案在備站點上的目錄結構與主站點不同,則需要這個引數。
LOG_ARCHIVE_DEST_n 指定重做資料歸檔的位置。在例子 3-5 中:
z LOG_ARCHIVE_DEST_1 歸檔從主資料庫收到的重做資料到/arch1/boston/目錄中的歸檔重做日誌檔案。
z LOG_ARCHIVE_DEST_2 當前被忽略,因為這個目的地只對主角色有效。如果發生了切換並且這個例項成為主資料庫,則會傳送重做資料到遠端 chicago 目的地。
注:如果配置了閃回恢復區域(使用DB_RECOVERY_FILE_DEST 初始化引數)並且你沒有使用 LOCATION 屬性顯式配置本地歸檔目的地,Data Guard 自動使用 LOG_ARCHIVE_DEST_10 初始化
引數作為本地歸檔的預設目的地。檢視5.2.3 節以獲得更多資訊。
也檢視第 14 章以獲得完整的 LOG_ARCHIVE_DEST_n 資訊。
FAL_SERVER |
指定 FAL 伺服器(典型地這是執行在主角色的資料庫)的 Oracle 網路服務名。當 boston 資料庫執行在備角色,它使用 chicago 資料庫作為 FAL 伺服器,如果 chicago 無法自動傳送丟失的日誌檔案,可以從那裡取得(請求)丟失的歸檔重做日誌檔案。檢視 5.8 節。 |
FAL_CLIENT |
指定 boston 資料庫的 Oracle 網路服務名。FAL 伺服器(chicago)複製丟失的歸檔重做日誌檔案到 boston 備資料庫。檢視 5.8 節。 |
警告: 為可能需要更改的額外引數檢查初始化引數檔案。例如,如果在備資料庫上的目錄位置與在主資料庫上指定的不同,你可能需要更改轉儲目的地引數
(BACKGROUND_DUMP_DEST,CORE_DUMP_DEST,USER_DUMP_DEST)。另外,如果沒有已經存在,你可能必須在備系統上建立目錄。
3.2.4 從主系統複製檔案到備系統
使用作業系統複製工具將下面的二進位制檔案從主系統複製到備系統: z 在 3.2.1 節中創的備份資料檔案 z 在 3.2.2 節中建立的備控制檔案 z 在 3.2.3 節中建立的初始化引數
3.2.5 設定環境以支援備資料庫
執行下面的步驟以建立一個基於Windows 的服務,建立一個口令檔案,設定 Oracle 網路環境,以及建立一個 SPFILE。
第1 步 建立一個基於 Windows 的服務。
如果備系統是執行在基於Windows 的系統上,使用 ORADIM 工具來建立 Windows 服務和口令檔案。例如:
WINNT> oradim -NEW -SID boston -INTPWD password -STARTMODE manual
檢視Oracle 資料庫 Microsoft Windows(32-Bit)平臺指南以獲得使用 ORADIM 工具的相關資訊。
第2 步 建立一個口令檔案。
在Windows 以外的平臺上,建立一個口令檔案,然後為 SYS 使用者設定與在主資料庫上的 SYS 使用者相同的口令。為了成功傳輸重做,在 Data Guard 配置中的每個資料庫上的 SYS 使用者的口令都必須相同。檢視 Oracle 資料庫管理員指南。
第3 步 為主和備資料庫配置監聽。
在主和備站點上,使用Oracle 網路管理器為相關資料庫配置監聽。
要啟動監聽(獲得新的定義),在主和備系統上輸入下面的LSNRCTL 工具命令:
% lsnrctl stop
% lsnrctl start
檢視Oracle 資料庫網路服務管理員指南。
第4 步 建立 Oracle 網路服務名。
在主和備系統上,使用Oracle 網路管理器來為主和備資料庫建立網路服務名,為重做傳輸服務所使用。
Oracle 網路服務名必須解析一個連線描述符,使用當你為主和備資料庫配置監聽器時指定的同樣的協議、主機地址、埠、和服務。連線描述符也必須指定使用專用伺服器。
檢視Oracle 資料庫網路服務管理員指南和 Oracle 資料庫管理員指南。
第5 步 為備資料庫建立一個伺服器引數檔案。
在一個空閒的備資料庫上,使用SQL CREATE 語句來從步驟 2 中編輯的文字初始化引數檔案,為備資料庫建立一個伺服器引數檔案。例如:
SQL> CREATE SPFILE FROM PFILE='initboston.ora';
3.2.6 啟動物理備資料庫
執行下面的步驟來啟動物理備資料庫和重做應用。
第1 步 啟動物理備資料庫。
在備資料庫上,執行下面的SQL 語句來啟動和安裝資料庫:
SQL> STARTUP MOUNT;
第2 步 啟動重做應用。
在備資料庫上,執行下面的命令來啟動重做應用:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM
SESSION;
該語句包含DISCONNECT FROM SESSION 選項,使得重做應用執行在後臺會話中。
檢視6.3 節,“應用重做資料到物理備資料庫”以獲得更多資訊。
第3 步 測試歸檔操作到物理備資料庫。
在這個例子中,直到日誌切換之後,重做資料到遠端備位置的傳輸才會發生。預設地,當聯機重做日誌檔案滿的時候,日誌切換髮生。要強制日誌切換,使得重做資料立即傳送,在主資料庫上使用下面的ALTER SYSTEM 語句。例如:
SQL> ALTER SYSTEM SWITCH LOGFILE;
3.2.7 檢驗物理備資料庫正確執行
一旦你建立物理備資料庫並設立重做傳輸服務,你可能需要檢查資料庫更改成功地被
從主資料庫傳送到備資料庫。要在備資料庫上看到接收到重做資料,你首先應該在備資料庫上確認現有的歸檔重做
日誌檔案,在主資料庫上強制日誌切換並歸檔一些聯機重做日誌檔案,然後再次檢查備資料庫。下面的步驟顯示如何執行這些任務。
第1 步 確認現有的歸檔重做日誌檔案。
在備資料庫上,查詢V$ARCHIVED_LOG 檢視以確認歸檔重做日誌中現有的檔案。例
如:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME
2 FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ------------------ ------------------ 8 11-JUL-02 17:50:45 11-JUL-02 17:50:53
9 11-JUL-02 17:50:53 11-JUL-02 17:50:58
10 11-JUL-02 17:50:58 11-JUL-02 17:51:03
3 rows selected.
第2 步 強制日誌切換以歸檔當前的聯機重做日誌檔案。
開啟主資料庫,執行ALTER SYSTEM SWITCH LOGFILE 語句以強制日誌切換並歸檔
當前聯機重做日誌檔案組:
SQL> ALTER SYSTEM SWITCH LOGFILE;
第3 步 在備資料庫上檢查新的重做資料已歸檔。
在備資料庫上,查詢V$ARCHIVED_LOG 檢視來檢查重做資料已收到並歸檔到被資料
庫:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME
2> FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ------------------ ------------------
8 11-JUL-02 17:50:45 11-JUL-02 17:50:53
9 11-JUL-02 17:50:53 11-JUL-02 17:50:58
10 11-JUL-02 17:50:58 11-JUL-02 17:51:03
11 11-JUL-02 17:51:03 11-JUL-02 18:34:11 4 rows selected.
歸檔的重做日誌檔案現在可以應用到物理被資料庫上了。
第4 步 檢查新歸檔的重做日誌檔案已應用。
在備資料庫上,查詢V$ARCHIVED_LOG 檢視來檢查歸檔重做日誌檔案已應用。
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG
2 ORDER BY SEQUENCE#;
SEQUENCE# APP
--------- ---
8 YES
9 YES
10 YES
11 YES
4 rows selected.
檢視5.9.1 節,“監控日誌檔案歸檔資訊”和 8.5.4 節,“監控在物理備資料庫上的日誌應用服務”來檢查重做傳輸服務和日誌應用服務正確工作。
3.3 建立後的步驟
在這個時候,物理備資料庫已執行並能夠提供最大效能級別的資料保護。下面的列表描述了你能在物理備資料庫上進行的額外準備: z 升級資料包含模式
Data Guard 配置初始化是設定為最大效能模式(預設)。檢視 5.6 節以獲得資料保護模式和如何升級或降級當前保護模式的相關資訊。
z 允許 Flashback 資料庫
Flashback 資料庫消除了在故障轉移之後重建主資料庫的需求。Flashback 資料庫允許你將資料庫返回到最近的過去時間的狀態,比傳統的基於時間點的恢復要快很多,因為它不需要從備份中恢復資料檔案,也不需要大量地應用重做資料。你能在主資料庫上、備資料庫上、或兩者都允許 Flashback 資料庫。檢視 12.4 節和 12.5 節以獲得顯示如何在 Data Guard 環境中使用 Flashback 資料庫的場景。同時,檢視 Oracle 資料庫備份和恢復高階使用者指南以獲得 Flashback 資料庫的更多相關資訊。
4 建立邏輯備資料庫
本章逐步指導你建立邏輯備資料庫。它包括下述主要主題: z 建立邏輯備資料庫的先決條件 z 建立邏輯備資料庫的逐步指導 z 建立後的步驟
同時檢視: z Oracle 資料庫管理員指南以獲得建立和使用伺服器引數檔案相關資訊
z Oracle Data Guard Broker 和 Oracle 企業管理器聯機幫助系統以獲得使用圖形使用者介面自動建立邏輯備資料庫相關資訊
4.1 建立邏輯備資料庫的先決條件
在你建立邏輯備資料庫之前,你必須首先確保正確地配置好主資料庫。表 4-1 提供了你在主資料庫上執行的為邏輯備資料庫建立準備的任務的檢查列表。每小節還有相關參考更詳細地描述任務。
表4-1 為邏輯備資料庫建立準備主資料庫
參考 |
任務 |
4.1.1 節 |
確定對於表的資料型別和儲存屬性的支援 |
4.1.2 節 |
確保在主資料庫中的錶行能被唯一標識 |
4.1.1 確定對於表的資料型別和儲存屬性的支援
在設定邏輯備資料庫之前,確保邏輯備資料庫能維護在你的主資料庫中的資料型別和表。檢視附錄 C 以獲得資料型別和儲存型別考慮的完整列表。
4.1.2 確保在主資料庫中的錶行能被唯一標識
在邏輯備資料庫中的物理組織不同於主資料庫,即使邏輯備資料庫是從主資料庫的備份複製中建立。這樣,由主資料庫生成的重做記錄中包含的ROWID 無法用於標識在邏輯備資料庫中相應的行。
Oracle 使用主鍵或唯一約束/索引補充記錄來邏輯地標識在邏輯備資料庫中被更改的行。當允許資料庫範圍的主鍵和唯一約束/索引補充記錄時,每個 UPDATE 語句也寫必要的列值到重做日誌,以在邏輯備資料庫中唯一地標識被更改的行。
z 如果表定義了主鍵,則主鍵與被更改的列一起記錄,作為 UPDATE 語句的一部分來標識更改的行。
z 如果沒有主鍵,則最短的非空唯一約束/索引與更改的行一起記錄,作為 UPDATE 語句的一部分來標識更改的行。
z 如果即沒有主鍵也沒有非空唯一約束/索引,則所有有界限大小的列作為 UPDATE 語句的一部分記錄,以標識更改的行。換一句話說,記錄所有列除了:LONG、LOB、
LONG RAW、物件型別、和集合。
Oracle 推薦你在主資料庫中新增一個主鍵或非空唯一索引,只要可能,確保 SQL 應用能有效地應用重做資料庫更新到邏輯備資料庫。
執行下面的步驟來確保SQL 應用能唯一地標識在邏輯備資料庫中被複制的每個表的行。
第1 步 在主資料庫中找到沒有唯一邏輯識別符號的表。
查詢DBA_LOGSTDBY_NOT_UNIQUE 檢視來顯示 SQL 應用可能無法唯一標識的表的列表。例如:
SQL> SELECT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_NOT_UNIQUE
2> WHERE (OWNER, TABLE_NAME) NOT IN
3> (SELECT DISTINCT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED)
4> AND BAD_COLLUMN = 'Y'
第2 步 新增一個禁用主鍵 RELY 約束
如果你的應用確保表中的行是唯一的,則你能在表上建立一個禁止的主鍵RELY 約束。這能避免在主資料庫上維護主鍵的開銷。
要在主資料庫表上建立一個禁止的RELY 約束,使用帶 RELY DISABLE 子句的 ALTER TABLE 語句。下面的例子在名為 mytab 的表上建立了一個禁止的 RELY 約束,每一行都能使用 id 和 name 列唯一標識:
SQL> ALTER TABLE mytab ADD PRIMARY KEY (id, name) RELY DISABLE;
當你指定RELY 約束時,系統將假設行是唯一的。因為你告訴系統依靠該資訊,但是在每次更改表時不會去確認,所以對於將唯一標識表中的每一行的禁止的 RELY 約束,你必須小心查詢列。如果這樣的唯一性不存在,則 SQL 應用將無法正確地維護該表。
要提高SQL 應用的效能,在邏輯備資料庫上新增一個唯一約束/索引到列上以標識行。如果新增失敗會導致 SQL 應用在表上進行的 UPDATE 或 DELETE 語句時進行全表掃描。
同時檢視:
z 檢視 Oracle 資料庫參考以獲得 DBA_LOGSTDBY_NOT_UNIQUE 檢視的相關資訊 z Oracle 資料庫 SQL 參考以獲得 ALTER TABLE 語句語法和建立 RELY 約束相關資訊
z 9.6.1 節,“建立主鍵 RELY 約束”以獲得 RELY 約束和你增加邏輯備資料庫效能所採取措施相關資訊
4.2 建立邏輯備資料庫的逐步指導
本小節描述了你建立邏輯備資料庫所執行的任務。
表-2 提供了你建立邏輯備資料庫和指定在哪個資料庫上執行每個任務的任務列表。
每小節還有相關參考更詳細地描述任務。
表-2 建立邏輯備資料庫
參考 任務 資料庫
4.2.4 節 轉換到邏輯備資料庫 備
4.2.5 節 開啟邏輯備資料庫 備
4.2.6 節 檢查邏輯備資料庫正確執行 備
4.2.1 建立物理備資料庫
你建立邏輯備資料庫,首先建立物理備資料庫然後將其轉換成邏輯備資料庫。遵循第 3 章,“建立物理備資料庫”中的指導來建立物理備資料庫。
4.2.2 在物理備資料庫上停止重做應用
你能在將新的物理備資料庫轉換成邏輯備資料庫之前在上面執行任何長度時間的重做應用。然而,在轉換到邏輯備資料庫之前,在物理備資料庫上停止重做應用。停止重做應用是必要的,可以避免應用在包含LogMiner 字典的重做之後的更改(在 4.2.3.2 節,“在重做資料中建立字典”中描述)。
要停止重做應用,在物理備資料庫上執行下面的語句。如果資料庫是包含多個例項的
RAC 資料庫,則你在執行這個命令之前必須首先停止除了一個以外的所有 RAC 例項:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
4.2.3 準備主資料庫以支援邏輯備資料庫
本小節包含下面主題: z 為角色轉換準備主資料庫 z 在重做資料中建立字典
4.2.3.1 為角色轉換準備主資料庫
在3.1.4 節,“設定主資料庫初始化引數”中,你設定多個備角色初始化引數以在主資料庫轉換到物理備角色時起作用。如果你計劃轉換主資料庫到邏輯備角色,則你還必須在主資料庫上包含LOG_ARCHIVE_DEST_3 目的地,如例子 4-1 中所示,使得在角色轉換之後不需要更改引數。這個引數只有在主資料庫轉換到備角色時才起作用。
例子4-1 主資料庫:邏輯備角色初始化引數
LOG_ARCHIVE_DEST_3=
'LOCATION=/arch2/chicago/
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_STATE_3=ENABLE
要動態設定LOG_ARCHIVE_DEST_3 引數,使用 SQL ALTER SYSTEM SET 語句幷包含 SCOPE=BOTH 子句,使得更改立即起作用並在資料庫關閉並再次啟動後還保持。
下面的表描述了由例子 4-1 中所示初始化引數定義的歸檔程式。
當 chicago 資料庫執行在主角色 |
當 chicago 資料庫執行在邏輯備角色 |
LOG_ARCHIVE_DEST_3 被忽略;LOG_ARCHIVE_DEST_3 只有在 chicago 執行在被角色時才有效。 |
歸檔從主資料庫接收到的重做資料到 /arch2/chicago/上的本地歸檔重做日誌檔案。 |
LogMiner 必須建立到重做資料中,使得 SQL 應用的 LogMiner 元件能正確地解釋它在重做中看到的更改。作為建立 LogMiner Multiversioned Data Dictionary 的一部分,追加的記錄自動設定以記錄主鍵和唯一約束/索引列。追加的記錄資訊確保每次更新包含足夠的資訊以邏輯地標識由語句更改的每一行。
要建立LogMiner 字典,執行下面語句:
SQL> EXECUTE DBMS_LOGSTDBY.BUILD;
DBMS_LOGSTDBY.BUILD 過程等待所有現有的事務完成。在主資料庫上執行的長時間執行的事務將會影響這條命令的完成時間。
DBMS_LOGSTDBY.BUILD 過程使用 Flashback 查詢來獲得資料字典的一致性快照,然後資料字典記錄到重做流中。Oracle 推薦在主和邏輯備資料庫上設定 UNDO_RETENTION 初始化引數都為 3600。
同時檢視:
在 Oracle 資料庫 PL/SQL 包和型別參考中的 DBMS_LOGSTDBY.BUILD PL/SQL 包和在
Oracle 資料庫參考中的 UNDO_RETENTION 初始化引數
4.2.4 轉換到邏輯備資料庫
本小節描述瞭如何準備物理備資料庫來轉換到邏輯備資料庫。包含下面主題: z 轉換到邏輯備資料庫 z 建立新的口令檔案
z 為邏輯備資料庫調整初始化引數
4.2.4.1 轉換到邏輯備資料庫
重做日誌包含轉換你的物理備資料庫到邏輯備資料庫必要的資訊。要繼續應用重做資料到物理備資料庫指導其準備好轉換為邏輯備資料庫,執行下面的SQL 語句:
SQL> ALTER DATABASE RECOVER TO LOGICAL STANDBY db_name;
對於db_name,指定一個資料庫名字以標識新的邏輯備資料庫。如果你在執行這條語句的時候使用伺服器引數檔案(spfile),則資料庫會使用新的邏輯備資料庫相關的適當資訊更
新該檔案。如果你沒有使用spfile,則資料庫會發出一條資訊提示你在關閉資料庫後設定
DB_NAME 引數的名字。
該語句等待應用重做資料,直到在日誌檔案中找到LogMiner 字典。這可能會花費幾分鐘,依賴於在 4.2.3.2 節,“在重做資料中建立字典”中生成的重做多久才能傳送到備資料庫,以及需要應用多少重做資料庫。如果字典建立沒能在主資料庫上成功執行,這條命令將永遠不會完成。你能透過在另外的 SQL 會話中執行 ALTER DATABASE RECOVER MANANGED
STANDBY DATABASE CANCEL 語句來取消該 SQL 語句。
4.2.4.2 建立新的口令檔案
因為轉換過程對於邏輯備資料庫更改了資料庫名字(原先以DB_NAME 初始化引數設定),所以你必須重建口令檔案。檢視 Oracle 資料庫管理員指南以獲得建立安全認證方案上的更多資訊。
4.2.4.3 為邏輯備資料庫調整初始化引數在邏輯備資料庫上,關閉例項並執行STARTUP MOUNT 語句來啟動並安裝資料庫。不
要開啟資料庫;它對於使用者訪問應該保持關閉,直到後面的建立過程。例如:
SQL> SHUTDOWN;
SQL> STARTUP MOUNT;
你需要修改LOG_ARCHIVE_DEST_n 引數,因為不像物理備資料庫,邏輯備資料庫是
開啟的資料庫,生成重做資料並有多個日誌檔案(聯機重做日誌檔案,歸檔重做日誌檔案,和備重做日誌檔案)。指定分開的本地目的地是一個很好的習慣: z 儲存由邏輯備資料庫生成的重做資料的歸檔重做日誌檔案。在例子 4-2 中,這配置為 LOG_ARCHIVE_DEST_1=LOCATION=/arch1/boston 目的地。
z 儲存從主資料庫接收到的重做資料的歸檔重做日誌檔案。在例子 4-2 中,這配置為 LOG_ARCHIVE_DEST_3=LOCATION=/arch2/boston 目的地。
例子4-2 顯示了為邏輯備資料庫修改的初始化引數更改。所示的引數對於 boston 邏輯
備資料庫是有效的,不管其是執行在主還是備資料庫角色。
例子4-2 為邏輯備資料庫修改初始化引數
LOG_ARCHIVE_DEST_1=
'LOCATION=/arch1/boston/
VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_2=
'SERVICE=chicago LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_3=
'LOCATION=/arch2/boston/
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_DEST_STATE_3=ENABLE
下面的表描述了由例子 4-2 中所示的初始化引數定義的歸檔過程。
|
當 boston 資料庫執行在主角色時 |
當 boston 資料庫執行在邏輯備角色時 |
LOG_ARCHIVE_DEST_1 |
指導由主資料庫生成的重做資料從 本地聯機重做日誌檔案到 /arch1/boston/中的本地歸檔重做日誌檔案的歸檔 |
指導由邏輯備資料庫生成的重做資料 從本地聯機重做日誌檔案到 /arch1/boston/中的本地歸檔重做日誌檔案的歸檔 |
LOG_ARCHIVE_DEST_2 |
指導重做資料到遠端邏輯備資料庫 chicago 的傳輸。 |
被忽略;LOG_ARCHIVE_DEST_2 只有在 boston 執行在主角色時才有效。 |
LOG_ARCHIVE_DEST_3 |
被忽略;LOG_ARCHIVE_DEST_3 指導從主資料庫接收到的重做資料到 只有在 boston 執行在被角色時才有 /arch2/boston/中的本地歸檔重做日誌文效。 件的歸檔。 |
注:
一旦物理備資料庫轉換到邏輯備資料庫,DB_FILE_NAME_CONVERT 初始化引數就無法兌現了。如果必要,你應該註冊一個忽略處理器,透過轉換主資料庫資料檔案的名字到備資料庫資料檔案路徑名,給 SQL 應用提供一個替代的 DDL 串來執行。檢視 Oracle 資料庫
PL/SQL 包和型別參考中的 DBMS_LOGSTDBY 包以獲得更多的 SKIP 過程相關資訊。
4.2.5 開啟邏輯備資料庫
新的資料庫與你的主資料庫在邏輯上是一樣的,但是它在事務上與主資料庫不一致,因而對於恢復操作是不相容的。
要開啟新的邏輯備資料庫,你必須透過執行下面的語句以RESETLOGS 選項來開啟:
SQL> ALTER DATABASE OPEN RESETLOGS;
因為這是資料庫第一次開啟,所以資料的全域性名自動調整以符合新的DB_NAME 初始化引數。
執行下面的語句來開始應用重做資料庫到邏輯備資料庫。例如:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
4.2.6 檢查邏輯備資料庫正確執行
為了幫助檢查邏輯備資料庫正確執行,檢視下面小節: z 5.9.1 節,“監控日誌檔案歸檔資訊”
z 6.4.3 節,“在邏輯備資料庫上監控 SQL 應用” z 第 9 章,“管理邏輯備資料庫”
4.3 建立後的步驟
在這個時候,邏輯備資料庫已經執行並能提供最大效能級別的資料保護。下面的列表描述了你能在邏輯備資料庫上進行的額外的準備: z 升級資料保護模式
Data Guard 配置初始設定為最大效能模式(預設)。檢視 5.6 節,“設定資料保護模式”以獲得資料保護模式和如何升級或降級當前保護模式相關的資訊。
z 允許 Flashback 資料庫
Flashback 資料庫消除了在故障轉移之後重建主資料庫的需求。Flashback 資料庫允許你將資料庫返回到最近的過去時間的狀態,比傳統的基於時間點的恢復要快很多,因為它不需要從備份中恢復資料檔案,也不需要大量地應用重做資料。你能在主資料庫上、備資料庫上、或兩者都允許 Flashback 資料庫。檢視 12.4 節,“在故障轉移後使
用Flashback 資料庫”和 12.5 節,“在執行 open resetlogs 語句後使用 Flashback 資料庫” 以獲得顯示如何在 Data Guard 環境中使用 Flashback 資料庫的場景。同時,檢視 Oracle 資料庫備份和恢復高階使用者指南以獲得 Flashback 資料庫的更多相關資訊。
5 重做傳輸服務
本章描述瞭如何配置重做傳輸服務從一個生產資料庫傳送重做到一個或更多目的地。
它包含下面主題: z 重做傳輸服務介紹 z 傳送重做資料到哪裡 z 如何傳送重做資料 z 應該何時傳送重做資料 z 如果出現錯誤如何應對 z 設定資料保護模式 z 管理日誌檔案 z 管理歸檔中斷 z 核查
5.1 重做傳輸服務介紹
重做傳輸服務控制從資料庫目的地到一個或更多目的地的重做資料的自動化轉移。重做傳輸服務也管理解決由於網路故障導致歸檔重做日誌檔案中斷的過程。
重做傳輸服務能傳送重做資料到本地和遠端目的地。遠端目的地能包括任何下面型別:物理和邏輯備資料庫,歸檔重做日誌檔案資料庫,Oracle Change Data Capture 分段運輸資料庫,和 Oracle Streams 下游捕獲資料庫。
圖-1 顯示了一個簡單的 Data Guard 配置,重做傳輸服務歸檔重做資料到在主資料庫上的本地目的地,同時也傳送到在遠端備資料庫目的地上的歸檔重做日誌檔案或備重做日誌檔案。
圖5-1 傳送重做資料
z 如何傳送重做資料 z 設定閃回恢復區域
5.2.1 目的地型別
重做傳輸服務支援多種型別的目的地: z Oracle Data Guard 備資料庫
備資料庫目的地既能是物理備資料庫也能是邏輯備資料庫。1.1.2 節討論了備資料庫。
z 歸檔重做日誌檔案資料庫
這種型別目的地允許離站點歸檔重做資料。歸檔日誌檔案資料庫是使用物理備控制檔案、啟動例項、並安裝資料庫建立的。這個資料庫不包含資料檔案並且不能用於切換或故障轉移。這種替代方法作為短時間內,可能是一天,保留歸檔重做日誌的方法是很有用的,然後日誌檔案能夠被刪除,。這避免了另外全配置的備資料庫的絕大多數儲存和處理過程代價。
Oracle 推薦使用歸檔重做日誌檔案資料庫作為歸檔重做日誌檔案的臨時儲存。這能透過在執行於最大效能模式的 Data Guard 配置中為基於歸檔的傳輸(使用
LOG_ARCHIVE_DEST_n 引數上的 ARCH 屬性)配置檔案資料庫目的地來完成。對於無資料丟失的環境,你應該使用全配置的備資料庫,在 Data Guard 配置中使用 LGWR、
SYNC、和 AFFIRM 傳輸設定以及執行在最大保護模式或最大可用性模式。
z Oracle Streams 實時下游捕獲資料庫
這種目的地型別允許Oracle Streams 在遠端下游資料庫上配置一個捕獲程式。
Streams 下游捕獲程式使用重做傳輸服務來傳送重做資料到下游資料庫,在那裡 Streams 捕獲程式捕獲在遠端目的地上的備重做日誌檔案和歸檔重做日誌檔案中的更改。檢視
Oracle Streams 概念和管理以獲得更多資訊。
z Oracle Change Data Capture 分段運輸資料庫
這種目的地型別遠端支援在分段運輸資料庫上的Oracle Change Data Capture
Asynchronous AutoLog 配置。使用重做傳輸服務將重做資料從源資料庫複製到分段運輸資料庫上。Change Data Capture 配置捕獲從重做資料中的更改。檢視 Oracle 資料庫資料倉儲指南以獲得更多資訊。
為了討論目的,本指南稱生產資料庫為主資料庫,歸檔目的地為備資料庫(如1.1 節中定義)。如果你使用 Oracle Change Data Capture,分別將術語源和分段運輸資料庫替換為主和備資料庫。如果你使用 Oracle Streams,分別將術語源和下游捕獲資料庫替換為主和備資料庫。
5.2.2 使用 LOG_ARCHIVE_DEST_n 引數配置目的地
LOG_ARCHIVE_DEST_n 初始化引數最多定義 10(n=1,2,3,…10)個目的地,每個必須指定 LOCATION 或 SERVICE 屬性來指定歸檔重做資料到哪裡。
LOCATION和SERVICE屬性描述了本地磁碟位置或代表一個重做傳輸服務將會傳送重做資料的備目的地的Oracle網路服務名。使用SERVICE屬性指定遠端目的地允許Data Guard 維護一個主資料庫的事務一致性遠端複製,以用於災難恢復。
對於你定義的每個LOG_ARCHIVE_DEST_n 初始化引數,指定相應的
LOG_ARCHIVE_DEST_STATE_n 引數。LOG_ARCHIVE_DEST_STATE_n(n 是從 1 到 10 的整數)初始化引數指定相應的目的地當前是開(允許)還是關(禁止)。表 5-1 描述了
LOG_ARCHIVE_DEST_STATE_n 引數屬性。
表5-1 LOG_ARCHIVE_DEST_STATE_n 初始化引數屬性
屬性 |
描述 |
ENABLE |
重做傳輸服務能傳送重做資料到這個目的地。這是預設值。 |
DEFER |
重做傳輸服務將不會傳送重做資料到這個目的地。這是有效但沒有使用的目的地。 |
ALTERNATE |
這個目的地沒有被允許,但是如果到其相關的目的地的連線故障了則它將變成允許。 |
RESET |
與 DEFER 的功能相同,但是如果以前發生故障則為目的地清理任何錯誤資訊。 |
例子5-1 提供了使用 LOCATION 屬性的一個目的地的例子。
例子5-1 指定本地歸檔目的地
LOG_ARCHIVE_DEST_1='LOCATION=/arch1/chicago/'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
圖5-2 顯示了這個簡單的配置,包含單個本地目的地,看起來是什麼樣的。日誌寫程式寫重做資料到聯機重做日誌檔案。當每個聯機重做日誌寫滿時,發生日誌切換並且 ARCn 程式歸檔寫滿的聯機重做日誌檔案到歸檔重做日誌檔案。寫滿的聯機重做日誌檔案現在又可以重用了。
圖5-2 當沒有備資料庫時的主資料庫歸檔
很重要的一點是在圖 5-2 中所示的配置沒有包括備資料庫,因而不提供災難恢復保護。要使得這個簡單配置變為提供災難恢復的 Data Guard 配置,透過指定 SERVICE 屬性在遠端目的地新增一個備資料庫。
例子5-2 顯示了允許重做傳輸服務在本地目的地 chicago 歸檔聯機重做日誌並傳送重做資料到使用 Oracle 網路服務名 boston 遠端備資料庫的初始化引數。該例子對於所有的其它 LOG_ARCHIVE_DEST_n 屬性使用了預設值。
例子5-2 指定遠端歸檔目的地
LOG_ARCHIVE_DEST_1='LOCATION=/arch1/chicago/'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_2='SERVICE=boston'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
這些初始化引數設定了使用歸檔(ARCn)程式歸檔本地和遠端目的地的 Data Guard 配
置。這種配置提供了最大效能級別的資料保護。
雖然你能僅僅透過在LOG_ARCHIVE_DEST_n 引數上指定 LOCATION 或 SERVICE 屬
性建立Data Guard 配置,但是你也能選擇指定更多的屬性來進一步定義每個目的地的行為。第 14 章提供了所有 LOG_ARCHIVE_DEST_n 引數屬性的參考資訊。
5.2.2.1 更改目的地屬性你能使用ALTER SYSTEM SET 語句動態更新 LOG_ARCHIVE_DEST_n 和 LOG_ARCHIVE_DEST_STATE_n 引數的大多數屬性。
更改在主資料庫上的下一次日誌切換生效。例如,要延遲日誌傳輸服務傳送重做資料
到名為boston 的遠端備資料庫,在主資料庫上執行下面的語句:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=boston
2> VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)';
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER;
5.2.2.2 使用 V$ARCHIVE_DEST 檢視屬性查詢V$ARCHIVE_DEST 檢視以檢視 LOG_ARCHIVE_DEST_n 初始化引數的當前設
置。
5.2.3 設定閃回恢復區
Oracle 資料庫允許你配置一塊磁碟區域稱為閃回恢復區,是一個目錄或Oracle 儲存管理磁碟,用於恢復相關檔案的預設儲存區域。
要配置閃回恢復區,使用DB_RECOVERY_FILE_DEST 初始化引數。如果你建立一個
閃回恢復區但沒有設定任何其它的本地歸檔目的地,則LOG_ARCHIVE_DEST_10 被隱式地設定為 USE_DB_RECOVERY_FILE_DEST(意味著歸檔重做日誌檔案將會被設定到閃回恢復區)。(檢視 Oracle 資料庫備份和恢復基礎來配置閃回恢復區,以及 Oracle 資料庫管理員指南以獲得 Oracle 儲存管理器和 Oracle 管理檔案更多相關資訊。)
注: 儲存在閃回恢復區的歸檔重做日誌檔案的檔名是由 Oracle 管理檔案(OMF)自動生成的;這些檔名不是基於由 LOG_ARCHIVE_FORMAT 初始化引數指定的格式。
本小節包含下述主題:
z 使用 LOG_ARCHIVE_DEST_10 目的地 z 使用其它 LOG_ARCHIVE_DEST_n 目的地 z 使用 STANDBY_ARCHIVE_DEST 目的地 z 在主和備資料之間共享閃回恢復區
注: 主資料庫不能寫重做資料到邏輯備資料庫的閃回恢復區。
檢視Oracle 資料庫備份和恢復基礎來配置閃回恢復區,以及 10.3.4 節以獲得在閃回恢
復區設定歸檔重做日誌檔案的刪除策略。
5.2.3.1 使用 LOG_ARCHIVE_DEST_10 目的地如果已經配置了閃回恢復區並且沒有定義本地目的地,Data Guard 隱式使用 LOG_ARCHIVE_DEST_10 目的地作為閃回恢復區。
當使用LOG_ARCHIVE_DEST_10 引數時,Data Guard 自動使用所有
LOG_ARCHIVE_DEST_10 屬性的預設值。要覆蓋預設值,你能透過顯式指定 LOG_ARCHIVE_DEST_10 引數動態設定大多數屬性。例如,下面的 ALTER SYSTEM SET 語句在 LOG_ARCHIVE_DEST_10 初始化引數上指定了多個屬性。
SQL> ALTER SYSTEM SET
LOG_ARCHIVE_DEST_10='LOCATION=USE_DB_RECOVERY_FILE_DEST LGWR
MANDATORY REOPEN=5 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)'
當設定LOG_ARCHIVE_DEST_n 屬性時,LOG_ARCHIVE_DEST_n 引數的 TEMPLATE 屬性將會覆蓋閃回恢復區的所有其它配置,歸檔重做日誌檔案將會使用由 TEMPLATE 屬性指定的目錄和檔名。
5.2.3.2 使用其它 LOG_ARCHIVE_DEST_n 目的地你能顯式設定一個或更多LOG_ARCHIVE_DEST_n 目的地來指向閃回恢復區。例如,
你能選擇地: z 配置 LOG_ARCHIVE_DEST_10 以外的目的地例如,現有的 Data Guard 配置可能已經使用 LOG_ARCHIVE_DEST_10 目的地用
作其它目的,或者你可能想釋放LOG_ARCHIVE_DEST_10 目的地用作其它用途。要配置其它歸檔目的地以指向閃回恢復區,你必須指定
LOCATION=USE_DB_RECOVERY_FILE_DEST 屬性來定義新的目的地。例如: SQL> ALTER SYSTEM SET
LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST ARCH
MANDATORY REOPEN=5 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)'
隱式的配置(使用LOG_ARCHIVE_DEST_10 來使用閃回恢復區)將會被清除。 z 配置 LOG_ARCHIVE_DEST_10 以外的目的地,用於角色轉化之後例如,你能配置一個目的地,當資料庫操作於備角色時對於備重做日誌歸檔有效,
另一個目的地,當資料庫操作於主角色時對於聯機重做日誌歸檔有效。
要配置LOG_ARCHIVE_DEST_10 以外的 LOG_ARCHIVE_DEST_n 目的地,你必須顯式指定兩個目的地:
LOG_ARCHIVE_DEST_9='LOCATION=USE_DB_RECOVERY_FILE_DEST ARCH
MANDATORY REOPEN=5 VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)'
LOG_ARCHIVE_DEST_10='LOCATION=USE_DB_RECOVERY_FILE_DEST ARCH
MANDATORY REOPEN=5 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)'
5.2.3.3 使用 STANDBY_ARCHIVE_DEST 目的地在物理備資料庫上,你能定義STANDBY_ARCHIVE_DEST 引數來指向閃回恢復區。
例如:
STANDBY_ARCHIVE_DEST='LOCATION=USE_DB_RECOVERY_FILE_DEST'
注:
由在邏輯備資料庫(SQL 應用)上的 STANDBY_ARCHIVE_DEST 引數指向的閃回恢復區是被忽略的。
5.2.3.4 在主和備資料庫之間共享閃回恢復區你能在資料庫之間共享閃回恢復區,每個資料庫共享的閃回恢復區有唯一的資料庫名,由DB_UNIQUE_NAME 初始化引數指定。下面的例子顯式瞭如何在主和備資料庫上指定初始化引數,將會在/arch/oradata 位置共
享閃回恢復區。雖然DB_UNIQUE_NAME 引數沒有在例子 5-3 中指定,它預設為 PAYROLL,這是為 DB_NAME 初始化引數指定的名字。例子5-3 對於共享恢復區的主資料庫初始化引數
DB_NAME=PAYROLL
LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST'
DB_RECOVERY_FILE_DEST='/arch/oradata' DB_RECOVERY_FILE_DEST_SIZE=20G
例子5-4 對於共享恢復區的備資料庫初始化引數
DB_NAME=PAYROLL
DB_UNIQUE_NAME=boston
LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST'
STANDBY_ARCHIVE_DEST='LOCATION=USE_DB_RECOVERY_FILE_DEST'
DB_RECOVERY_FILE_DEST='/arch/oradata' DB_RECOVERY_FILE_DEST_SIZE=5G
檢視Oracle 資料庫備份和恢復高階使用者指南以獲得在多個資料庫中共享閃回恢復區的
更多相關資訊。
5.3 如何傳送重做資料
在主資料庫上,Oracle Data Guard 使用歸檔程式(ARCn)或日誌寫程式(LGWR)來收集事務重做資料並傳送到備目的地。雖然你不能同時使用歸檔和日誌寫程式來傳送重做資料到同一目的地,但是你能選擇為一些目的地使用日誌寫程式,而使用歸檔程式傳送重做資料到另外一些目的地。本節包含下述主題:
z 使用歸檔程式(ARCn)來歸檔重做資料 z 使用日誌寫程式(LGWR)來歸檔重做資料 z 提供安全重做資料傳輸
在網路中斷之後,為了自動解決中斷和重新同步,Data Guard 也使用取歸檔日誌(FAL)客戶端和伺服器來傳送歸檔重做日誌檔案到備目的地。FAL程式和中斷解決在5.8節中討論。
5.3.1 使用歸檔程式(ARCn)來歸檔重做資料
預設地,重做傳輸服務在主資料庫上使用ARCn 程式來歸檔聯機重做日誌檔案。在 Data Guard 配置中,ARCn 歸檔程式只支援最大效能級別的資料保護。你必須使用 LGWR 程式來傳送重做資料到操作在其它保護模式中的備位置。(檢視 5.6 節以獲得 Data Guard 資料保護模式的更多相關資訊。)
下面小節討論了這些主題: z 控制 ARCn 歸檔行為的初始化引數 z ARCn 歸檔過程
5.3.1.1 控制 ARCn 歸檔行為的初始化引數
下面的描述講述瞭如何使用LOG_ARCHIVE_DEST_n 和
LOG_ARCHIVE_MAX_PROCESSES 初始化引數。
允許ARCn 程式歸檔到本地或遠端目的地你在初始化引數LOG_ARCHIVE_DEST_n 上指定屬性來控制重做資料從主資料庫自動傳遞到其它目的地。因為 ARCn 歸檔處理是預設的歸檔行為,所以在
LOG_ARCHIVE_DEST_n 引數上指定 ARCH 屬性是可選的。然而,你必須指定 LOCATION 屬性以歸檔到本地目的地或 SERVICE 屬性以遠端歸檔(如 5.2.2 節中描述)。
指定要呼叫的ARCn 程式的數目LOG_ARCHIVE_MAX_PROCESSES 初始化引數指定了 ARCn 程式的最大數目。預設地,當主資料庫例項啟動時呼叫 4 個歸檔程式,並且 Oracle 資料庫動態調整程式的數目以平衡歸檔工作負載。因此,歸檔程式的實際數目可能隨時變化。
如果你預期到繁重的歸檔工作負載,你能透過設定初始化引數
LOG_ARCHIVE_MAX_PROCESSES 增加歸檔程式的最大數目,最多 30。這個初始化引數
是動態的,可以使用ALTER SYSTEM 命令來更改,增加或減少歸檔程式的最大數目。例如:
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES = 20;
5.3.1.2 ARCn 歸檔過程
圖 5-3 顯示了在 Data Guard 配置中的歸檔出來的一個例子,主資料庫位於 Chicago,一個物理備資料庫位於 Boston。
當在主資料庫上出現日誌切換時發生歸檔:
z 在主資料庫上,在 ARC0 程式成功歸檔本地聯機重做日誌到本地目的地
(LOG_ARCHIVE_DEST_1)後,ARC1 程式從本地歸檔重做日誌檔案(替代聯機重做日誌檔案)傳送重做到遠端備目的地(LOG_ARCHIVE_DEST_2)。
z 在遠端目的地,遠端檔案服務程式(RFS)將從備重做日誌檔案會依次寫重做資料到歸檔重做日誌檔案。日誌應用服務使用重做引用(MRP 程式注1)或 SQL 應用(LSP 程式注2)來應用重做到備資料庫。
因為聯機重做日誌檔案是首先本地歸檔的,所以,如果ARCn 可能同時歸檔到備資料庫和本地目的地,LGWR 程式重用聯機重做日誌檔案比它也要早很多。
如圖 5-3 所示,你需要至少 2 個 ARCn 程式來分離本地歸檔與遠端歸檔。這能透過設定 LOG_ARCHIVE_MAX_PROCESSES(預設設定是 4,但是最大值是 30)初始化引數來完成。
圖5-3 在歸檔到遠端目的地之前歸檔到本地目的地
在預設的ARCn歸檔過程將本地歸檔與遠端歸檔分離,所以節點可能有這樣的策略,在備份主資料庫上的歸檔重做日誌檔案之後立即將其刪除,則必須確保備目的地在主資料庫上刪除歸檔重做日誌檔案之前接收到相應的重做資料。你能查詢 V$ARCHIVED_LOG 檢視來檢查備目的地是否接收到重做資料。
5.3.2 使用日誌寫程式(LGWR)來歸檔重做資料
你能選擇允許重做傳輸服務使用LGWR 程式來傳送重做資料到遠端目的地。
使用LGWR 程式不同與 ARCn 過程(在 5.3 節中描述),因為代替等待聯機重做日誌在主資料庫上切換然後突然寫整個歸檔重做日誌到遠端目的地,LGWR 程式在備節點上選擇一個備重做日誌檔案,反映主資料庫的當前聯機重做日誌檔案的日誌序列號(和大小)。然後,只要重做在主資料庫上生成,它也傳送到遠端目的地。到遠端目的地的傳輸可以是同步的或非同步的,基於在 LOG_ARCHIVE_DEST_n 引數上設定 SYNC 或 ASYNC 屬性。對於 Data Guard 配置中的最大保護和最大可用性模式,同步 LGWR 過程是必需的。(檢視 5.6 節以獲得 Data Guard 資料保護模式的相關資訊。)本小節包含下述主題: z LGWR 歸檔過程相關的 LOG_ARCHIVE_DEST_n 屬性 z LGWR SYNC 歸檔過程
z LGWR ASYNC 歸檔過程
5.3.2.1 LGWR 歸檔過程相關的 LOG_ARCHIVE_DEST_n 屬性下面小節描述了LGWR、SYNC、和 ASYNC 屬性。
允許重做傳輸服務使用LGWR 程式你必須指定在LOG_ARCHIVE_DEST_n 引數上的 LGWR 和 SERVICE 屬性以允許日誌傳輸服務使用 LGWR 程式來傳送重做資料到遠端歸檔目的地。
指定非同步或同步網路傳輸LGWR 程式在傳輸重做資料到遠端目的地的同時同步寫本地聯機重做日誌檔案:
z SYNC 屬性同步執行所有的網路 I/O,與每次向聯機重做日誌檔案寫操作協作,並等待網路 I/O 完成。5.3.2.2 節顯示了在 Data Guard 配置中的同步網路傳輸的例子。
這是預設網路傳輸設定。
z ASYNC 屬性非同步執行所有網路 I/O,控制立即回到執行應用或使用者,而不用等待網路 I/O 完成。5.3.2.3 節顯示了在 Data Guard 配置中的非同步網路傳輸的例子。
注:
如果你配置一個目的地來使用 LGWR 程式,但是由於某些原因 LGWR 程式變得無法歸
檔到目的地了,則重做傳輸將會回覆到使用ARCn 程式來完成歸檔操作。
5.3.2.2 LGWR SYNC 歸檔過程
例子5-5 顯示了為同步網路傳輸配置 LGWR 程式的主角色 LOG_ARCHIVE_DEST_n 引數。
例子5-5 LGWR 同步歸檔相關的初始化引數
LOG_ARCHIVE_DEST_1='LOCATION=/arch1/chicago'
LOG_ARCHIVE_DEST_2='SERVICE=boston LGWR SYNC NET_TIMEOUT=30'
LOG_ARCHIVE_DEST_STATE_1=ENABLE LOG_ARCHIVE_DEST_STATE_2=ENABLE
在LOG_ARCHIVE_DEST_n 引數上指定 SYNC 屬性是可選的,因為這是 LGWR 歸檔過程的預設值。推薦使用 NET_TIMEOUT 屬性,因為它控制 LGWR 程式在中斷網路連線之前等待網路服務程式狀態的時間長短。如果 NET_TIMEOUT 秒還沒有響應,則 LGWR 程式就返回錯誤資訊。
圖5-4顯示了使用LGWR程式在寫重做資料到主資料庫上的聯機重做日誌檔案的同時傳送重做資料到備系統的 Data Guard 配置。
z 在主資料庫上,LGWR 程式提交重做資料到一個或多個網路服務(LNSn)程式,該程式然後並行發起網路 I/O 到多個遠端目的地。主資料庫上的事務不會提交,直到恢復事務所需的重做資料被所有 LGWR SYNC 目的地接收到。
z 在備系統上,遠端檔案服務(RFS)透過網路從 LGWR 程式接收重做資料,並寫重做資料到備重做日誌檔案。
在主資料庫上的日誌切換觸發在備資料庫上的日誌切換,導致備資料庫上的ARCn 程式歸檔備重做日誌檔案到備資料庫上的歸檔重做日誌檔案。然後,重做應用(MRP 程式)或 SQL 應用(LSP 程式)應用重做資料到備資料庫。如果允許實時應用,Data Guard 在當前備重做日誌檔案由 RFS 程式寫滿的同時直接從其恢復重做資料。
圖5-4 LGWR SYNC 歸檔到使用備重做日誌檔案的遠端目的地
5.3.2.3 LGWR ASYNC 歸檔過程例子5-6 顯示了為非同步網路傳輸配置 LGWR 程式的主角色 LOG_ARCHIVE_DEST_n
引數。
例子5-6 LGWR 非同步歸檔相關的初始化引數
LOG_ARCHIVE_DEST_1='LOCATION=/arch1/chicago'
LOG_ARCHIVE_DEST_2='SERVICE=boston LGWR ASYNC'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
圖5-5 顯示了 LNSn 程式從聯機重做日誌檔案收集重做資料並透過 Oracle 網路傳送到
備資料上的RFS 程式。
當指定了LGWR 和 ASYNC 屬性,日誌寫程式寫到本地聯機重做日誌檔案,當網路服
務(LNSn)程式(每個目的地一個)非同步傳送重做到遠端目的地。LGWR 程式繼續處理下一個請求而不用等待 LNS 網路 I/O 完成。如果重做傳輸服務傳送重做資料到多個遠端目的地,LNSn 程式(每個目的地一個)並
行發起到所有目的地的網路I/O。
當一個聯機重做日誌檔案寫滿了,如通常一樣,就出現日誌切換並且歸檔程式本地歸
檔日誌檔案。
注:
從 Oracle 資料庫 10g 版本 10.2 開始,在同時配置 LGWR 和 ASYNC 屬性的
LOG_ARCHIVE_DEST_n 目的地上,沒有必要指定 NET_TIMEOUT 屬性。這是因為在版本 10.2 中日誌寫程式永遠不會為任何原因等待 LNSn。因此,不需要指定 NET_TIMOUT 屬性。
圖5-5 使用網路服務(LNSn)程式的LGWR ASYNC 歸檔
不要使用 LOG_ARCHIVE_DEST 或 LOG_ARCHIVE_DUPLEX_DEST 初始化引數來指定閃回恢復區目的地。
5.3.3 提供安全重做資料傳輸
Data Guard 提供了一個安全的環境並防止重做資料在傳遞到備資料時發生可能的篡改。
重做傳輸服務使用認證的網路會話來傳遞重做資料。這些會話使用包含在口令檔案中的SYS 使用者口令來認證。在 Data Guard 配置中的所有資料庫都必須使用口令檔案,並且包含在這個口令檔案中的 SYS 口令在所有系統上都必須相同。這種認證即使在沒有安裝 Oracle 高階安全的時候也能執行,以在運輸重做的時候提供一定級別的安全。
注:
要進一步保護重做(例如,要對跨網路的重做運輸進行加密重做或計算完整性校驗和,不允許在網路上的重做篡改),Oracle 推薦你安裝和使用 Oracle 高階安全。檢視 Oracle 資料庫高階安全管理員指南。
在主資料庫和每個備資料庫上執行下面的步驟:
1. 在主和所有備資料庫上建立口令檔案(使用 orapwd 工具)。例如:
ORAPWD FILE=orapw PASSWORD=mypassword ENTRIES=10
這個例子建立了有10 個條目的口令檔案,在那裡 SYS 的口令是 mypassword。為了成功傳輸重做資料,確保你對於每個主和備資料庫設定同樣的 SYS 使用者帳戶口令。 2. 設定 REMOTE_LOGIN_PASSWORDFILE 初始化引數為 EXCLUSIVE 或 SHARED,
以允許Oracle 檢查口令檔案並指定多少資料庫能使用該口令檔案。例如:
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
檢視Oracle 資料庫參考以獲得這個引數的更多相關資訊。
5.4 應該何時傳送重做資料
本節包含下述主題: z 使用 VALID_FOR 屬性指定基於角色的目的地 z 為主和備資料庫指定唯一名字
5.4.1 使用 VALID_FOR 屬性指定基於角色的目的地
VALID_FOR 屬性允許你在一個伺服器引數檔案(SPFILE)中同時為主和備資料庫角色配置目的地屬性,使得你的 Data Guard 配置在角色轉換之後能正確操作。這透過消除在角色轉換之後允許和禁止角色相關引數檔案的需求,簡化了切換和故障轉移。
當你指定LOG_ARCHIVE_DEST_n 引數的 VALID_FOR 屬性,它確定重做傳輸服務何時能傳送重做資料到基於下述要素的目的地: z 資料庫是否當前執行在主或備角色
z 是否需要聯機重做日誌檔案,備重做資料檔案,或者兩者的歸檔,依賴於資料庫的當前角色
要為每個LOG_ARCHIVE_DEST_n 目的地配置這些要素,你使用一對關鍵詞指定這個屬性:VALID_FOR=(redo_log_type, database_role)。redo_log_type 關鍵詞標識了歸檔目的地對於下述是有效的:ONLINE_LOGFILE、STANDBY_LOGFILE、或 ALL_LOGFILES。
database_role 關鍵詞標識了當前資料庫必須處於的角色,處於這些角色,目的地才是有效的:
PRIMARY_ROLE、STANDBY_ROLE、或 ALL_ROLES。
如果你沒有為目的地指定VALID_FOR 屬性,預設地,歸檔聯機重做日誌和備重做日誌對於目的地是允許的,不管資料庫是什麼角色。這種預設行為等同於在 VALID_FOR 屬性上設定(ALL_LOGFILES, ALL_ROLES)關鍵詞對。例如:
LOG_ARCHIVE_DEST_1='LOCATION=/ARCH1/CHICAGO/
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)'
雖然(ALL_LOGFILES, ALL_ROLES)關鍵詞對是預設值,但是不推薦對於每個目的地。例如,邏輯備資料庫,不像物理備資料庫,是生成重做資料並且有多種日誌檔案(聯機重做日誌檔案、歸檔重做日誌檔案、和備重做日誌檔案)的開啟資料庫。在大多數情況下,由邏輯備資料庫生成的聯機重做日誌檔案於從主資料庫接收重做的備重做日誌檔案是位於同一目錄的。
因此,推薦你為每個目的地定義VALID_FOR 屬性,使得你的 Data Guard 配置正確操作,包括在角色轉換之後。檢視 12.1 節中的場景以獲得對於不同 Data Guard 配置的
VALID_FOR 屬性的例子。
如果你選擇不使用VALID_FOR 屬性來配置目的地,你必須對於每個資料庫維護兩個資料庫伺服器引數檔案(SPFILEs):一個對於資料庫處於主角色時,一個對於備角色。檢視第 12 章以獲得更多配置例子。
5.4.2 為主和備資料庫指定唯一名字
DB_UNIQUE_NAME 屬性允許你在配置目的地時指定唯一資料庫名字。這使得動態添
加備資料庫到包含Real Applications Clusters 主資料庫的 Data Guard 配置成為可能,當那個主資料庫操作於最大保護或最大可用性級別的保護時。如果已經定義了
LOG_ARCHIVE_CONFIG 引數,則需要初始化引數 DB_UNIQUE_NAME。
注:
如果在遠端目的地的備資料庫沒有使用 DB_UNIQUE_NAME 初始化引數確定,備資料庫必須在主例項啟動之前可訪問。
LOG_ARCHIVE_DEST_n 引數的 DB_UNIQUE_NAME 屬性和
LOG_ARCHIVE_CONFIG 引數的 DG_CONFIG 屬性一起指定了 Data Guard 配置的每個資料庫的唯一名字。你提供的名字必須符合為使用 DB_UNIQUE_NAME 初始化引數的每個資料庫的定義。
例如,下面的初始化引數顯示了對在第 3 章中描述的 Data Guard 配置中的主資料庫
(chicago)的 DB_UNIQUE_NAME 和 LOG_ARCHIVE_CONFIG 定義。
DB_NAME=chicago
DB_UNIQUE_NAME=chicago
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago, boston)'
LOG_ARCHIVE_DEST_1='LOCATION=/arch1/chicago/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES)'
LOG_ARCHIVE_DEST_2=
'SERVICE=boston LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=boston'
對於使用SERVICE 屬性指定的遠端目的地,需要 DB_UNIQUE_NAME 屬性。在例子
中,LOG_ARCHIVE_DEST_2 引數為遠端目的地指定了 DB_UNIQUE_NAME=boston;重做傳輸服務在遠端目的地檢查這個資訊。如果名字不符合,則到那個目的地的連線被拒絕。
LOG_ARCHIVE_CONFIG 引數也有 SEND、NOSEND、RECEIVE、和 NORECEIVE 屬性:
z SEND 允許資料庫傳送重做資料到遠端目的地 z RECEIVE 允許備資料庫從其它資料庫接收重做
要禁止這些設定,使用NOSEND 和 NORECEIVE 關鍵詞。
例如,要確保主資料庫永遠不會收到任何歸檔重做資料,在主資料庫上設定
LOG_ARCHIVE_CONFIG 初始引數為 NORECEIVE,如下:
LOG_ARCHIVE_CONFIG='NORECEIVE,DG_CONFIG=(chicago,boston)'
然而,緊記指定NOSEND 或 NORECEIVE 屬性會在角色轉換之後限制資料庫例項的能力。例如,如果使用 NOSEND 屬性設定的備資料庫轉換到主角色,它將不能夠傳送重做資料到其它備資料庫,直到你重置該引數值為 SEND。類似地,有 NORECEIVE 屬性指定的資料庫不能從主資料庫接收重做。
預設地,LOG_ARCHIVE_CONFIG 引數允許主資料庫傳送重做資料到備資料庫並允許備資料庫從主資料庫接收重做以用於歸檔。這等同於在 LOG_ARCHIVE_CONFIG 引數上同時設定 SEND 和 RECEIVE 屬性。
注:
LOG_ARCHIVE_CONFIG 初始化引數替代了 REMOTE_ARCHIVE_ENABLE 初始化引數,不贊成使用該引數。不要在一個 SPFILE 或文字初始化引數檔案中同時指定兩個引數。
5.5 如果出現錯誤如何應對
要處理歸檔故障,你能使用LOG_ARCHIVE_DEST_n 引數的 REOPEN,
MAX_FAILURES,和 ALTERNATE 屬性來指定當向目的地的歸檔過程故障時應該採取什麼措施。這些措施包括:
z 在指定時間週期後重試向歸檔目的地的歸檔操作,直到限制數目的次數 z 使用一個預備的或替代的目的地
z 控制檢視重建連線的次數並重新開始傳送重做資料到故障的目的地
5.5.1 重試歸檔操作
使用REOPEN 屬性來決定是否並且何時 ARCn 程式或 LGWR 程式在錯誤過後試圖再次傳送重做資料到故障的目的地。
使用REOPEN=seconds 屬性來指定在錯誤過後到歸檔程式再次嘗試訪問故障的目的地之前必須經過的最小秒數。預設值是 300 秒。對 REOPEN 屬性設定的值應用到所有錯誤,而不僅僅是連線錯誤。你能透過指定 REOPEN=0 關閉該選項,這會防止目的地在故障發生後被重試。
如果傳送到預備目的地失敗了並且REOPEN 屬性設定為零(0),重做傳輸服務將會嘗試在下次重做資料歸檔時傳送重做資料到預備目的地。
5.5.2 使用預備目的地
ALTERNATE 屬性定義一個預備的歸檔目的地,能夠在原始歸檔目的地故障時被使用。如果沒有指定預備目的地,目的地在故障時不會自動更改到其它目的地。
圖5-6 顯示了重做資料歸檔到本地磁碟裝置的場景。如果原始目的地裝置變滿了或不可用了,歸檔操作會自動重指向預備目的地裝置。
圖5-6 向預備目的地裝置的歸檔操作
REOPEN 屬性優先於 ALTERNATE 屬性。預備目的地只有在如果下麵條件之一為真時才使用: z REOPEN 屬性指定為零(0)值。
z 非零 REOPEN 屬性以及非零 MAX_FAILURE 計數被超過。
ALTERNATE 屬性優先於 MANDATORY 屬性。這意味者即使當前目的地是強制的,目的地也會故障轉移到有效的預備目的地。
同時檢視:
ALTERNATE 屬性
5.5.3 控制重試嘗試的次數
使用MAX_FAILURE 屬性來指定重做傳輸服務嘗試傳送重做資料到故障目的地的連續次數的最大數目。要限制與故障目的地重新建立通訊的連續嘗試的次數,聯合使用 REOPEN 屬性與 MAX_FAILURE 屬性。一旦超過指定的連續嘗試次數,目的地就被視為與 REOPEN 屬性設定為零等同。
當你使用MAX_FAILURE 屬性時需要 REOPEN 屬性。例子 5-7 顯示瞭如何設定重試時間 60 秒和重試限制 3 次。
例子5-7 設定重試時間和限制
LOG_ARCHIVE_DEST_1='LOCATION=/arc_dest REOPEN=60 MAX_FAILURE=3'
5.6 設定資料保護模式
Data Guard 提供三種資料保護模式:最大保護、最大可用性、和最大效能。你選擇的數
據保護級別控制瞭如果主資料庫丟失其到備資料庫的連線之後的行為。本節包含下述主題: z 選擇 Data Guard 保護模式
z 設定 Data Guard 配置的資料保護模式
5.6.1 選擇資料保護模式要決定使用合適的資料保護模式,回顧下面的資料保護模式的描述會幫助評估你的對於資料可用性的業務需求與對於響應時間和效能的使用者需要之間的對比。同時,檢視5.6.2 節以獲得設定資料保護模式相關資訊。
5.6.1.1 最大保護模式
這種保護模式確保如果主資料庫故障不會發生資料丟失。要提供這種級別的保護,恢復每個會話所需的重做資料必須在事務提交之前同時寫到本地聯機重做日誌和至少一個備資料庫備重做日誌。要確不能發生保資料丟失,如果故障導致主資料庫無法向至少一個遠端備重做日誌寫其重做流,則主資料庫會關閉。對於多例項RAC 資料庫,如果無法寫重做記錄到至少一個適當配置的資料庫例項,則 Data Guard 關閉主資料庫。最大保護模式需要至少一個備例項有一個備重做日誌並且在 LOG_ARCHIVE_DEST_n 引數上對於這個目的地使用 LGWR、SYNC、和 AFFIRM 屬性。
5.6.1.2 最大可用性模式
這種保護模式提供了可能的最高階別的資料保護,而不用與主資料庫的可用性相妥協。如同最大保護模式,事務將不會提交,直到恢復該事務所需的重做寫到本地聯機重做日誌和至少一個遠端備重做日誌。不同於最大保護模式,如果故障導致主資料庫無法寫其重做流到遠端備重做日誌,主資料庫不需要關閉。替代地,主資料庫操作於最大效能模式直到解除故障並且解決所有重做日誌檔案中的中斷。當解決所有中斷後,主資料庫自動繼續操作於最大可用性模式。
這種模式確保即使主資料庫故障也不會發生資料丟失,但是隻有在第二次故障沒有阻止完整的重做資料集從主資料庫傳送到至少一個備資料庫的情況下。
如同最大保護模式,最大可用性模式需要你: z 至少在一個備資料庫上配置備重做日誌檔案。
z 為至少 1 個備資料庫設定 LOG_ARCHIVE_DEST_n 引數的 LGWR、SYNC、和
AFFIRM 屬性。
5.6.1.3 最大效能模式
這種保護模式(預設)提供了可能的最高階別的資料保護,而不用影響主資料庫的效能。這是透過允許事務在恢復該事務所需的重做資料一寫到本地聯機重做日誌就提交來實現的。主資料庫的重做資料流也寫到至少一個備資料庫,但是那個重做流相對於建立重做資料的事務的提交是非同步寫的。
當使用足夠頻寬的網路連結,這種模式提供了接近最大可用性模式而對主資料庫效能影響最小的資料保護級別。
最大效能模式允許你在LOG_ARCHIVE_DEST_n 引數上對於備資料庫目的地設定
LGWR 和 ASYNC 屬性,或設定 ARCH 屬性。如果主資料庫故障,你能透過設定 LGWR 和
ASYNC 屬性來減少備目的地上未接收到的資料量。
5.6.2 設定 Data Guard 配置的資料保護模式
要設定重做傳輸服務和指定對於Data Guard 配置的資料保護級別,執行下述步驟。
第1 步 在主資料庫上配置 LOG_ARCHIVE_DEST_n 引數。
在主資料庫上,適當配置LOG_ARCHIVE_DEST_n 引數屬性。每種 Data Guard 資料保護模式在配置中需要至少一個備資料庫,以滿足在表 5-2 中列出的最小需求集。
表5-2 對於資料保護模式的最小需求
|
最大保護 |
最大可用性 |
最大效能 |
重做歸檔程式 |
LGWR |
LGWR |
LGWR 或 ARCH |
網路傳輸模式 |
SYNC |
SYNC |
當使用 LGWR 程式時為 SYNC 或 ASYNC。 如果使用 ARCH 程式則 SYNC |
磁碟寫選項 |
AFFIRM |
AFFIRM |
AFFIRM 或 NOAFFIRM |
是否需要備重做日誌? |
是 |
是 |
否,但是推薦 |
注:
Oracle 推薦執行在最大保護模式的 Data Guard 配置包含至少兩個滿足表 5-2 中所列需求的備資料庫。那樣的話,資料庫能在備資料庫之一不能從主資料庫接收重做資料時繼續進行。
下面的例子顯示瞭如何配置最大可用性模式:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=chicago
2> OPTIONAL LGWR SYNC AFFIRM
3> VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
4> DB_UNIQUE_NAME=chicago';
如果沒有已經在SPFILE 中指定,你也應該使用 DB_UNIQUE_NAME 初始化引數指定
唯一名字,以及在使用DG_CONFIG 屬性的 LOG_ARCHIVE_CONFIG 上列出所有資料庫。
例如:
SQL> ALTER SYSTEM SET
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
這將會允許動態新增一個備資料庫到一個擁有執行在最大保護或最大可用性模式中的
Real Application Cluster 主資料的 Data Guard 配置。
第1 步 如果你升級保護模式,執行這個步驟。只有你升級保護模式才執行這個步驟(例如,從最大效能到最大可用性模式)。否則,
跳到步驟 3。
假定這個例子是升級Data Guard 配置從最大效能模式到最大可用性模式。關閉主資料
庫並重啟到安裝模式:
SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT;
對於 Real Application Clusters 資料庫,關閉所有的主例項但只啟動並安裝一個主例項。
第2 步 設定資料保護模式。
要指定一種資料保護模式,在主資料庫上執行SQL ALTER DATABAE SET STANDBY
DATABASE TO MAXIMIZE {PROTECTION | AVAILABILITY | PERFORMANCE}語句。例如,下面的語句指定了最大可用性模式:
SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY; 第 3 步 開啟主資料庫。
如果你執行步驟 1 來升級保護模式,開啟資料庫:
SQL> ALTER DATABASE OPEN;
如果你是降級保護模式,則資料庫已經開啟。
第4 步 在備資料庫上配置 LOG_ARCHIVE_DEST_n 引數。
在備資料庫上,配置LOG_ARCHIVE_DEST_n 引數屬性使得配置能在切換過後繼續操
作在新的保護模式。
例如:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=boston
2> OPTIONAL LGWR SYNC AFFIRM
3> VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
4> DB_UNIQUE_NAME=boston';
第5 步 確認配置操作在新的保護模式。
查詢V$DATABASE 檢視以確認 Data Guard 配置操作在新的保護模式。例如:
SQL> SELECT PROTECTION_MODE, PROTECTION_LEVEL FROM V$DATABASE;
PROTECTION_MODE PROTECTION_LEVEL
--------------------- ---------------------
MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY
檢視第 15 章和 Oracle 資料庫 SQL 參考以獲得 SQL 語句相關資訊。
5.7 管理日誌檔案
本節包含下述主題: z 為歸檔重做日誌檔案指定預備目錄 z 重用聯機重做日誌檔案 z 管理備重做日誌檔案 z 為控制檔案的增長和重用而計劃
z 在多個備資料庫之間共享日誌檔案
5.7.1 為歸檔重做日誌檔案指定預備目錄
典型地,當從主資料庫接收到重做資料,重做資料是寫到歸檔重做日誌中的,儲存在
你使用LOG_ARCHIVE_DEST_n 引數的 LOCATION 屬性指定的目錄。作為選擇,你能在備資料庫上指定 STANDBY_ARCHIVE_DEST 初始化引數來指示一個預備的目錄,歸檔重做日誌檔案能在從主資料庫接收後存放在那裡。如果同時指定了兩個引數,STANDBY_ARCHIVE_DEST 初始化引數覆蓋了 LOG_ARCHIVE_DEST_n 引數指定的目錄位置。
歸檔重做日誌檔案在備資料庫上儲存的位置由下述規則列表決定。當資料庫例項啟動時,歸檔重做日誌檔案以列表中順序評估:
1. 如果在備資料庫上指定了 STANDBY_ARCHIVE_DEST 初始化引數,則使用那個位置。
2. 如果 LOG_ARCHIVE_DEST_n 引數包含了 VALID_FOR=(STANDBY_LOGFILE, *) 屬性,則使用對這個目的地指定的位置。
3. 如果 COMPATIBLE 引數設為 10.0 或更高,並且沒有一個 LOG_ARCHIVE_DEST_n 引數包含 VALID_FOR=(STANDBY_LOGFILE, *)屬性,則使用任意一個有效的 LOG_ARCHIVE_DEST_n 引數。
4. 如果沒有指定任何一個初始化引數,則歸檔重做日誌檔案儲存在對於
STANDBY_ARCHIVE_DEST 初始化引數的預設位置。
要檢視STANDBY_ARCHIVE_DEST 初始化引數的隱式預設值,查詢
V$ARCHIVE_DEST 檢視:
SQL> SELECT DEST_NAME, DESTINATION FROM V$ARCHIVE_DEST
2> WHERE DEST_NAME='STANDBY_ARCHIVE_DEST';
DEST_NAME
----------------------------------------------------------------- DESTINATION
-----------------------------------------------------------------
STANDBY_ARCHIVE_DEST
/oracle/dbs/arch
重做傳輸服務聯合使用STANDBY_ARCHIVE_DEST 初始化引數與 LOG_ARCHIVE_FORMAT 引數指定的值來在備站點生成歸檔重做日誌檔案的檔名。例如:
STANDBY_ARCHIVE_DEST='/arc_dest/arls'
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
在上面的例子中,%s 相應於序列號,%r 相應於重置日誌 ID。這些一起確保跨多資料
庫化身的歸檔重做日誌檔案能有唯一名字。%t 是 Real Application Clusters 配置所需要的,相應於執行緒號。
對於物理備資料庫,重做傳輸服務在備資料庫控制檔案中儲存全限定檔名,並且重
做應用使用這個資訊在備資料庫上執行恢復。
注:
如果你指定了 LOG_ARCHIVE_DEST_n 引數的 TEMPLATE 屬性,它會覆蓋由
STANDBY_ARCHIVE_DEST 和 LOG_ARCHIVE_FORMAT 引數生成的檔名。檢視第 14 章以獲得 TEMPLATE 屬性相關資訊。
要顯示在備系統上的歸檔重做日誌檔案的列表,在備資料庫上查詢
V$ARCHIVED_LOG 檢視:
SQL> SELECT NAME FROM V$ARCHIVED_LOG;
NAME
----------------------------------------------------------------- /arc_dest/log_1_771.arc /arc_dest/log_1_772.arc
/arc_dest/log_1_773.arc
/arc_dest/log_1_774.arc
/arc_dest/log_1_775.arc
5.7.2 重用聯機重做日誌檔案
你能使用設定LOG_ARCHIVE_DEST_n 引數的 OPTIONAL 或 MANDATORY 屬性來指定重用聯機重做日誌檔案的策略。預設地,遠端目的地被設定為 OPTIONAL。可選目的地的歸檔操作可以失敗,並且即使傳送重做資料和寫日誌內容沒有成功,聯機重做日誌檔案也能被重用。如果強制目的地的歸檔操作失敗了,聯機重做日誌檔案不能被覆蓋,直到向強制目的地的失敗歸檔完成。
預設地,即使你指定所有的目的地都為可選的,也有一個本地目的地是強制的。
例子5-8 顯示瞭如何設定強制本地歸檔目的地,並允許那個目的地。當指定
MANDATORY 屬性時,也要考慮在 5.5 節中描述的 REOPEN 和 MAX_FAILURE 屬性來處理故障情況。
例子5-8 設定強制歸檔目的地
LOG_ARCHIVE_DEST_3 = 'LOCATION=/arc_dest MANDATORY'
5.7.3 管理備重做日誌檔案
本小節包含下述主題: z 確定備重做日誌檔案組配置是否適當 z 新增備重做日誌成員到現有的組
5.7.3.1 確定備重做日誌檔案組配置是否適當
檢驗備重做日誌有合適數目的日誌檔案組,最簡單的方法是檢查RFS 程式跟蹤檔案和資料庫警告日誌。如果兩個日誌都包含顯示 RFS 程式頻繁地因為歸檔沒有完成而等待組,則新增更多日誌檔案組到備重做日誌。額外的備重做日誌檔案組給歸檔操作足夠的時間在
RFS 程式重用備重做日誌檔案之前完成。
注意:
不管何時你新增一個聯機重做日誌檔案組到主資料庫,你必須新增一個相應的備重做日誌檔案組到備資料庫。如果備重做日誌檔案組的數目不適當,主資料庫如果操作於最大保護模式將會關閉,如果操作於最大可用性模式將會切換到最大效能模式。
5.7.3.2 新增備重做日誌成員到現有的組
在一些案例中,可能沒有必要建立一個完整的備重做日誌檔案組。一個組可能已經存在,但可能不完整,因為一個或更多成員被刪除了(例如,因為磁碟故障)。在這個案例中,你能新增新的成員到現有的組。
要新增新成員到一個備重做日誌檔案組,使用帶ADD STANDBY LOGFILE MEMBER 子句的 ALTER DATABASE 語句。下面的語句新增一個新成員到 2 號備重做日誌檔案組:
SQL> ALTER DATABASE ADD STANDBY LOGFILE MEMBER
'/disk1/oracle/dbs/log2b.rdo'
2> TO GROUP 2; 使用新成員的全限定檔名來指出檔案應該建立在何處。否則,檔案將會被建立在資料庫的預設或當前目錄,依賴於你的作業系統。
5.7.4 為控制檔案的增長和重用而計劃
本小節描述: z 設定包含控制檔案的磁碟容量的大小 z 指定控制檔案中記錄的重用
5.7.4.1 設定包含控制檔案的磁碟卷的大小
隨著生成的歸檔重做日誌檔案和進行的RMAN 備份,Oracle 新增新的記錄到控制檔案的可重用部分。如果沒有可用於重用的記錄(因為所有的記錄還處於由
CONTROL_FILE_RECORD_KEEP_TIME 指定的天數之內),則控制檔案會擴充套件,新的記錄被新增到控制檔案中。
最大的控制檔案大小是20000 個資料庫塊。如果 DB_BLOCK_SIZE 等於 8192,則最大的控制檔案大小是 156MB。如果控制檔案是儲存在預先建立的卷中,則包含主與備控制檔案的卷應該大小能容納最大尺寸的控制檔案。如果控制檔案卷太小並且不能擴充套件,則在控制檔案中的現有記錄在它們的預期的重用之前將被覆蓋。這種行為透過在警告日誌中的下述資訊來指出:
krcpwnc: following controlfile record written over:
5.7.4.2 指定控制檔案中記錄的重用
CONTROL_FILE_RECORD_KEEP_TIME 初始化引數指定了控制檔案中可重用的記錄能被重用之前必須經過的最小天數。適當地設定這個引數預防重做傳輸服務覆蓋控制檔案中的可重用記錄,並且確保重做資訊在備資料庫上保持可用。
z 設定 CONTROL_FILE_RECORD_KEEP_TIME 為一個值,允許所有在磁碟上的備份資訊保留在控制檔案中。CONTROL_FILE_RECORD_KEEP_TIME 指定記錄在成為候選於重用之前在控制檔案中保留的天數。
z 設定 CONTROL_FILE_RECORD_KEEP_TIME 為一個值,比你打算保留在磁碟上最早的備份檔案稍微長一點,由備份區域的大小來確定。
例如,如果備份區域大小設定為維護每7 天進行的兩個全備份,每天的增量備份和歸檔重做日誌檔案也是這樣,則設定 CONTROL_FILE_RECORD_KEEP_TIME 的值為 21 或 30。比這個更舊的記錄將被重用。然而,備份後設資料在 RMAN 恢復目錄中將還是可用的。
如果對備資料庫設定了應用延遲(在6.2.2 節中描述),確保你指定一個足夠大的值。這個引數的值的範圍從 0 到 365 天。預設值是 7 天。
檢視Oracle 資料參考以獲得 CONTROL_FILE_RECORD_KEEP_TIME 初始化引數的更多相關細節,和 Oracle 資料庫備份和恢復高階使用者指南。
5.7.5 在多個備資料庫之間共享日誌檔案目的地
使用LOG_ARCHIVE_DEST_n 初始化引數的 DEPENDENCY 屬性來定義一個歸檔目的地代表多個目的地接收重做資料,而不是傳送重做資料到每個單獨的目的地。
圖-7 顯示了一個 Data Guard 配置,在這裡面主資料庫傳送重做資料到一個歸檔目的地,同時共享其歸檔重做日誌檔案給一個邏輯備資料庫和一個物理備資料庫。這些目的地依賴於向父目的地的歸檔操作的成功。
圖5-7 使用依賴目的地的Data Guard 配置
指定目的地依賴性在下面的情況下可能是很有用的: z 當你在同一系統配置一個物理備資料庫和一個邏輯備資料庫時。
z 當你在同一系統配置備資料庫和主資料庫時。因此,歸檔重做日誌檔案對於備資料庫是隱式可訪問的。
z 當使用叢集檔案系統來提供遠端備資料庫對於主資料庫的歸檔重做日誌檔案的訪問時。
z 當使用作業系統相關的網路檔案系統時,提供遠端備資料庫對於主資料庫歸檔重做日誌檔案的訪問。
例如,假設有兩個備資料庫stby1 和 stdby2 位於硬體的同一片上。不需要使用網路頻寬和磁碟空間來傳送同一重做資料到兩個目的地。如果你使用 DEPENDENCY 屬性來指定其中一個目的地作為一個依賴目的地,資料庫能共享同一歸檔重做日誌檔案。那就是說,主資料庫傳送要歸檔的重做到沒有定義為依賴目的地的目的地。如果重做資料成功到達那個目的地,主資料庫認為其歸檔到了兩個目的地。例如:
LOG_ARCHIVE_DEST_1='LOCATION=DISK1 MANDATORY'
LOG_ARCHIVE_DEST_2='SERVICE=stdby1 OPTIONAL'
LOG_ARCHIVE_DEST_3='SERVICE=stdby2 OPTIONAL
DEPENDENCY=LOG_ARCHIVE_DEST_2'
使用這些定義的引數,主資料庫傳送重做資料到stdby1 而不到 stdby2。stdby2 資料庫改為從運輸到 stdby1 的歸檔重做日誌檔案來恢復重做。
同時檢視:
DEPENDENCY 屬性資料庫到備資料庫的自動歸檔臨時停止,就會出現歸檔中斷。當網路再次可用時,從主資料庫到故障的備資料庫的重做資料的自動傳輸繼續。
Data Guard 不需要 DBA 的手工干預來探測和解決這樣的中斷。下面的小節描述了中斷探測和解決。
5.8.1 何時發現歸檔中斷?
無論何時主資料庫本地歸檔一個日誌,但是備站點沒有接受到該日誌就會發生歸檔中斷。每分鐘,主資料庫調查其備資料庫以檢視是否在歸檔重做日誌檔案的序列中有中斷。
5.8.2 如何解決中斷?
中斷恢復透過輪詢機制解決。對於物理和邏輯備資料庫、Oracle Change Data Capture、和 Oracle Streams,Data Guard 透過自動從主資料庫檢索丟失的歸檔重做日誌檔案來執行中斷探測和解決。不需要額外的配置設定來調查備資料庫,來探測任何中斷或解決中斷。
這裡很重要的考慮是自動中斷恢復是依主資料庫的可用性而定的。如果主資料庫不可用了,並且你配置了多個物理備資料庫,你能設定額外的初始化引數使得重做應用能從其它備資料庫解決歸檔中斷,如5.8.3 節中描述。
檢視12.11 節以獲得顯示如何手工解決中斷的場景。
注:
在 Oracle 資料庫 10g 版本 1 以前,FAL 客戶端和伺服器用於從主資料庫解決中斷。
5.8.3 使用取歸檔日誌(FAL)來解決歸檔中斷
取歸檔日誌(FAL)客戶端和服務期解決在主資料庫生成的與物理備資料庫接收到的歸檔重做日誌檔案的範圍中探測到的中斷。
z FAL 客戶單自動請求歸檔重做日誌檔案的傳遞。 z FAL 服務期服務從 FAL 客戶端來的 FAL 請求。
FAL 機制處理下述型別的歸檔中斷和問題:
z 當建立一個物理或邏輯備資料庫時,FAL 機制能自動檢索在主資料庫的熱備期間生成的任何歸檔重做日誌檔案。
z 當有在備資料庫上已經有接收到的歸檔重做日誌檔案的問題時,FAL 機制能自動
檢索歸檔重做日誌檔案來解決任何下述情況:
{ 當歸檔重做日誌檔案在應用到備資料之前被從磁碟刪除。
{ 當歸檔重做日誌檔案因為磁碟損壞不能應用。
{ 當歸檔重做日誌檔案在重做資料應用到被資料庫之前,意外被不是歸檔重做日誌檔案的其它檔案替換(例如,一個文字檔案)。
z 當你有多個物理備資料庫,FAL 機制能從其它物理備資料庫自動檢索丟失的歸檔重做日誌檔案。
FAL 客戶端和服務期使用在備資料庫上設定的 FAL_CLIENT 和 FAL_SERVER 初始化引數來配置。在初始化引數檔案中定義的 FAL_CLIENT 和 FAL_SERVER 初始化引數只針對於物理備資料庫,如下表中所示:
引數 |
功能 |
語法 |
FAL_SERVER |
指定備資料庫應該用於連線 FAL 伺服器的網路服務名。它可以在一個列表中包含多個值。 |
語法 FAL_SERVER=net_service_name 例子 FAL_SERVER=standby2_db,standby3_db |
FAL_CLIENT |
指定 FAL 伺服器應該用於連線到備資料庫的網路服務名。 |
語法 FAL_CLIENT=net_service_name 例子 FAL_CLIENT=standby1_db |
5.8.4 手工探測和解決歸檔中斷
在一些情況下,自動中斷恢復可能不會發生,你將會需要手工執行中斷恢復。例如,
如果你使用邏輯備資料庫並且主資料庫不可用時,你將需要手工執行中斷恢復。下面的小節描述瞭如何查詢適當的檢視以確定哪個日誌檔案丟失了並且執行手工恢復。
在物理備資料庫:要確定在你的物理備資料庫上是否有歸檔中斷,查詢V$ARCHIVE_GAP 檢視,如下面
例子所示:
SQL> SELECT * FROM V$ARCHIVE_GAP;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
----------- ------------- -------------- 1 7 10
前面例子的輸出指出你的物理備資料庫當前丟失日誌檔案從執行緒1 的序號 7 到序號 10。在你確定中斷後,在主資料庫上執行下面的 SQL 語句來在你的主資料庫上定位歸檔重做日
志檔案(假設在主資料庫上的本地歸檔目的地是LOG_ARCHIVE_DEST_1):
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 2> AND SEQUENCE# BETWEEN 7 AND 10;
NAME
-----------------------------------------------------------------
/primary/thread1_dest/arcr_1_7.arc
/primary/thread1_dest/arcr_1_8.arc
/primary/thread1_dest/arcr_1_9.arc
複製這些日誌檔案到你的物理備資料庫並在你的物理備資料庫上使用ALTER
DATABASE REGISTER LOGFILE 語句來註冊它們。例如: SQL> ALTER DATABASE REGISTER LOGFILE
'/physical_standby1/thread1_dest/arcr_1_7.arc';
SQL> ALTER DATABASE REGISTER LOGFILE '/physical_standby1/thread1_dest/arcr_1_8.arc';
在你在物理備資料庫上註冊這些日誌檔案之後,你能重啟重做應用。
注:
物理備資料庫上的 V$ARCHIVE_GAP 固定檢視只返回當前妨礙重做應用繼續的下一個中斷。在解決中斷並重啟重做應用後,再次在物理備資料庫上查詢 V$ARCHIVE_GAP 固定檢視來確定下一個中斷序號,如果有的話。重複這個過程直到沒有更多的中斷。
在邏輯備資料庫:
要確定是否有歸檔中斷,在邏輯備資料庫上查詢DBA_LOGSTDBY_LOG 檢視。例如,
下面的查詢指出在歸檔重做日誌檔案的序號中有中斷,因為它在邏輯備資料上對於THREAD1 顯示有兩個檔案。(如果沒有中斷的話,查詢應該每個執行緒只顯示一個檔案。)輸
出顯示最高的註冊檔案是序列號10,但是在所示檔案序列號 6 有中斷:
SQL> COLUMN FILE_NAME FORMAT a55
SQL> SELECT THREAD#, SEQUENCE#, FILE_NAME FROM DBA_LOGSTDBY_LOG L
2> WHERE NEXT_CHANGE# NOT IN
3> (SELECT FIRST_CHANGE# FROM DBA_LOGSTDBY_LOG WHERE L.THREAD# =
THREAD#)
4> ORDER BY THREAD#,SEQUENCE#;
THREAD# SEQUENCE# FILE_NAME
--------- ---------- ---------------------------------------------
1 6 /disk1/oracle/dbs/log-1292880008_6.arc
1 10 /disk1/oracle/dbs/log-1292880008_10.arc
複製丟失的日誌檔案,序列號7、8 和 9,到邏輯備系統,並在你的邏輯備資料庫上使用 ALTER DATABASE REGISTER LOGICAL LOGFILE 語句來註冊它們。
例如:
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE
'/disk1/oracle/dbs/log-1292880008_10.arc';
在你在邏輯備資料庫上註冊這些日誌檔案之後,你能重啟SQL 應用。
注:
在邏輯備資料庫上的 DBA_LOGSTDBY_LOG 檢視只返回當前妨礙 SQL 應用繼續的下一個中斷。在解決指定的中斷並重啟 SQL 應用之後,再次在邏輯備資料庫上查詢 DBA_LOGSTDBY_LOG 檢視以確定下一個中斷序號,如果有的話。重複這個過程直到沒有更多的中斷。
5.9 核查
本節包含下述主題: z 監控日誌檔案歸檔資訊
z 監控重做傳輸服務的效能
5.9.1 監控日誌歸檔資訊
本小節描述使用檢視來對主資料庫監控重做日誌歸檔活動。檢視Oracle Data Guard Broker 和 Oracle 企業管理器聯機幫助以獲得圖形使用者介面的更多相關資訊,用於自動化包含在監控 Data Guard 環境中的許多工。
第1 步 確定重做日誌檔案的狀態。
在主資料庫上屬性下面的查詢以確定所有聯機重做日誌檔案的狀態:
SQL> SELECT THREAD#, SEQUENCE#, ARCHIVED, STATUS FROM V$LOG;
第2 步 確定最近的歸檔重做日誌檔案。
在主資料庫上輸入下面的查詢以確定最近的歸檔執行緒和序列號:
SQL> SELECT MAX(SEQUENCE#), THREAD# FROM V$ARCHIVED_LOG GROUP BY THREAD#;
第3 步 確定在每個目的地的最近的歸檔重做日誌檔案。
在主資料庫上輸入下面的查詢以確定哪個歸檔重做日誌檔案是最近地傳送到每個歸檔
目的地:
SQL> SELECT DESTINATION, STATUS, ARCHIVED_THREAD#, ARCHIVED_SEQ#
2> FROM V$ARCHIVE_DEST_STATUS
3> WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';
DESTINATION STATUS ARCHIVED_THREAD# ARCHIVED_SEQ#
------------------ ------ ---------------- ------------- /private1/prmy/lad VALID 1 947 standby1 VALID 1 947
最近寫的歸檔重做日誌檔案對於每個列出的歸檔目的地應該是相同的。如果不同,則VALID 以外的狀態可能確定在向那個目的地的歸檔操作過程中遇到了錯誤。
第4 步 找出歸檔重做日誌檔案是否已經被接收到。你能在主資料庫上執行一個查詢來找出歸檔重做日誌檔案是否在一個特定的站點沒有
被接收到。每個目的地有一個相關的ID 號。你能在主資料庫上查詢 V$ARCHIVE_DEST 固定檢視的 DEST_ID 列來確定每個目的地的 ID 號。
假設當前本地目的地是1,遠端備目的地之一的 ID 是 2。要確定在備目的地上哪個日
志檔案丟失了,執行下面的查詢:
SQL> SELECT LOCAL.THREAD#, LOCAL.SEQUENCE# FROM
2> (SELECT THREAD#, SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=1)
3> LOCAL WHERE
4> LOCAL.SEQUENCE# NOT IN
5> (SELECT SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND
6> THREAD# = LOCAL.THREAD#);
THREAD# SEQUENCE#
--------- --------- 1 12
1 13
1 14
檢視附錄 A 以獲得監控主資料庫的歸檔狀態的細節。
第5 步 在備站點跟蹤傳送日誌的過程。
要檢視重做資料傳輸到備目的地的過程,在主和備初始化引數檔案中設定
LOG_ARCHIVE_TRACE 引數。檢視附錄 G 以獲得完整的細節和例子。
5.9.2 監控重做傳輸服務的效能
本小節描述了監控重做傳輸服務的效能的等待事件,這些服務由主資料庫上的
LOG_ARCHIVE_DEST_n 初始化引數上的 ARCH、LGWR、SYNC、和 ASYNC 屬性指定。
下面的小節描述了等待事件和由V$SYSTEM_EVENT 檢視顯示的相關時間資訊。
z ARCn 程式等待事件 z LGWR SYNC 等待事件
z LGWR ASYNC 等待事件
5.9.2.1 ARCn 程式等待事件
對於ARCn 歸檔過程,表 5-3 顯示了多個等待事件,當為傳輸模式使用 ARCH 時,監控產生或刪除 RFS 連線和傳送重做資料到備資料庫所花的時間。檢視 5.3.1 節以獲得 ARCn 歸檔過程的相關資訊。
表5-3 對配置ARCH 屬性的目的地的等待事件
等待事件 |
透過…監控所需時間的數量 |
ARCH 等待 ATTACH |
所有 ARCn 程式產生一個 RFS 連線。 |
ARCH 等待 SENDREQ |
所有 ARCn 程式既開啟和關閉遠端歸檔重做日誌檔案,也寫接收到重做資料到磁碟。 |
ARCH 等待 DETACH |
所有 ARCn 程式刪除一個 RFS 連線。 |
5.9.2.2 LGWR SYNC 等待事件
對於LGWR SYNC 歸檔過程,表 5-4 顯示了多個等待事件,監控 LGWR 程式在主資料庫上花費時間: z 在主資料庫上完成寫聯機重做日誌檔案 z 傳送重做資料到遠端備目的地 z 等待要寫到備重做日誌檔案的重做資料
z 從遠端備目的地接收應答
檢視5.3.2 節以獲得 LGWR SYNC 歸檔過程相關資訊。
表5-4 對配置LGWR SYNC 屬性的目的地的等待事件
等待事件 |
透過…監控所需時間的數量 |
LGWR 等待 LNS |
LGWR 程式等待從 LNSn 程式接收資訊。 |
LNS 等待 ATTACH |
所有網路服務生成一個 RFS 連線。 |
LNS 等待 SENDREQ |
所有網路服務既開啟和關閉遠端歸檔重做日誌檔案,也寫接收到重做資料到磁碟。 |
LNS 等待 DETACH |
所有網路服務刪除一個 RFS 連線。 |
5.9.2.3 LGWR ASYNC 等待事件
對於LGWR ASYNC 歸檔過程,表 5-5 顯示了多個等待事件,監控在主資料庫上寫重做資料到聯機重做日誌檔案所花的事件。檢視 5.3.2 節以獲得 LGWR ASYNC 歸檔過程的相關資訊。
表5-5 對配置LGWR ASYNC 屬性的目的地的等待事件
等待事件 |
透過…監控所需時間的數量 |
LNS 等待 DETACH |
所有網路服務刪除一個 RFS 連線。 |
LNS 等待 ATTACH |
所有網路服務生成一個 RFS 連線。 |
LNS 等待 SENDREQ |
所有網路服務既開啟和關閉遠端歸檔重做日誌檔案,也寫接收到重做資料到磁碟。 |
真 ASYNC 控制檔案 TXN 等待 |
LNSn 程式在其生命週期內獲得控制檔案事務的控制權。 |
真 ASYNC 等待 ARCH 日誌 |
LNSn 程式等待看到歸檔重做日誌(如果 LNSn 程式正在歸檔一個當前日誌檔案並且該日誌被切換)。 |
等待 ASYNC 目的地活動 |
LNSn 程式等待一個不活動的目的地變為活動。 |
真 ASYNC 日誌檔案尾等待 |
LNSn 程式在達到檔案的邏輯結尾後等待重做的下一位。 |
註釋:
注1:管理恢復程式(MRP)應用歸檔重做日誌檔案到物理備資料庫,並在開始的時候自動確定並行恢復程式的最優數量。生成的並行恢復子程式數量基於備伺服器上可用的
CPU 數量。
注2:邏輯備程式(LSP)使用並行執行(Pnnn)程式來應用歸檔重做日誌檔案到邏輯備資料庫,使用 SQL 介面。
6 日誌應用服務
本章描述重做資料如何應用到備資料庫。包含下述主題: z 日誌應用服務介紹 z 日誌應用服務配置選項 z 應用重做資料到物理備資料庫 z 應用重做資料到邏輯備資料庫
6.1 日誌應用服務介紹
日誌應用服務自動應用重做到備資料庫,以維護與主資料庫的同步並允許對資料庫的事務一致性訪問。
預設地,日誌應用服務在應用歸檔重做日誌檔案到備資料庫之前等待完全的歸檔重做日誌檔案到達備資料庫。5.3.1 節和 5.3.2 節描述了從主資料庫傳送的重做資料如何被備系統上的遠端檔案服務程式(RFS)接收,在那裡 RFS 程式寫重做資料到歸檔重做日誌檔案或備重做日誌檔案。然而,如果你使用備重做日誌檔案,你能允許實時應用,這允許 Data Guard 從正在被 RFS 程式寫的當前備重做日誌檔案恢復重做資料。實時應用在 6.2.1 節中更詳細地描述。
日誌應用服務使用下面的方法來維護物理和邏輯備資料庫: z 重做應用(只有物理備資料庫)
使用媒質恢復來保持主和物理備資料庫同步。
注意: 你也能以只讀模式開啟物理備資料庫,允許使用者查詢備資料庫用作報表用途。當開啟的時候,還是接收重做資料的;然而,重做應用停止並且物理備資料庫沒有與主資料庫保持同步。如果在此時間發生故障,會延長故障轉移操作完成所需的時間。檢視 8.2 節,“開啟備資料庫以用於只讀或讀/寫訪問”以獲得更多資訊。
z SQL 應用(只有邏輯備資料庫)
從主資料庫接收的重做重組SQL 語句並在邏輯備資料庫上執行 SQL 語句。
邏輯備資料庫能以讀/寫模式開啟,但是由邏輯備資料庫維護的目標表只能以只讀模式開啟以用於報表用途(倘若資料庫 guard 適當設定)。SQL 應用允許你使用邏輯備資料庫用於報表活動,即使當 SQL 語句被應用時。
本章的小節更詳細地描述了重做應用、SQL 應用、實時應用、和延遲應用。
6.2 日誌應用服務配置選項
本節包含下述主題: z 使用實時應用來立即應用重做資料
z 對歸檔重做日誌檔案的應用指定時間延遲
6.2.1 使用實時應用來立即應用重做資料
如果允許了實時應用特性,日誌應用服務能在接收重做資料時應用,而不用等待當前備重做日誌檔案歸檔。這導致更快的切換和故障轉移時間,因為備重做日誌檔案在故障轉移或切換開始的時候已經應用到備資料庫。
使用ALTER DATABASE 語句來允許實時應用特性,如下:
z 對於物理備資料庫,執行 ALTER DATABASE RECOVER MANAGED STANDBY
DATABASE USING CURRENT LOGFILE 語句。
z 對於邏輯備資料庫,執行 ALTER DATABASE START LOGICAL STANDBY APPLY
IMMEDIATE 語句。
使用實時應用需要備重做日誌檔案。
圖6-1 顯示了使用本地目的地和備目的地的 Data Guard 配置。當遠端檔案服務(RFS)程式在備資料上寫重做資料到備重做日誌檔案時,日誌應用服務能從正在被寫的備重做日誌檔案恢復重做。
圖6-1 使用實時應用應用重做資料到備目的地
6.2.2 對歸檔重做日誌檔案的應用指定時間延遲
在一些情況下,你可能想在重做資料從主站點接收到它應用到備資料庫的時間之間建立一個時間延遲。你能指定時間間隔(分鐘)來保護損壞或錯誤的資料的應用到備資料庫,當你設定DELAY 間隔,它不是延遲重做資料的傳輸到備資料庫。替代地,你指定的時間延遲從重做資料完整地歸檔到備目的地開始。
注:
如果你定義對一個允許實時應用的目的地的延遲,則該延遲被忽略。
指定時間延遲
你能使用LOG_ARCHIVE_DEST_n 初始化引數的 DELAY=minutes 屬性,在主和備資料庫上設定時間延遲來延遲應用歸檔重做日誌檔案到備資料庫。預設地,沒有時間延遲。如果你指定 DELAY 而沒有指定一個值,則預設的延遲間隔是 30 分鐘。
取消時間延遲你能取消指定的延遲間隔,如下:
z 對於物理備資料庫,使用 RECOVER MANAGED STANDBY DATABASE 字句的
NODELAY 關鍵詞:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY;
z 對於邏輯備資料庫,指定下面的 SQL 語句:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY NODELAY;
這些命令導致日誌應用在時間間隔過期之前,立即開始應用歸檔重做日誌檔案到備資料庫。同時,檢視:
z 12.8 節,“使用帶時間延遲的物理備資料庫”
z Oracle 資料庫 SQL 參考,ALTER DATABASE RECOVER MANAGED STANDBY
DATABASE 語句的 DELAY 屬性
6.2.2.1 使用 Flashback 資料庫作為設定時間延遲的另一選擇
作為設定應用延遲的另一選擇,你能使用Flashback 資料庫來從損壞或錯誤資料的應用中恢復到備資料庫。Flashback 資料庫能快速、簡單地閃回備資料庫到一個任意的時間點。
檢視第 12 章以獲得顯示如何使用帶 Flashback 資料庫的 Data Guard,以及 Oracle 資料庫備份和恢復基礎以獲得允許及使用 Flashback 資料庫的更多相關資訊。
6.3 應用重做資料到物理備資料庫
預設地,重做資料從歸檔重做日誌檔案應用。當執行重做應用時,物理備資料庫能使用實時應用特性來從正在被RFS 程式寫的備重做日誌檔案直接應用重做。注意當物理備資料庫以只讀模式開啟時日誌應用服務不能應用重做資料。
本節包含下述主題: z 開始重做應用 z 停止重做應用
z 在物理備資料庫上監控重做應用
6.3.1 開始重做應用
要在物理備資料庫上開始日誌應用服務,確保物理備資料庫是啟動並安裝的,然後使用SQL ALTER DATABASE RECOVER MANAGED STANDBY DATABASE 語句來開始重做應用。
你能指定重做應用作為前臺會話或後臺程式執行,並允許它實時應用。
z 要在前臺開始重做應用,執行下面的 SQL 語句:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE;如果你開始一個前臺會話,控制不會返回到命令提示符,直到恢復被其它會話取消了。
z 要在後臺開始重做應用,在 SQL 語句中包括 DISCONNECT 關鍵詞。例如:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
這條語句開始了一個分離的服務程式並立即返回控制到使用者。當管理恢復程式在後臺執行恢復,執行RECOVER 語句的前臺程式能繼續執行其它任務。這不會斷開當前的 SQL 會話。
z 要開始實時應用,在 SQL 語句上包含 USING CURRENT LOGFILE 字句。例如:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT
LOGFILE;
6.3.2 停止重做應用
要停止重做應用,在其它視窗執行下面的SQL 語句:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
6.3.3 在物理備資料庫上監控重做應用
要監控在物理備資料庫上的日誌應用服務,檢視8.5.4 節。你也能使用 Oracle 企業管理器監控備資料庫。同時,檢視 Oracle 資料庫參考以獲得檢視的完整參考資訊。
6.4 應用重做資料到邏輯備資料庫
SQL 應用從歸檔重做日誌或備重做日誌轉換資料到 SQL 語句,然後在邏輯備資料庫上執行這些 SQL 語句。因為邏輯備資料庫保持開啟,維護的表能同時用於其它任務,如報表、總結、和查詢。
本節包含下述主題: z 開始 SQL 應用
z 在邏輯備資料庫上停止 SQL 應用 z 在邏輯備資料庫上監控 SQL 應用
6.4.1 開始 SQL 應用
要開始SQL 應用,啟動邏輯備資料庫並執行下面語句:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;
要在邏輯備資料庫上開始實時應用,在邏輯備資料庫上立即應用從備重做日誌檔案的重做資料,如下面語句所示包含IMMEDIATE 關鍵詞:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
6.4.2 在邏輯備資料庫上停止 SQL 應用
要停止SQL 應用,在邏輯備資料庫上執行下面語句:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
當你執行該語句,SQL 應用等待直到它提交了所有在應該過程中完成的事務。這樣,
該命令可能不能立即停止SQL 應用程式。如果你想立即停止 SQL 應用,執行下面語句:
SQL> ALTER DATABASE ABORT LOGICAL STANDBY APPLY;
6.4.3 在邏輯備資料上監控 SQL 應用
要監控SQL 應用,檢視 9.2 節。你也能使用 Oracle 企業管理器監控備資料庫。檢視附錄 A,“解決 Data Guard 故障”和 Oracle Data Guard Broker。
同時,檢視在8.5.4.3節中的V$ARCHIVE_DEST_STATUS固定檢視的相關討論和Oracle 資料庫參考以獲得檢視相關的完整參考資訊。
7 角色轉換
Data Guard 配置包含一個資料庫作為主角色以及一個或更多資料庫作為備角色。典型地,每個資料庫的角色不會更改。然而,如果 Data Guard 是用於維護對主資料庫停機響應的服務,你必須在配置中發起當前主資料庫和一個備資料庫之間的角色轉換。要檢視資料庫的當前角色,查詢 V$DATABASE 檢視中的 DATABASE_ROLE 列。
在Data Guard 配置中的備資料庫的數量、位置、和型別(物理或邏輯),以及重做資料以哪種方式從主資料庫傳送到每個備資料庫,決定了你用於響應主資料庫停機可用的角色管理選項。
本章描述瞭如何在Data Guard 配置中管理角色轉換。包含下述主題: z 角色轉換介紹 z 包含物理備資料庫的角色轉換 z 包含邏輯備資料庫的角色轉換
z 在角色轉換之後使用閃回資料庫
在本章中描述的角色轉換使用SQL 語句手工呼叫。你也能使用 Oracle Data Guard broker 來簡化角色轉換和自動化故障轉移。
同時檢視:
Oracle Data Guard Broker 以獲得使用 Oracle Data Guard broker 的相關資訊:
z 透過允許你使用在Oracle企業管理器中單鍵點選或DGMGRL命令列介面中的單條命令簡化切換和故障轉移。
z 當主資料庫變得不可用時,允許快速啟動故障轉移來自動故障轉移。當允許快速啟動故障轉移時,Data Guard broker 確定是否需要故障轉移並自動發起故障轉移到指定的目標備資料庫,而不需要 DBA 介入也沒有資料丟失。
7.1 角色轉換介紹
資料庫操作於下面互斥的角色之一:主或備。Data Guard 允許你透過執行本章中描述的
SQL 語句或透過使用任何一個 Data Guard broker 介面,來動態更改這些角色。Oracle Data
Guard 支援下述角色轉換:
z 切換
允許主資料庫切換角色到它的備資料庫之一。在切換期間沒有資料丟失。在切換之後,每個資料庫繼續以其新的角色參與在Data Guard 配置中。
z 故障轉移
更改備資料庫到主角色響應主資料庫的故障。如果主資料庫在故障之前沒有操作在最大保護模式或最大可用性模式,可能發生資料丟失。如果在主和備資料庫上都允許Flashback 資料庫,一旦故障的原因更正了,故障的資料庫可用恢復作為新的主資料庫的備庫。
7.1.1 節,“準備角色轉換(故障轉移或切換)”幫助你選擇最佳地減小當機時間和資料丟失風險的角色轉換。切換和故障轉移在 7.1.3 節,“切換”和 7.1.4 節,“故障轉移”中相應地更詳細地描述。
7.1.1 準備角色轉換(故障轉移或切換)
在開始任何角色轉換之前,執行下述準備:
z 對每個資料庫檢查初始化引數是否正確配置。檢視第 3 章,“建立物理備資料庫” 和第 4 章,“建立邏輯備資料庫”以獲得在主和備資料庫上如何配置初始化引數,使得 Data Guard 配置在角色轉換之後正確操作。
同時,檢視3.1.3 節,“配置備重做日誌”以獲得在建立物理備資料庫時手工新增重做日誌檔案的相關資訊。
注: 你必須在每個備資料庫上定義 LOG_ARCHIVE_DEST_n 和
LOG_ARCHIVE_DEST_STATE_n 引數,使得當切換或故障發生時,所有備站點繼續從新的主資料庫接收重做資料。檢視 5.4.1 節,“使用 VALID_FOR 屬性指定基於角色的目的地”和第 14 章,“LOG_ARCHIVE_DEST_n 引數屬性”以獲得使用 LOG_ARCHIVE_DEST_n
VALID_FOR 屬性來定義基於角色的目的地,以為將來的角色轉換做準備。
z 檢驗將成為新的主資料庫的備資料庫是操作於 ARCHIVELOG 模式。
z 確儲存在於備資料庫的臨時檔案符合在主資料庫上的臨時檔案。
z 刪除任何在應用重做中的延遲,這可能會影響將會成為新的主資料庫的備資料庫。
z 檢驗在 Real Application Clusters 配置中的備資料庫上除了一個 RAC 例項以外都關
閉。
對於Real Application Clusters 資料庫,在角色轉換過程中備資料庫上只有一個 RAC 例項能聯機。在開始角色轉換之前關閉所有其它例項。然後,在角色轉換完成後,將這些例項聯機。
注:
即使在切換期間備資料庫上只有一個 RAC 例項是開啟的,所有其它備資料庫例項在開啟時,還將自動經歷一個正確轉換到它們的新角色的過程。
7.1.2 為角色轉換選擇目標備資料庫
對於使用多個備資料庫的Data Guard 配置,當為角色轉換選擇目標備資料庫時需要考慮許多因素。包括如下: z 備資料庫的本地性。
z 備資料庫的能力(硬體規格——如 CPU 數目、可用 I/O 頻寬、等等)。
z 執行角色轉換所需的時間。這受離備資料庫後面多遠(用重做資料的應用衡量),以及你有多大的靈活性(用應用可用性與資料丟失的折衷衡量)的影響。
Data Guard 提供了 V$DATAGUARD_STATS 檢視,能用於估計每個備資料庫的生存能力,用備資料庫中資料的流通衡量,以及如果所有可用的重做資料庫應用到備資料庫,執行角色轉換所需的時間。例如:
SQL> COLUMN NAME FORMAT A18
SQL> COLUMN VALUE FORMAT A16
SQL> COLUMN TIME_COMPUTED FORMAT A24
SQL> SELECT * FROM V$DATAGUARD_STATS;
NAME VALUE TIME_COMPUTED
------------------ ---------------- ------------------------ apply finish time +00 00:00:02.4 15-MAY-2005 10:32:49 second(1)
interval apply lag +00 0:00:04 15-MAY-2005 10:32:49 second(0) interval transport lag +00 00:00:00 15-MAY-2005 10:32:49 second(0)
interval
這顯示了對於這個備資料庫,沒有傳輸延遲,日誌應用服務沒有應用在過去的4 秒中
生成的重做(apply lag),日誌應用服務將使用 2.4 秒來完成應用未應用的重做(apply finish time)。在每個統計的時間在 TIME_COMPUTED 列中顯示。如果配置包含物理和邏輯備資料庫,考慮選擇物理備資料庫作為目標備資料庫。向物理備資料庫的切換或故障轉移是更可取的,因為在角色轉換完成後,配置中的所有資料庫對於新的主資料庫作為備資料庫是可行的。然而切換或故障轉移到邏輯備資料庫將會使其它物理備資料庫對於原主資料庫無效。然後在能夠重允許物理備資料庫之前,你將需要從新的主資料庫的備份重建物理備資料庫。
7.1.3 切換
切換典型地用於在計劃的停機期間減少主資料庫當機時間,如作業系統或硬體升級,或Oracle 資料庫軟體和補丁集的滾動升級(在第 11 章,“使用 SQL 應用來升級 Oracle 資料庫”)。
切換以兩個階段發生。在第一個階段,現有的主資料庫經歷向備角色的轉換。在第二個階段,備資料庫經歷向主角色的轉換。
圖7-1 顯示了在資料庫角色切換前的兩站點 Data Guard 配置。主資料庫位於 San
Francisco,備資料庫位於 Boston。
圖7-1 在切換前的Data Guard 配置
圖7-2 顯示了在原主資料庫切換到備資料庫後,但是在原備資料庫成為新的主資料庫之前的 Data Guard 環境。在這個步驟,Data Guard 配置臨時有兩個備資料庫。
圖7-2 在切換到新的主資料庫之前的備資料庫
圖7-3 顯示了在切換髮生後的 Data Guard 環境。原備資料庫成為新的主資料庫。主資料庫現在位於 Boston,備資料庫現在位於 San Francisco。
|
|
|
準備切換
確保滿足在7.1.1 節中列出的先決條件,另外,下面的先決條件必須對切換滿足:
z 對於包含物理備資料庫的切換,檢驗主資料庫例項是否開啟和備資料庫例項是否安裝。
你計劃更改到主角色的備資料庫在你開始切換之前必須是安裝的。理想地,物理備資料庫在資料庫角色在切換時也將活動地應用重做。如果物理備資料庫開啟用於只讀訪問時,切換還將發生,但是需要額外的時間。檢視6.3 節,“應用重做資料到物理備資料庫”以獲得重做應用的更多資訊。
z 對於包含邏輯備資料庫的切換,檢驗主和備資料庫例項是否開啟以及 SQL 應用是否活動。檢視 6.4 節,“應用重做資料到邏輯備資料庫”以獲得 SQL 應用相關的更多資訊。
z 對於包含在 Real Applications Cluster 中的主資料庫的切換,除了一個例項以外所有例項都必須關閉。一旦切換成功執行,你能將所有其它例項聯機。
當資料庫從一個角色轉換到另一個,DB_ROLE_CHANGE 系統事件會觸發。你能寫一個觸發器關聯這個系統事件,以在切換髮生後管理任務。當資料庫第一次在切換過後開啟時該事件觸發,不管其新的角色(就是說,不管切換導致其第一次作為主資料庫、作為邏輯備、或作為只讀模式中的物理備而開啟)。你能查詢 V$DATABASE 檢視的 DATABASE_ROLE 列來確定資料庫的當前角色。檢視在 Oracle 資料庫應用開發指南-基礎中的系統管理事件表,以獲得更多細節。
7.1.4 故障轉移
只有當主資料庫變得不可用,並且沒有可能在合理的時間期間內還原以提供服務,才典型地會使用故障轉移。在故障轉移期間執行的特定操作基於在故障轉移中包括的是邏輯或物理備資料庫,在故障轉移的時候Data Guard 配置的狀態,和用於開始故障轉移使用的特定 SQL 語句而不同。
圖7-4顯示了從San Francisco的主資料庫故障轉移到Boston的物理備資料庫的故障轉移的結果。
圖7-4 故障轉移到備資料庫
準備故障轉移
如果可能,在執行故障轉移之前,你應該傳遞儘可能多的可用的和未應用的主資料庫重做資料到備資料庫。
確保滿足在7.1.1 節,“準備角色轉換(故障轉移或切換)”中列出的先決條件。另外,對於故障轉移,下面的先決條件必須滿足:
z 如果故障轉移中包括當前執行在最大保護模式的備資料庫,首先透過在備資料庫上執行下面語句將其置於最大效能模式:
SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
然後,如果有合適的備資料庫可用,你能在故障轉移完成之後在新的主資料庫上重新設定期望的保護模式。
這是必須的,因為你不能故障轉移到一個處於最大保護模式中的備資料庫。另外,如果處於最大保護模式中的主資料庫還與備資料庫有活動聯絡,執行ALTER
DATABASE 語句來更改備資料庫從最大保護模式到最大效能模式將不會成功。因為故障轉移將原主資料庫從 Data Guard 配置中刪除了,所以這些特性服務於保護操作於最大保護模式中的主資料庫不受非故意的故障轉移的影響。
注:
不要故障轉移到備資料庫以測試備資料庫是否被正確更新。替代地: z 檢視 3.2.7 節,“檢驗物理備資料庫正確執行” z 檢視 4.2.6 節,“檢驗邏輯備資料庫正確執行”
當資料庫從一個角色轉換到另一個,DB_ROLE_CHANGE 系統事件會觸發。你能寫一個觸發器關聯這個系統事件,以在故障轉移發生後管理任務。當資料庫第一次在故障轉移過後開啟時該事件觸發,不管其新的角色(在故障轉移到物理備資料庫的情況下,系統事件在資料庫第一次在故障轉移操作後開啟時觸發)。你能查詢 V$DATABASE 檢視的
DATABASE_ROLE 列來確定資料庫的當前角色。檢視在 Oracle 資料庫應用開發指南-基礎中的系統管理事件表,以獲得更多細節。
要執行包含物理備資料庫的故障轉移,檢視7.2.2 節,“包含物理備資料庫的故障轉移”。要執行包含邏輯備資料庫的故障轉移,檢視 7.3.2 節,“包含邏輯備資料庫的故障轉移”。要使用 Data Guard Broker 執行故障轉移。檢視在 Oracle Data Guard Broker 中的“切換和故障轉移操作”相關章節。
7.2 包含物理備資料庫的角色轉換
本節描述如何執行包含物理備資料庫的切換和故障轉移。
7.2.1 包含物理備資料庫的切換
本小節描述如何執行切換。切換必須在當前主資料庫上發起,並且在目標備資料庫上完成。下面的步驟描述如何執行切換。
第1 步 檢驗是否可能執行切換。
在當前主資料庫上,在主資料庫上查詢V$DATABASE 固定檢視的
SWITCHOVER_STATUS 列,以檢驗是否可能執行切換。例如: SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO STANDBY
1 row selected
在SWITCHOVER_STATUS 列中的 TO STANDBY 值指出可能切換主資料庫到備角色。如果 TO STANDBY 值沒有顯示,則檢查 Data Guard 配置是否正確起作用(例如,檢查所有的 LOG_ARCHIVE_DEST_n 引數值被正確指定)。
如果在SWITCHOVER_STATUS 列中的值是 SESSIONS ACTIVE,執行在 A.4 節,“切換到備資料庫的問題”中描述的步驟,來確定並終止可能阻礙切換處理的活動使用者或 SQL
會話。如果,在執行這些步驟之後,SWITCHOVER_STATUS 列還是顯示 SESSION ACTIVE,你能透過新增 WITH SESSION SHUTDOWN 子句到步驟 2 中描述的 ALTER DATABASE
COMMIT TO SWITCHOVER TO PHYSICAL STANDBY 語句來成功執行切換。
檢視Oracle 資料庫參考以獲得 V$DATABASE 檢視的 SWITCHOVER_STATUS 列的其它有效值的相關資訊。
第2 步 在主資料庫上發起切換。
要更改當前主資料庫到物理備資料庫角色,在主資料庫上使用下面SQL 語句:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; 在這個語句完成後,主資料庫轉換到備資料庫。當前控制檔案在切換前備份到當前 SQL 會話跟蹤檔案。這使得有可能重構當前控制檔案,如果必要的話。
第3 步 關閉並重啟前主例項。
關閉前主例項,並重啟和安裝資料庫:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
在切換過程的這個點,兩個資料庫都配置為備資料庫(檢視圖 7-2)。
第4 步 檢驗 V$DATABASE 檢視中的切換狀態。
在你更改主資料庫到物理備角色,以及配置中的備資料庫接收到切換通知之後,你應該檢驗目標備資料庫是否處理切換通知,透過查詢目標備資料庫上的V$DATABASE 固定檢視的 SWITCHOVER_STATUS 列。
例如:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO_PRIMARY
1 row selected
如果SWITCHOVER_STATUS 列中的值是 SESSION ACTIVE,執行在 A.4 節,“切換到備資料庫的問題”中描述的步驟,來確定並終止可能阻礙切換處理的活動使用者或 SQL 會話。
如果,在執行這些步驟之後,SWITCHOVER_STATUS 列還是顯示 SESSION ACTIVE,你能處理到步驟 5,並過新增 WITH SESSION SHUTDOWN 子句到切換語句。檢視 Oracle 資料庫參考以獲得 V$DATABASE 檢視的 SWITCHOVER_STATUS 列的其它有效值的相關資訊。
第5 步 切換目標物理備資料庫角色到主角色。
當備資料庫例項安裝在重做應用模式或對只讀訪問開啟時,你能將物理備資料庫從備角色切換到主角色。必須是這些模式之一,主資料庫的切換請求才能被排程。在備資料庫處於適當的模式,在你希望更改主角色的物理備資料庫上,執行下面的SQL 語句:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
第6 步 完成備資料庫到主角色的轉換。
你執行的任務依賴於物理備資料庫是否曾經以只讀模式開啟過:
z 如果物理備資料庫自從上次啟動過後沒有以只讀模式開啟過,執行SQL ALTER
DATABASE OPEN 語句來開啟新的主資料庫:
SQL> ALTER DATABASE OPEN;
然後,跳到步驟7。
z 如果物理備資料庫自從上次啟動過後曾經以只讀模式開啟,你必須關閉目標備資料庫並重啟:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
目標物理備資料庫現在經歷到主資料庫角色的轉換。檢視5.4.1 節,“指定有 VALID_FOR 屬性的基於角色的目的地”和第 14 章,“LOG_ARCHIVE_DEST_n 引數屬性”以獲得使用 LOG_ARCHIVE_DEST_n VALID_FOR 屬性來確保 Data Guard 配置在角色轉換後正確操作的相關資訊。
注:
不需要關閉並重啟在切換的時候聯機的其它備資料庫(不包括在切換中的)。這些備資料庫在切換完成後將繼續正常起作用。
第7 步 如果必要,在備資料庫上重啟日誌應用服務。
對於新的物理備資料庫和Data Guard 配置中的每個其它物理或邏輯備資料庫,如果日誌應用服務沒有預先配置在切換過程中持續開啟,使用合適的命令來重啟日誌應用服務。檢視第 6 章,“日誌應用服務”以獲得如何配置及啟動日誌應用服務的相關資訊。
第8 步 開始傳送重做資料到備資料庫。在新的主資料庫上執行下面語句:
SQL> ALTER SYSTEM SWITCH LOGFILE;
7.2.2 包含物理備資料庫的故障轉移
本小節描述如何執行包含物理備資料庫的故障轉移。
在包含物理備資料庫的故障轉移過程中: z 在所有情況中,在故障轉移後,原主資料庫不能再參與在 Data Guard 配置中。
z 在大多數情況中,其它邏輯或物理備資料庫不直接參與配置中剩餘的故障轉移,並不必須關閉或重啟。
z 在一些情況中,可能有必要在配置新的主資料庫之後重建所有備資料庫。
這些情況在下面的故障轉移步驟中的適當位置描述。
在開始故障轉移之前,執行在7.1.4 節,“故障轉移”中記錄的儘可能多的步驟來為故障轉移準備挑選的備資料庫,然後進行 7.2.2 節,“包含物理備資料庫的故障轉移”作為故障轉移步驟。
注:
Oracle 推薦你只使用在下面小節中描述的故障轉移步驟和命令來執行故障轉移。不要使用 ALTER DATABASE ACTIVATE STANDBY DATABASE 來執行故障轉移,因為這條語句可能導致資料丟失。
故障轉移步驟
本小節描述了轉換挑選的物理備資料庫到主角色必須執行的步驟。任何也是配置中的一部分的其它物理或邏輯備資料庫將保留在配置中,並將不需要關閉或重啟。
如果目標備資料庫操作於使用日誌寫程式(LGWR)的最大保護模式或最大可用性模式,在歸檔重做日誌檔案中不應該存在中斷,你能直接進行到步驟 4。否則,從步驟 1 開始以確定是否必須執行一些手工中斷解決步驟。
第1 步 確定並解決歸檔重做日誌檔案中的任何中斷。
要在目標備資料庫上確定是否在歸檔重做日誌檔案中存在中斷,查詢
V$ARCHIVE_GAP 檢視。
V$ARCHIVE_GAP 檢視包含對於每個執行緒已知丟失的歸檔重做日誌檔案的序列號。返回的資料只反映最高的中斷。
例如:
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM
V$ARCHIVE_GAP;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- -------------- 1 90 92
在這個例子中,中斷包括執行緒1 的歸檔重做日誌檔案序號 90、91、和 92。如果可能,從主資料庫複製所有確定的丟失的歸檔重做日誌檔案到目標備資料庫,並註冊它們。這必須對於每個執行緒執行。
例如:
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
第2 步 重複步驟 1 直到解決所有中斷。
在步驟1 中執行的查詢只顯示最高的中斷資訊。在解決那個中斷後,你必須重複步驟 1
直到查詢返回零行。
第3 步 複製任何其它丟失的歸檔重做日誌檔案。
要確定是否還有其它丟失的歸檔重做日誌檔案,在目標備資料庫上查詢V$ARCHIVED_LOG 檢視以獲得每個執行緒的最高序列號。
例如:
SQL> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#)
2> OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;
THREAD LAST
---------- ---------- 1 100
從包含比目標備資料庫上可用的最高序列號更高序列號的主資料庫,複製任何可用的
歸檔重做日誌檔案到目標備資料庫並註冊它們。這必須對每個執行緒執行。例如:
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
在所有可用的歸檔重做日誌檔案已經註冊後,如步驟1 中描述地查詢 V$ARCHIVE_GAP 檢視,檢驗沒有更多的中斷在步驟 3 中引入。
注: 如果,當執行步驟 1 到 3 時,你不能解決在歸檔重做日誌檔案中的中斷(例如,因為你沒有訪問故障主資料庫所在的系統),在故障轉移過程中會發生資料丟失。
第4 步 在目標物理備資料庫上發起故障轉移。
執行下面語句以發起故障轉移:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
FORCE 關鍵詞終止目標物理備資料庫上活動的 RFS 程式,使得故障轉移能不用等待網路連線超時而立即進行:
注:
故障轉移新增一個重做結束的標識到最後一個歸檔的日誌檔案的頭部,併傳送重做到所有允許的對於主資料庫有效的目的地(使用 VALID_FOR=(PRIMARY_ROLE, *_LOGFILES) 或 VALID_FOR=(ALL_ROLE, *_LOGFILES)屬性指定)。
注:
在 SQL 語句中 FINISH 關鍵詞必須跟在所有其它關鍵詞後面,除了 FORCE、WAIT、或 NOWAIT。
第5 步 轉換物理備資料庫到主角色。
一旦SQL ALTER DATABASE RECOVER MANAGED STANDBY DATABASE …
FINISH FORCE 語句成功完成,透過執行下面 SQL 語句更改物理備資料庫到主資料庫:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
在執行這條SQL 語句之後,目標備資料庫經歷到主角色的轉換。作為結果,你不能再使用這個資料庫作為備資料庫,並且任何後繼的從原主資料庫接收的重做不能被應用。再故障轉移過程中,備重做日誌檔案在其它所有從原主資料庫匯出的備資料庫上被自動歸檔並恢復。只有當備目的地在新的主資料庫上正確定義時這才會發生。
沒有必要關閉並重啟任何其它在配置中沒有參與故障轉移的備資料庫。
第6 步 完成備資料庫到主資料庫角色的轉換。
你在本步驟執行的任務依賴於物理備資料庫是否曾經以只讀模式開啟過:
z 如果物理備資料庫自從上次啟動過後沒有以只讀模式開啟過,執行SQL ALTER
DATABASE OPEN 語句來開啟新的主資料庫:
SQL> ALTER DATABASE OPEN;
然後,跳到步驟7。
z 如果物理備資料庫自從上次啟動過後曾經以只讀模式開啟,你必須關閉目標備資料庫並重啟:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
目標物理備資料庫現在經歷到主資料庫角色的轉換。
檢視5.4.1 節,“指定有 VALID_FOR 屬性的基於角色的目的地”和第 14 章,
“LOG_ARCHIVE_DEST_n 引數屬性”以獲得使用 LOG_ARCHIVE_DEST_n VALID_FOR 屬性的相關資訊,使得 Data Guard 配置在角色轉換後正確操作。
第7 步 備份新的主資料庫。
在執行STARTUP 語句之前,備份新的主資料庫。立即執行備份是必要的安全措施,因為你無法在沒有完整的資料庫備份複製的情況下,恢復故障轉移之後的更改。
作為故障轉移的結果,原資料庫不能再參與在Data Guard 配置中,並且所有其它備資料庫現在接收和應用從新的主資料庫的重做資料。
第8 步 可選地,還原故障的主資料庫。
在故障轉移之後,原主資料庫不再參與在配置中。在執行故障轉移後,你可能將故障的主資料庫還原作為新的備資料庫,使用下述方法之一:
使用閃回資料庫來還原故障的主資料庫到故障轉移發生前的時間點,然後遵循12.4 節,
“在故障轉移後使用 Flashback 資料庫”中的過程將其轉換到備資料庫。
注:
在故障轉移前,你必須已經在舊的主資料庫上允許 Flashback 資料庫。檢視 Oracle 資料庫備份和恢復基礎以獲得更多資訊。
重建故障的資料庫並作為新的備資料庫將其新增到配置中。要在新的配置中重用舊的主資料庫,你必須使用新的主資料庫的備份複製將其重建為備資料庫。這個過程在3.2 節,
“建立物理備資料庫的逐步指導”或 4.2 節,“建立邏輯備資料庫的逐步指導”中描述。
使用Oracle 企業管理器或 DGMGRL REINSTATE DATABASE 命令,當連線重新建立時重建故障的主資料庫為新配置中的備資料庫。恢復的逐步指導在 Oracle Data Guard Broker 中描述。這個選項需要在故障轉移前允許閃回資料庫。
一旦故障的主資料庫被恢復並執行於備角色,你能選擇執行切換以執行資料庫的角色轉換到它們的原(故障前)角色。檢視7.2.1 節,“包含物理備資料庫的切換”以獲得更多資訊。
7.3 包含邏輯備資料庫的角色轉換
本節描述如何執行包含邏輯備資料庫的切換和故障轉移。
7.3.1 包含邏輯備資料庫的切換
當你執行切換,在主資料庫和邏輯備資料庫之間更改角色,總是在主資料庫上發起切換並在邏輯備資料庫上完成。這些步驟必須以所描述的順序執行,否則切換將不會成功。
注:
如果主資料庫是 RAC 資料庫,確保除了一個以外關閉所有例項,並且在發起切換之前禁止相應的執行緒。類似地,如果邏輯備資料庫是 RAC 資料庫,確保除了一個以外的所有例項關閉 SQL 應用,並且在發起切換之前禁止相應的執行緒。一旦切換操作成功完成,你能重新允許這些執行緒並啟動例項。雖然例項是關閉的,但是當它們重啟時,角色更改將不會自動傳遞到這些例項。
第1 步 在主資料庫上檢驗是否有可能執行切換
在當前的主資料庫上,查詢在主資料庫上的V$DATABASE 固定檢視的
SWITCHOVER_STATUS 列,以檢驗是否可能執行切換。
-
例如:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO STANDBY
1 row selected
在SWITCHOVER_STATUS 列中的 TO STANDBY 或 SESSIONS ACTIVE 的值指出可能
切換主資料庫到邏輯備角色。如果這些值之一沒有顯示,則檢驗Data Guard 配置是否正確起作用(例如,檢驗所有 LOG_ARCHIVE_DEST_n 引數值是否正確指定)。檢視 Oracle 資料庫參考以獲得 V$DATABASE 檢視的 SWITCHOVER_STATUS 列的其它有效值的相關資訊。
第2 步 為切換準備當前主資料庫。
要為邏輯備資料庫角色準備當前主資料庫,在主資料庫上執行下面的SQL 語句:
SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO LOGICAL STANDBY;
這條語句通知當前主資料庫,它將馬上切換到邏輯備角色並開始從新的主資料庫接收重做資料。你在主資料庫上執行這個步驟,為接收LogMiner Multiversioned Data Dictionary 記錄在當前邏輯備資料庫的重做流中做準備,如步驟 3 中描述。
如果這個操作成功,則V$DATABASE.SWITCHOVER_STATUS 列中顯示 PREPARING SWITCHOVER 值。
第3 步 為切換準備目標邏輯備資料庫。
使用下面命令在作為切換目標的邏輯備資料庫上建立LogMiner Multiversioned Data
Dictionary:
SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO PRIMARY;
這條語句也在邏輯備資料庫上開始重做傳輸服務,開始傳送其重做資料到當前主資料
庫和Data Guard 配置中的其它備資料庫。從這個邏輯備資料庫接收重做資料的站點接收重做資料但不應用。
依賴於完成的工作量和資料庫的大小,切換需要花費一些時間來完成。
當LogMiner Multiversioned Data Dictionary 正在重做流中記錄時,在邏輯備資料庫上的 V$DATABASE.SWITCHOVER_STATUS 最初顯示 PREPARING DICTIONARY。一旦這個成功完成,SWITCHOVER_STATUS 列顯示 PREPARING SWITCHOVER。
第4 步 確保當前主資料庫為將來的主資料庫的重做流做好準備。
在你能完成主資料庫到邏輯備角色的轉換之前,透過查詢主資料庫上的V$DATABASE 固定檢視的 SWITCHOVER_STATUS 列,檢驗 LogMiner Multiversioned Data Dictionary 是否被主資料庫接收到。沒有收到 LogMiner Multiversioned Data Dictionary,切換無法進行,因為當前的主資料庫將不能解釋從未來的主資料庫傳送的重做記錄。SWITCHOVER_STATUS 列顯示了切換的過程。
當查詢返回TO LOGICAL STANDBY 值,你能進行到步驟 5。例如:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO LOGICAL STANDBY
1 row selected
注:你能透過以下面的順序執行下面的語句來取消切換操作:
1.在主資料庫上取消切換:
SQL> ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;
2.在邏輯備資料庫上取消切換:
SQL> ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;
第5 步 切換主資料庫到邏輯備資料庫角色。
要完成主資料庫到邏輯備資料庫的角色轉換,執行下面SQL 語句:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY;
這條語句等待主資料庫上的所有當前事務結束,並阻止任何新的使用者開始新事務,並在切換將要提交的地方建立一個時間點。
執行這條語句也將阻止使用者對由邏輯備資料庫維護的資料進行更改。要確保更快地執行,確保主資料庫在執行切換語句之前處於安靜的狀態,沒有更新活動(例如,要求所有使用者暫時從主資料庫退出登入)。你能查詢V$TRANSACTIONS 檢視以獲得任何當前正在處理的事務的狀態,這些事務可能延遲這條語句的執行。
主資料庫現在可以經歷角色轉換以執行到備資料庫角色。
當主資料庫經歷角色轉換到邏輯備資料庫角色時,你不需要關閉和重啟資料庫。
第6 步 確保所有可用的重做應用到將要成為新的主資料庫的目標邏輯備資料庫上。
在你完成主資料庫到邏輯備角色的角色轉換,以及配置中的備資料庫接收到切換通知之後,你應該檢驗切換通知是否被目標備資料庫處理,透過查詢目標備資料庫上的
V$DATABASE 固定檢視的 SWITCHOVER_STATUS 列。一旦所有可用的重做記錄應用到邏輯備資料庫,SQL 應用自動關閉以準備預料中的角色轉換。
SWITCHOVER_STATUS 值更新以顯示切換中的過程。當狀態為 TO PRIMARY,你能進行步驟 7。
例如:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO PRIMARY
1 row selected
檢視Oracle 資料庫參考以獲得 V$DATABASE 檢視的 SWITCHOVER_STATUS 列的其它有效值的相關資訊。
第7 步 切換目標邏輯備資料庫到主資料庫角色。
在你希望切換到主角色的邏輯備資料庫上,使用下面的SQL 語句來切換邏輯備資料庫到主角色:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
沒有必要關閉並重啟在Data Guard 配置中的任何邏輯備資料庫。其它現有的邏輯備資料庫將在切換完成後繼續正常起作用。然而,所有現有的物理備資料庫在切換後無法參與到
Data Guard 配置中了。
第8 步 在新的邏輯備資料庫上開始 SQL 應用。
在新的邏輯備資料庫,開始SQL 應用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;
7.3.2 包含邏輯備資料庫的故障轉移
本小節描述如何執行包含邏輯備資料庫的故障轉移。包含邏輯備資料庫的故障轉移角色轉換需要在故障的主資料庫和所有旁觀邏輯備資料庫上執行正確的操作。如果在故障的主資料庫上沒有允許Flashback 資料庫,你必須從當前主資料庫獲得的備份重建資料庫。另外,你能遵照 12.4 節中描述的過程轉換故障的主資料庫為新的主資料庫的邏輯備資料庫。
依賴於配置的保護模式以及你選擇的重做傳輸服務,有可能自動恢復所有或部分主資料庫更改。
如果目標備資料庫操作於無資料丟失模式,在歸檔重做日誌檔案中將不存在中斷,你能直接進行步驟2。否則,從步驟 1 開始以確定是否必須執行手工中斷解決步驟。
第1步 複製和註冊任何丟失的重做日誌檔案到候選成為新主資料庫的目標邏輯備資料庫。
依賴於配置中斷元件條件,你可能訪問主資料庫上的歸檔重做日誌檔案。如果可用,做如下操作:
1.確定在邏輯備資料庫上是否丟失歸檔重做日誌檔案。
2.從主資料庫複製丟失的日誌檔案到邏輯備資料庫。
3.註冊複製的日誌檔案。
你能透過執行下面的語句來註冊歸檔重做日誌檔案到邏輯備資料庫。例如:
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE
2> '/disk1/oracle/dbs/log-%r_%s_%t.arc';
Database altered.
第2 步 確保所有可用的歸檔重做日誌檔案已應用。
在你要轉換到主角色的邏輯備資料庫上,透過查詢V$LOGSTDBY_PROGRESS 檢視檢驗所有可用的歸檔重做日誌檔案已應用。例如:
SQL> SELECT APPLIED_SCN, LATEST_SCN FROM V$LOGSTDBY_PROGRESS;
APPLIED_SCN LATEST_SCN
----------- ----------
190725 190725
當APPLIED_SCN 和 LASTEST_SCN 值相等時,所有可得到的資料已應用並且邏輯備資料庫現在包含與主資料庫可能一樣多的資料庫。
注:
如果在目標邏輯備資料上SQL 應用沒有活動,在目標備資料庫上執行下面語句以開始
SQL 應用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY FINISH;
Database altered.
檢視第 9 章,“管理邏輯備資料庫”和第 12 章,“Data Guard 場景”以獲得
V$LOGSTDBY_PROGRESS 檢視相關資訊。
第3 步 允許遠端目的地。
如果你前面沒有配置基於角色的目的地,如5.4.1 節,“使用 VALID_FOR 屬性指定基於角色的目的地”中所描述,對於新的主資料庫確定相應於遠端邏輯備目的地的初始化引數,並手工允許對於每個這些目的地的重做資料的歸檔。
例如,要允許對於由LOG_ARCHIVE_DEST_2 引數定義的遠端目的地的歸檔,執行下面語句:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;
要確保這個更改在如果新的主資料庫後來重啟後還能保持,更新適當的文字初始化引數檔案或伺服器引數檔案。總的來說,當資料庫操作於主角色,你必須允許歸檔到遠端目的地,並且當資料庫操作於備角色,你必須禁止歸檔到遠端目的地。
檢視5.4.1 節,“使用 VALID_FOR 屬性指定基於角色的目的地”和第 14 章,
“LOG_ARCHIVE_DEST_n 引數屬性”以獲得使用 LOG_ARCHIVE_DEST_n VALID_FOR 屬性來定義基於角色的目的地,以為將來的角色轉換做準備。
第4 步 啟用新的主資料庫。
在目標邏輯備資料庫(你轉換到新的主角色的)上執行下面的語句:
SQL> ALTER DATABASE ACTIVATE LOGICAL STANDBY DATABASE FINISH APPLY;
這條語句停止RFS 程式,在邏輯備資料庫成為主資料庫之前應用在備重做日誌檔案中的剩餘重做資料,停止 SQL 應用,並啟用資料庫為主資料庫角色。
如果沒有指定FINISH APPLY 子句,則從當前備重做日誌檔案未應用的重做在備資料庫成為主資料庫之前將不會應用。
第5 步 準備恢復其它備資料庫。
依賴於你能夠應用多少重做資料到新的主資料庫,你可能新增其它現有的邏輯備資料庫回到Data Guard 配置以作為備資料庫為新的主資料庫服務。在每個邏輯備資料庫上執行下述步驟以準備新增回到 Data Guard 配置:
1.在每個邏輯備資料庫上建立資料庫連結。
使用ALTER SESSION DISABLE GUARD 語句來繞過資料庫守衛並允許對邏輯備資料庫中的表的更改。例如,下面建立了到主資料庫 chicago 的資料庫連結:
SQL> ALTER SESSION DISABLE GUARD;
SQL> CREATE DATABASE LINK chicago
2> CONNECT TO username IDENTIFIED BY password USING 'chicago';
SQL> ALTER SESSION ENABLE GUARD;
在CREATE DATABASE LINK 語句中指定的資料庫使用者帳戶必須有在主資料庫上的 SELECT_CATALOG_ROLE 角色。
注:
在主資料庫開啟過後但在任何DDL 語句執行之前,你必須執行資料庫字典建立操作。如果在字典建立操作執行之前有任何DDL 語句執行,作為建立邏輯備資料的源,備份將變得無效。
檢視Oracle 資料庫管理員指南以獲得建立資料庫連結的更多相關資訊。
2.檢驗資料庫連結。
在邏輯備資料庫,透過使用資料庫連結執行下述查詢來檢驗資料庫連結是否正確配置:
SQL> SELECT * FROM DBA_LOGSTDBY_PARAMETERS@chicago;
如果查詢成功,則確認在步驟1 中建立的資料庫連結能在角色轉換期間使用。
第6 步 開始 SQL 應用。
在每個邏輯備資料庫上開始SQL 應用。
例如,下面的語句在chicago 資料庫上開始 SQL 應用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY NEW PRIMARY chicago;
當這條語句完成,所有剩餘的歸檔重做日誌檔案將已經被應用。依賴於要完成的工作,這個操作可能需要一定時間來完成。
如果返回ORA-16109 錯誤,你必須從新的主資料庫的備份複製重新建立邏輯備資料庫,然後將其新增到 Data Guard 配置。
下面的例子顯示了在新配置中的邏輯備資料庫上開始SQL 應用的失敗嘗試,chicago 是指向新的主資料庫的服務名:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY NEW PRIMARY chicago;
ALTER DATABASE START LOGICAL STANDBY APPLY NEW PRIMARY chicago
*
ERROR at line 1:
ORA-16109: failed to apply log data from previous primary
第7 步 備份新的主資料庫。
在Data Guard 資料庫故障轉移之後立即備份新的主資料庫。立即執行備份是必要的安
全措施,因為你不能在沒有完整資料庫備份複製的情況下恢復在故障轉移後進行的更改。
第8 步 還原故障的主資料庫。
在執行故障轉移之後,你可以選擇使用下述方法之一還原故障的主資料庫作為新的備資料庫:
z 使用閃回資料庫轉換故障的主資料庫到故障轉移發生前的時間點,然後遵循 12.4 節,“在故障轉換後使用閃回資料庫”中的過程將其轉換為備資料庫。
注:
在故障轉移之前你必須已經在舊的主資料庫上允許 Flashback 資料庫。檢視 Oracle 資料庫備份和恢復基礎以獲得更多資訊。
z 使用DBMS_LOGSTDBY.REBUILD PL/SQL過程來重建主資料庫為新的備資料庫。
在你執行該過程之前,你必須檢驗:
{ 查詢V$STANDBY_LOG或V$LOGFILE檢視以檢驗備重做日誌檔案已被歸檔
{ 查詢 DBA_LOGSTDBY_EVENTS 檢視以檢驗 LogMiner 字典建立成功完成
同時檢視:
在 Oracle 資料庫 PL/SQL 包和型別參考中的 DBMS_LOGSTDBY 包以獲得 REBUILD 子程式的相關資訊
z 當連線重新建立時,使用 Oracle 企業管理器或 DGMGRL REINSTATE DATABASE 命令來重建故障的主資料庫作為配置中的備資料庫。復原的逐步指導在 Oracle Data
Guard Broker 中描述。
遵循3.2 節,“建立物理備數庫的逐步指導”或 4.2 節,“建立邏輯備資料庫的逐步指導” 中過程,重建故障的資料庫並作為新的備資料庫將其新增到配置中。
一旦故障的主資料庫被還原並執行於備角色,你能選擇執行切換以轉換資料庫到它們的原(故障前)角色。檢視7.3.1 節,“包含邏輯備資料庫的切換”以獲得更多資訊。
7.4 在角色轉換後使用 Flashback 資料庫
在角色轉換後,你能選擇使用FLASHBACK DATABASE 命令來回複資料庫到角色轉換髮生前的時間點或系統更改號(SCN)。
在物理備資料庫環境中,你可能需要閃回主資料庫和所有備資料庫以維護Data Guard 配置。如果你閃回主資料庫到一個特定的 SCN 或時間,你必須閃回所有備資料到同樣(或更早)的 SCN 或時間。這樣,在開始重做應用後,物理備資料庫將自動開始應用從主資料庫接收到的重做資料。當以這種方式閃回主或備資料庫,你不需要考慮過去的切換。如果
SCN/時間是在過去切換之前,Oracle 能自動跨越過去的切換閃回。
注:
在角色轉換髮生之前必須在資料庫上允許 Flashback 資料庫。檢視 Oracle 資料庫備和恢復基礎以獲得更多資訊。
7.4.1 在切換後使用 Flashback 資料庫
在切換後,你能使用FLASHBACK DATABASE 命令返回資料庫到一個切換髮生前的時間或系統更改號(SCN)。
如果切換包含物理備資料庫,主和備資料庫角色在閃回操作期間保持不變。就是說,當資料庫閃回到你閃回資料庫的目標SCN 或時間時,資料執行的角色不能更改。在切換後但是在閃回前執行在物理備角色的資料庫,在 Flashback 資料庫操作後將還是執行在物理備角色。
如果切換包含邏輯備資料,閃回更改備資料庫的角色到你閃回資料庫到的目標SCN 或時間時的狀態。
7.4.2 在故障轉換後使用 Flashback 資料庫
你能使用Flashback 資料庫來回復主資料庫到故障轉換髮生前的時間點,然後將其轉換
為備資料庫。檢視12.4 節,“在故障轉換後使用 Flashback 資料庫”以獲得完整的逐步過程。
8 管理物理備資料庫
本章描述如何管理物理備資料庫。本章包含下述主題: z 啟動和關閉物理備資料庫
z 開啟備資料庫以用於只讀或讀/寫訪問 z 管理影響備資料庫的主資料庫事件 z 透過 OPEN RESETLOGS 語句恢復 z 監控主和備資料庫 z 為物理備資料庫調優日誌應用速度
在本章中的主題描述如何使用SQL 語句、初始化引數、和檢視來管理物理備資料庫。
檢視Oracle Data Guard Broker 來使用 Data Guard broker 來自動化本章中描述的管理任務。
8.1 啟動和關閉物理備資料庫
本節描述了用於啟動和關閉物理備資料庫的SQL*Plus 語句。
8.1.1 啟動物理備資料庫
要啟動物理備資料庫,使用SQL*Plus 以管理員許可權連線到資料庫,然後使用 SQL*Plus 的 STARTUP 或 STARTUP MOUNT 語句。當在物理備資料庫上使用時:
z STARTUP 語句啟動資料庫,作為物理備資料庫安裝資料庫,並開啟資料庫以用於只讀訪問。
z STARTUP MOUNT 語句作為物理備資料庫啟動並安裝資料庫,但不開啟資料庫。
一旦安裝,資料庫能接受從主資料庫的重做資料。然後你有開始重做應用或實時應用的選項,或開啟資料庫以用於只讀訪問。
例如:
1. 啟動並安裝物理備資料庫:
SQL> STARTUP MOUNT;
2. 開始重做應用或實時應用:
要開始重做應用,執行下面語句:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
2> DISCONNECT FROM SESSION;
要開始實時應用,執行下面語句:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
2> USING CURRENT LOGFILE;
在主資料庫上,查詢V$ARCHIVED_DEST_STATUS 檢視中的 RECOVERY_MODE 列,它顯示備資料庫的操作,對於重做應用是 MANAGED_RECOVERY,對於實時應用是
MANAGED REAL TIME APPLY。
檢視6.3 節以獲得重做應用相關資訊,6.2.1 節以獲得實時應用相關資訊,以及 8.2 節以獲得開啟物理備資料庫以用於只讀或讀/寫操作。
注:
當你首次在新建立的還沒從主資料庫接受任何重做資料的物理備資料庫上開始重做應用,可能會返回 ORA-01112 資訊。這指出重做應用不能確定媒質恢復的開始序列號。如果發生這種情況,你必須在備資料庫上手工檢索並註冊歸檔重做日誌檔案,或者等待自動歸檔在重啟重做應用前發生。
8.1.2 關閉物理備資料庫
要關閉物理備資料庫並停止重做應用,使用SQL*Plus SHUTDOMN 語句。控制沒有返回到發起資料庫關閉的會話,直到關閉完成。
如果主資料庫啟動並執行,延遲主資料庫上的目的地並在關閉備資料庫之前執行日誌切換。
要在關閉資料庫之前停止重做應用,使用下述步驟:
1.執行下面查詢以發現備資料庫是執行重做應用還是實時應用。如果 MRP0 或 MRP 程式存在,則備資料庫應用重做。
SQL> SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY;
2.如果重做應用在執行,如下述例子中所示將其取消:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
3.關閉備資料庫:
SQL> SHUTDOWN IMMEDIATE;
8.2 開啟備資料庫以用於只讀或讀/寫訪問
當備資料庫開啟以用於只讀訪問時,使用者能查詢備資料庫當時不能更新。因此,你能透過使用備資料庫用於報表用途來減少主資料庫上的負載。你能定期地開啟備資料庫以用於只讀訪問,並執行特別的查詢來檢驗重做應用正確地更新備資料庫。(注意對於分散式查詢,在你能在只讀資料庫上執行查詢之前,你必須首先執行ALTER DATABASE SET
TRANSACTION READ ONLY 語句。)
圖8-1 顯示了備資料庫開啟以用於只讀訪問。
圖8-1 備資料庫開啟以用於只讀訪問
z 開啟物理備資料庫以用於只讀訪問
物理備資料庫能以讀/寫模式臨時地開啟以用於開發、報表、或測試用途,然後閃回到過去的點以回覆到物理備資料庫。當資料庫閃回時,Data Guard 自動與主資料庫同步備資料庫,而不需要從主資料庫的備份複製重建物理備資料庫。
同時檢視:
12.6 節以獲得描述啟用物理備資料庫作為讀/寫報表資料庫的場景,然後重新與主資料庫同步資料庫
8.2.1 評估是否開啟備資料庫
當你決定是否開啟物理備資料庫以用於只讀或讀/寫訪問,考慮下面:
z 只讀開啟物理備資料庫可能延長從故障或斷電恢復所需的時間,因為資料庫必須
在故障轉換後重啟。
只要物理備資料庫自從上次啟動後沒有隻讀開啟過,在故障轉換後沒有必要重啟,因而增加系統可用性。
z 當備資料庫開啟以用於只讀或讀/寫訪問,它不應用從主資料庫接受的重做資料,
因而它沒有與主資料庫保持事務一致性。
當物理備資料庫開啟時,從主資料庫的重做資料由備資料庫接收,但是日誌檔案不被應用。在一些點上,你需要在備資料庫上繼續重做應用,並應用歸檔重做日誌檔案以重新與主資料庫同步備資料庫。因為應用任何累積的歸檔重做日誌檔案需要額外的時間,將備資料庫開啟以用於只讀訪問能增加完成故障轉移或切換所需的時間。
如果你在備系統上配置超過一個備資料庫,你能使用物理備資料庫以用於報表用途或作為克隆資料庫的同時也維持快速完成故障轉移或切換的能力。
例如,基於你的業務需求,你可能: z 配置兩個物理備資料庫,一個備資料庫總是執行重做應用,與主資料庫儘可能保持一致,另一個備資料庫在業務時間以只讀模式開啟以用於報表用途。
z 配置一個物理備資料庫來維護主資料庫的複製以用於災難恢復用途,並同時配置一個邏輯備資料庫來減負需要從主資料庫訪問最近的資料的報表任務。
當在同一系統配置超過一個備資料庫,考慮使用LOG_ARCHIVE_DEST_n 初始化引數的 DEPENDENCY 屬性來定義一個歸檔目的地來代表所有目的地接收重做資料,而不是傳送重做資料到每個單獨目的地。檢視 5.7.5 節以獲得更多資訊。
8.2.2 開啟物理備資料庫以用於只讀訪問
你能使用下述過程在將物理備資料庫開啟以用於只讀訪問和執行重做應用之間切換。
要備資料庫當前關閉時開啟以用於只讀訪問:
使用下面語句啟動、安裝、並開啟資料庫以用於只讀訪問:
SQL> STARTUP;
當備資料庫當前執行重做應用時開啟以用於只讀訪問:
1. 取消重做應用:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
2.開啟資料庫以用於只讀訪問:
SQL> ALTER DATABASE OPEN;
你不需要關閉例項來開啟以用於只讀訪問。
注:
預設地,ALTER DATABASE OPEN 語句以只讀模式開啟物理備資料庫。Oracle 資料庫基於控制檔案中的資訊確定這是否是物理備資料庫。
要從開啟以用於只讀訪問更改備資料庫到執行重做應用:
1.在備資料庫上終止所有活動的使用者會話。
2.重啟重做應用。要開始重做應用,執行下面語句:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
2> DISCONNECT FROM SESSION;
要允許實時應用,包括USING CURRENT LOGFILE 子句:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
2> USING CURRENT LOGFILE;
你不需要關閉例項來開始任何這些應用模式之一。
8.3 管理影響備資料庫的主資料庫事件
要防止可能的問題,你必須注意在主資料庫上影響備資料庫的事件,並學習如何響應它們。本節描述這些事件和對於這些事件建議的響應。在一些情況中,在主資料庫上發生的事件或更改自動透過重做資料傳播到備資料庫,因而在備資料庫上不需要額外的操作。在其它情況中,你可能需要在備資料庫上執行維護任務。
表8-1 指出在主資料庫上進行的更改是否需要資料庫管理員(DBA)額外的介入來傳播到備資料庫。也能很簡短地描述如何響應這些事件。響應的詳細描述在提供的小節參考中描述。
下面的事件由重做傳輸服務和重做應用自動管理,因此不需要資料庫管理員的介入: z 使用 ENABLE THREAD 或 DISABLE THREAD 子句執行的 SQL ALTER
DATABASE 語句。
z 表空間的狀態更改(更改到讀/寫或只讀,置於聯機或離線)。
z 當 STANDBY_FILE_MANAGEMENT 初始化引數設為 AUTO 時,新增資料檔案或建立表空間。
表8-1 在更改到主資料庫後需要在備資料庫上的操作
參考 |
在主資料庫上進行的更改 |
在備資料庫上需要的操作 |
8.3.1 節 |
新增資料檔案或建立表空間 |
如果你沒有設定STANDBY_FILE_MANAGEMENT初始化引數為 AUTO,你必須複製新資料檔案到備資料庫。 |
8.3.2 節 |
刪去或刪除表空間或資料檔案 |
在包含 DROP 或 DELETE 命令的歸檔重做日誌檔案應用後從主和備資料庫刪除資料檔案。 |
8.3.3 節 |
使用可傳輸表空間 |
在主和備資料庫之間移動表空間。 |
8.3.4 節 |
重新命名資料檔案 |
在備資料庫上重新命名資料檔案。 |
8.3.5 節 |
新增或刪除重做日誌檔案 |
在備資料庫上同步更改。 |
8.3.6 節 |
使用 NOLOGGING 或 UNRECOVERABLE 子句執行 DML 或 DDL 操作 |
傳送包含未記錄更改的資料檔案到備資料庫。 |
第 13 章 |
更改初始化引數 |
動態更改備引數或關閉備資料庫並更新初始化引數。 |
8.3.1 新增資料檔案或建立表空間
初始化引數,STANDBY_FILE_MANAGEMENT,允許你控制是否向主資料庫的新增資料檔案自動傳播到備資料庫,如下:
z 如果你在備資料庫伺服器引數檔案(SPFILE)中設定
STANDBY_FILE_MANAGEMENT 初始化引數為 AUTO,則任何在主資料庫上建立的新資料檔案一樣自動建立在備資料庫上。
z 如果你沒有指定 STANDBY_FILE_MANAGEMENT 初始化引數,或者你設定為
MANUAL,則當你新增資料檔案到主資料庫時你必須手工複製新資料檔案到備資料庫。
注意如果你從其它資料庫複製現有的資料檔案到主資料庫,則你必須也複製新資料檔案到備資料庫並重建備控制檔案,不管STANDBY_FILE_MANAGEMENT 初始化引數的設定。
下面小節提供了當STANDBY_FILE_MANAGEMENT 初始化引數分別設定為 AUTO 和
MAMUAL 時,新增資料檔案到主資料庫的例子。
8.3.1.1 當 STANDBY_FILE_MANAGEMENT 設為 AUTO 時
下面的例子顯示了當STANDBY_FILE_MANAGEMENT 初始化引數設定為 AUTO 時添
加新資料檔案到主和備資料庫所需的步驟。
1.新增新表空間到主資料庫:
SQL> CREATE TABLESPACE new_ts DATAFILE
'/disk1/oracle/oradata/payroll/t_db2.dbf'
2> SIZE 1m AUTOEXTEND ON MAXSIZE UNLIMITED;
2.歸檔當前的聯機重做日誌檔案,使得重做資料將被傳送到並在備資料庫上應用:
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
3.檢驗新資料檔案新增到主資料庫:
SQL> SELECT NAME FROM V$DATAFILE;
NAME
--------------------------------------------------------------
/disk1/oracle/oradata/payroll/t_db1.dbf
/disk1/oracle/oradata/payroll/t_db2.dbf
4.檢驗新資料檔案新增到備資料庫:
SQL> SELECT NAME FROM V$DATAFILE;
NAME
--------------------------------------------------------------
/disk1/oracle/oradata/payroll/s2t_db1.dbf
/disk1/oracle/oradata/payroll/s2t_db2.dbf
8.3.1.2 當 STANDBY_FILE_MANAGEMENT 設為 MANUAL 時本小節顯示當STANDBY_FILE_MANAGEMENT 初始化引數設為 MANUAL 時,如何新增新資料檔案到主和備資料庫。當備資料檔案位於裸裝置上時,你必須設定
STANDBY_FILE_MANAGEMENT 初始化引數為 MANUAL。本小節也描述如何在錯誤發生後從錯誤中恢復。
注: 不要在使用 Oracle Managed Files 的資料庫上使用下面的過程。同樣,如果在主和備伺服器上的裸裝置路徑名不是相同,使用 DB_FILE_NAME_CONVERT 初始化引數來轉換路徑名。
8.3.1.2.1 使用帶裸裝置的 STANDBY_FILE_MANAGEMENT 引數透過設定 STANDBY_FILE_MANAGEMENT 引數為 AUTO,不管新資料檔案在主資料庫上是新增還是刪除,相應的更改在備資料庫上就進行,不需要手工介入。只要備資料庫使用檔案系統這就是正確的。如果備資料庫使用裸裝置作為資料檔案,則
STANDBY_FILE_MANAGEMENT 初始化引數將繼續工作,但是需要手工介入。這個手工介入包括確保,裸裝置在備資料庫上的日誌應用服務恢復將要建立新資料檔案的重做資料之前存在。在主資料庫上,建立新的表空間,其資料檔案位於裸裝置。在同一時間,在備資料庫上建立同樣的裸裝置。例如:
SQL> CREATE TABLESPACE MTS2 DATAFILE '/dev/raw/raw100' size 1m;
Tablespace created.
SQL> ALTER SYSTEM SWITCH LOGFILE; System altered.
備資料庫當作裸裝置已經存在,自動新增資料檔案。備警告日誌顯示如下:
Fri Apr 8 09:49:31 2005
Media Recovery Log
/u01/MILLER/flash_recovery_area/MTS_STBY/archivelog/2005_04_08/o1
_mf_1_7_15ffgt0z_.arc
Recovery created file /dev/raw/raw100 Successfully added datafile 6 to media recovery
Datafile #6: '/dev/raw/raw100'
Media Recovery Waiting for thread 1 sequence 8 (in transit)
然而,如果裸裝置在主系統上但是沒有在備上建立,則MRP 程式將會由於檔案建立錯
誤關閉。例如,在主資料庫上執行下面語句:
SQL> CREATE TABLESPACE MTS3 DATAFILE '/dev/raw/raw101' size 1m;
Tablespace created.
SQL> ALTER SYSTEM SWITCH LOGFILE; System altered.
備系統還沒有建立/Dave/raw/raw101 裸裝置。備警告日誌在恢復歸檔時顯示下述資訊:
Fri Apr 8 10:00:22 2005
Media Recovery Log
/u01/MILLER/flash_recovery_area/MTS_STBY/archivelog/2005_04_08/o1
_mf_1_8_15ffjrov_.arc
File #7 added to control file as 'UNNAMED00007'.
Originally created as:
'/dev/raw/raw101'
Recovery was unable to create the file as:
'/dev/raw/raw101'
MRP0: Background Media Recovery terminated with error 1274
Fri Apr 8 10:00:22 2005
Errors in file /u01/MILLER/MTS/dump/mts_mrp0_21851.trc:
ORA-01274: cannot add datafile '/dev/raw/raw101' - file could not be created
ORA-01119: error in creating database file '/dev/raw/raw101'
ORA-27041: unable to open file
Linux Error: 13: Permission denied
Additional information: 1
Some recovered datafiles maybe left media fuzzy
Media recovery may continue but open resetlogs may fail
Fri Apr 8 10:00:22 2005
Errors in file /u01/MILLER/MTS/dump/mts_mrp0_21851.trc:
ORA-01274: cannot add datafile '/dev/raw/raw101' - file could not be created
ORA-01119: error in creating database file '/dev/raw/raw101'
ORA-27041: unable to open file
Linux Error: 13: Permission denied
Additional information: 1
Fri Apr 8 10:00:22 2005
MTS; MRP0: Background Media Recovery process shutdown ARCH: Connecting to console port...
8.3.1.2.2 從錯誤中恢復
要糾正8.3.1.2.1 節中描述的問題,執行下面步驟:
1.在備資料庫上建立裸分割槽,並賦予許可權給 Oracle 使用者。
2.查詢 V$DATAFILE 檢視。例如:
SQL> SELECT NAME FROM V$DATAFILE;
NAME
--------------------------------------------------------------
/u01/MILLER/MTS/system01.dbf
/u01/MILLER/MTS/undotbs01.dbf
/u01/MILLER/MTS/sysaux01.dbf
/u01/MILLER/MTS/users01.dbf
/u01/MILLER/MTS/mts.dbf
/dev/raw/raw100
/u01/app/oracle/product/10.1.0/dbs/UNNAMED00007
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL;
SQL> ALTER DATABASE CREATE DATAFILE
2 '/u01/app/oracle/product/10.1.0/dbs/UNNAMED00007'
3 AS
4 '/dev/raw/raw101';
3.在備警告日誌中你應該看到類似如下的資訊:
Fri Apr 8 10:09:30 2005 alter database create datafile
'/dev/raw/raw101' as '/dev/raw/raw101'
Fri Apr 8 10:09:30 2005
Completed: alter database create datafile
'/dev/raw/raw101' a
4.在備資料庫上,設定 STANDBY_FILE_MANAGEMENT 為 AUTO 並重啟重做應用:
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
SQL> RECOVER MANAGED STANDBY DATABASE DISCONNECT;
在這個點重做應用使用新的裸裝置資料庫並且恢復繼續。
8.3.2 刪去表空間和刪除資料檔案
當你在主資料庫刪除一個或更多資料檔案或者刪去一個或更多表空間時,你也需要刪
除備資料庫中的相應資料檔案。下面小節提供了當STANDBY_FILE_MANAGEMENT 初始化引數設為 AUTO 或 MANUAL 時,刪去表空間和刪除資料檔案的例子。
8.3.2.1 當 STANDBY_FILE_MANAGEMENT 設為 AUTO 或 MANUAL 時不管STANDBY_FILE_MANAGEMENT 初始化引數設為 AUTO 還是 MANUAL 下面過
程都起作用,如下:
1.從主資料庫刪除表空間
SQL> DROP TABLESPACE tbs_4; SQL> ALTER SYSTEM SWITCH LOGFILE;
2.確保重做應用正在執行(使得更改應用到備資料庫)。如果下面查詢返回 MRP 或 MRP0 程式,重做正在執行。
SQL> SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY;
要檢驗刪除的資料檔案不再是資料庫的一部分,查詢 V$DATAFILE 檢視。
3.在歸檔重做日誌檔案應用到備資料庫上後,在備系統上刪除相應的資料檔案。例如:
% rm /disk1/oracle/oradata/payroll/s2tbs_4.dbf
4.在主資料庫上,在確保備資料庫應用刪除表空間的重做資訊的,你能刪除表空間的
資料檔案。例如:
% rm /disk1/oracle/oradata/payroll/tbs_4.dbf
8.3.2.2 使用 DROP TABLESPACE INCLUDING CONTENTS ANDDATAFILES 你能在主資料庫上執行SQL DROP TABLESPACE INCLUDING CONTENTS AND
DATAFILES 語句來在主和備資料庫上同時刪除資料檔案。要使用這個語句, STANDBY_FILE_MANAGEMENT 初始化引數必須設為 AUTO。例如,要在主站點刪去表空間:
SQL> DROP TABLESPACE INCLUDING CONTENTS AND DATAFILES tbs_4;
SQL> ALTER SYSTEM SWITCH LOGFILE;
8.3.3 使用帶物理備資料庫的可傳輸表空間
你能使用Oracle 可傳輸表空間特性來移動 Oracle 資料庫的一個子集,並插入其它Oracle
資料庫,根本地在資料庫之間移動表空間。
當使用物理備時,要移動並複製一系列表空間到主資料庫,執行下述步驟:
1.生成一個包含要傳輸表空間集的資料檔案的可傳輸表空間集,和包含該表空間集的結構資訊的匯出檔案。
2.傳輸表空間集: a.複製資料檔案和匯出檔案到主資料庫。
b.複製資料檔案到備資料庫。
資料檔案必須複製到由DB_FILE_NAME_CONVERT 初始化引數定義的目錄。如
果沒有定義DB_FILE_NAME_CONVERT,則在包含可傳輸表空間的重做資料應用並失敗後,執行 ALTER DATABASE RENAME FILE 語句來更改備控制檔案。
STANDBY_FILE_MANAGEMENT 初始化引數必須設為 AUTO。
3.插入表空間。
呼叫Data Pump 工具來插入表空間集到主資料庫。重做資料將生成並應用到備站
點以插入表空間到備資料庫。
對於可傳輸表空間相關的更多資訊,檢視Oracle 資料庫管理員指南。
8.3.4 在主資料庫中重新命名資料檔案
當你在主資料庫中重新命名一個或更多資料檔案時,更改沒有傳播到備資料庫。因此,
如果你想在備資料庫上重新命名同樣的資料檔案,你必須手工在備資料庫上進行等同的更改,因為該更改不會自動執行,即使STANDBY_FILE_MANAGEMENT 初始化引數設為 AUTO。下述步驟描述瞭如果在主資料庫中重新命名資料檔案和手工傳播更改到備資料庫。
1.要在主資料庫中重新命名資料檔案,將表空間離線:
SQL> ALTER TABLESPACE tbs_4 OFFLINE;
2.從 SQL 提示符退出並執行作業系統命令,如下面的 UNIX mv 命令,來在主資料庫上重新命名資料檔案:
% mv /disk1/oracle/oradata/payroll/tbs_4.dbf
/disk1/oracle/oradata/payroll/tbs_x.dbf
3.在主資料庫中重新命名資料檔案並將表空間聯機:
SQL> ALTER TABLESPACE tbs_4 RENAME DATAFILE
2> '/disk1/oracle/oradata/payroll/tbs_4.dbf'
3> TO '/disk1/oracle/oradata/payroll/tbs_x.dbf'; SQL> ALTER TABLESPACE tbs_4 ONLINE;
4.連線到備資料庫,查詢 V$ARCHIVED_LOG 檢視來檢驗所有歸檔重做日誌檔案都被應用了,然後停止重做應用:
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY
SEQUENCE#;
SEQUENCE# APP
--------- ---
8 YES
9 YES
10 YES
11 YES
4 rows selected.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
5.關閉備資料庫:
SQL> SHUTDOWN;
6.在備站點使用作業系統命令重新命名資料檔案,如 UNIX mv 命令:
% mv /disk1/oracle/oradata/payroll/tbs_4.dbf
/disk1/oracle/oradata/payroll/tbs_x.dbf
7.啟動並安裝備資料庫:
SQL> STARTUP MOUNT;
8.重新命名備控制檔案中的資料檔案。注意 STANDBY_FILE_MANAGEMENT 初始化引數必須設定為 MANUAL。
SQL> ALTER DATABASE RENAME FILE
'/disk1/oracle/oradata/payroll/tbs_4.dbf'
2> TO '/disk1/oracle/oradata/payroll/tbs_x.dbf';
9.在備資料庫上,重啟重做應用:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
2> DISCONNECT FROM SESSION;
如果你沒有在備系統上重新命名相應的資料檔案,然後試圖重新整理備資料庫控制檔案,備
資料庫將會企圖使用重新命名的資料檔案,但是它將無法找到。因此,你將在警告日誌中看到類似於如下的錯誤資訊:
ORA-00283: recovery session canceled due to errors
ORA-01157: cannot identify/lock datafile 4 - see DBWR trace file
ORA-01110: datafile 4: '/Disk1/oracle/oradata/payroll/tbs_x.dbf'
8.3.5 新增或刪除聯機重做日誌檔案
有時需要更改聯機重做日誌檔案的大小和數目來調優資料庫。你能向主資料庫新增聯
機重做日誌檔案組或成員而不影響備資料庫。類似地,你能從主資料庫刪去日誌檔案組或成員而不影響你的備資料庫。然而,這些更改在切換後影響備資料庫的效能。
注意: 無論何時你新增一個聯機重做日誌檔案到主資料庫,你應該新增相應的聯機和備重做日誌檔案到備資料庫。
例如,如果主資料庫有10 個聯機重做日誌檔案,備資料庫有 2 個,然後你切換到備數
據庫使得其作為新的主資料庫起作用,新的主資料庫被迫比原主資料庫更頻繁地歸檔。因此,當你在主站點新增或刪除一個聯機重做日誌檔案,透過下面這些步驟在備資料庫中同步更改是很重要的: 1.如果重做應用正在執行,你必須在你能更改日誌檔案之前取消重做應用。
2.如果 STANDBY_FILE_MANAGEMENT 初始化引數設為 AUTO,更改該值為
MANUAL。
3.新增或刪去一個聯機重做日誌檔案: z 要新增一個聯機重做日誌檔案,使用如下的 SQL 語句:
SQL> ALTER DATABASE ADD LOGFILE
'/disk1/oracle/oradata/payroll/prmy3.log' SIZE 100M
z 要刪去一個聯機重做日誌檔案,使用如下的 SQL 語句:
SQL> ALTER DATABASE DROP LOGFILE
'/disk1/oracle/oradata/payroll/prmy3.log';
4.在每個備資料庫上充分你在步驟 3 中使用的語句。
5.還原 STANDBY_FILE_MANAGEMENT 初始化引數和重做應用選項到它們的原始狀態。
8.3.6 NOLOGGING 或不可恢復的操作
當你使用NOLOGGING 或 UNRECOVERABLE 子句執行 DML 或 DDL 操作,備資料庫變得無效並行可能需要很多地 DBA 管理活動來修復。你能指定帶 FORCELOGGING 子句的 SQL ALTER DATABASE 或 SQL ALTER TABLESPACE 語句來覆蓋 NOLOGGING 設定。
然而,該語句將不會修復已經無效的資料庫。
檢視12.10 節以獲得在使用 NOLOGGING 子句之後恢復相關的資訊。
8.4 透過 OPEN RESETLOGS 語句恢復
Data Guard 允許在物理備資料庫上的恢復在主資料庫以 RESETLOGS 選項開啟後繼續。當在主資料庫上執行ALTER DATABASE OPEN RESETLOGS語句時,資料庫的化身改變了,建立了新的重做資料分支。
當物理備資料庫接受到新的重做資料分支,重做應用自動取得新的重做資料分支。對於物理備資料庫,如果備資料庫沒有應用新的重置日誌SCN 以前的重做資料(新的重做資料分支起點以前),則不需要手工介入。下面的表描述如何與主資料庫分支重新同步備資料庫。
如果備資料庫… 則… 執行這些步驟…
還沒有應用新的重置日誌 SCN 重做應用自動取得新的以前的重做資料(新的重做資料 重做分支。 分支起點以前) |
沒有手工介入的必要。MRP 自動與新 的重做資料分支的備資料庫重新同步。 |
已經應用了新的重置日誌 SCN 備資料庫恢復到新的重以前的重做資料(新的重做資料 做資料分支的後面。 分支起點以前)並且在備資料庫上允許 Flashback 資料 |
1. 遵循在 12.5 節中的過程來閃回物理備資料庫。 2. 重啟重做應用來繼續重做資料的應用到新的重置日誌分支。 MRP 自動與新的分支重新同步備資料庫。 |
已經應用了新的重置日誌SCN主資料庫在指出的主數遵循在第 3 章中的過程重建物理備數以前的重做資料(新的重做資料 據庫分支從備資料庫分據庫。
分支起點以前)並且在備資料庫 叉。
上沒有允許Flashback 資料
從新的重做資料分支丟失介於MRP 不能繼續直到檢索 從每個分支定位並註冊丟失的歸檔期間的歸檔重做日誌檔案 到丟失的日誌檔案。 重做日誌檔案。
從前面重做資料分支的結尾丟MRP 不能繼續直到檢索 從前面的分支定位並註冊丟失的歸失歸檔重做日誌檔案 到丟失的日誌檔案。 檔重做日誌檔案。
檢視Oracle 資料庫備份和恢復高階使用者指導以活動資料庫化身的更多相關資訊,透過
OPEN RESETLOGS 操作恢復,和 Flashback 資料庫。
8.5 監控主和備資料庫
本節給你一個概述,從中可以找到用於監控在Data Guard 環境中的主和備資料庫的資訊。
本節包含下述主題: z 警告日誌 z 動態效能檢視(固定檢視) z 監控恢復過程 z 監控在物理備資料庫上的日誌應用服務
表8-2 總結了通常在主資料庫上出現的事件,它們指向檔案和檢視,從那裡你能監控這些在主和備站點上的事件。
表8-2 定位在主資料庫上哪裡能監控普通活動
主資料庫事件 |
主站點資訊 |
備站點資訊 |
指定 ENABLE THREAD 或 DISABLE THREAD 子句的 SQL ALTER DATABASE 語 句執行了 |
z 警告日誌 z V$THREAD 檢視 |
警告日誌 |
當前資料庫角色,保護模式和級別,切換狀態,和快速啟動故障轉移資訊 |
V$DATABASE |
V$DATABASE |
重做日誌更改了 |
z 警告日誌 z V$LOG 檢視 z V$LOGFILE 檢視的 STATUS 列 |
警告日誌 |
CREATE CONTROLFILE 語句執行了 |
警告日誌 |
警告日誌 |
管理的恢復執行了 |
警告日誌 |
警告日誌 |
表空間狀態更改了(改為讀 /寫或只讀,置於聯機或離線 |
z DBA_TABLESPACES 檢視 z 警告日誌 |
V$RECOVER_FILE 檢視 |
資料檔案新增或表空間建立 |
z DBA_DATA_FILES 檢視 z 警告日誌 |
z V$DATAFILE 檢視 z 警告日誌 |
表空間刪去 |
z DBA_DATA_FILES 檢視 z 警告日誌 |
z V$DATAFILE 檢視 z 警告日誌 |
表空間或資料檔案離線,或資料檔案被刪除離線 |
z V$RECOVER_FILE 檢視 z 警告日誌 z DBA_TABLESPACES |
z V$RECOVER_FILE 檢視 z DBA_TABLESPACES |
重新命名資料檔案 |
z V$DATAFILE z 警告日誌 |
z V$DATAFILE 檢視 z 警告日誌 |
未記錄的或不可恢復的操作 |
z V$DATAFILE 檢視 z V$DATABASE 檢視 |
警告日誌 |
恢復過程 |
z V$ARCHIVE_DEST_STATUS 檢視 z 警告日誌 |
z V$ARCHIVED_LOG 檢視 z V$LOG_HISTORY 檢視 z V$MANAGED_STANDBY 檢視 z 警告日誌 |
重做傳輸狀態和過程 |
z V$ARCHIVE_DEST_STATUS 檢視 z V$ARCHIVED_LOG 檢視 z V$ARCHIVE_DEST 檢視 z 警告日誌 |
z V$ARCHIVED_LOG 檢視 z 警告日誌 |
自動擴充套件資料檔案 |
警告日誌 |
警告日誌 |
執行 OPEN RESETLOGS 或 CLEAR UNARCHIVED LOGFILES 語句 |
警告日誌 |
警告日誌 |
更改初始化引數 |
警告日誌 |
警告日誌 |
8.5.1 警告日誌
資料庫警告日誌是資訊和錯誤的按時間排序的記錄。除了提供Oracle 資料庫相關資訊以外,它也包括 Data Guard 特定操作的相關資訊,包括如下:
z 管理操作如下面 SQL 語句:ALTER DATABASE RECOVER MANAGED
STANDBY,STARTUP,SHUTDOWN,ARCHIVE LOG,和 RECOVER 的相關資訊
z 由後臺程式如 ARC0,MRP0,RFS,LGWR 報告的管理操作的相關錯誤 z 管理操作的完整時間戳
警告日誌也提供指向由指定程式生成的跟蹤或轉儲檔案。
8.5.2 動態效能檢視(固定檢視)
Oracle 資料庫包含一系列基礎檢視。這些檢視經常被稱為動態效能檢視,因為它們是在資料庫開啟和使用中是連續更新的,並且它們的內容主要與效能相關。這些檢視也稱為固定檢視,因為它們不能被資料庫管理員更改或刪除。
這些檢視名字以V$或 GV$字首,例如,V$ARCHIVE_DEST 或 GV$ARCHIVE_DEST。
標準動態效能檢視(V$固定檢視)儲存本地例項相關資訊。相對地,全域性動態效能檢視(GV$固定檢視)儲存在 Real Applications Cluster(RAC)中所有開啟例項的相關資訊。每個 V$固定檢視有一個相應的 GV$固定檢視。在 GV$固定檢視上的選擇使用並行查詢從程式來獲得所有例項上的資訊。檢視第 16 章,“Oracle Data Guard 相關檢視”和“Oracle 資料庫參考”以獲得額外資訊。
8.5.3 監控恢復過程
本小節顯示在8.5.2 節中討論的檢視型別的一些例子,以用來監控 Data Guard 環境中的
恢復過程。它包含下述例子: z 監控程式活動 z 確定重做應用過程 z 確定歸檔重做日誌檔案的位置和建立者
z 檢視 OPEN RESETLOGS 前後的資料庫化身 z 檢視歸檔重做日誌歷史 z 確定哪些日誌檔案被應用到備資料庫
z 確定哪些日誌檔案還沒有被備站點接收到
8.5.3.1 監控程式活動
在備資料庫上你能透過監控由下述程式執行的活動來獲得重做應用相關的資訊:
參考名字 |
系統程式名字 |
ARCH |
ARC0, ARC1, ARC2,… |
MRP |
MRP, MRP0 |
RFS |
ORACLE{SID} |
在備資料庫站點上的V$MANAGED_STANDBY 檢視顯示給你在 Data Guard 環境中重
做傳輸和重做應用程式執行的活動。在下面查詢輸出中的CLIENT_P 列確定了相應的主資料庫程式。
SQL> SELECT PROCESS, CLIENT_PROCESS, SEQUENCE#, STATUS FROM
V$MANAGED_STANDBY;
PROCESS CLIENT_P SEQUENCE# STATUS
------- -------- ---------- ------------ ARCH ARCH 0 CONNECTED
ARCH ARCH 0 CONNECTED
MRP0 N/A 204 WAIT_FOR_LOG
RFS LGWR 204 WRITING
RFS N/A 0 RECEIVING
8.5.3.2 確定重做應用的過程在主或備資料庫站點上的V$ARCHIVE_DEST_STATUS 檢視提供給你資訊,如已歸檔的聯機重做日誌檔案,已應用的歸檔重做日誌檔案,和每個日誌序列號。下述查詢輸出顯示備資料庫應用從主資料庫接收的重做資料落後兩個歸檔重做日誌檔案。
SQL> SELECT ARCHIVED_THREAD#, ARCHIVED_SEQ#, APPLIED_THREAD#,
APPLIED_SEQ#
2> FROM V$ARCHIVE_DEST_STATUS;
ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_THREAD# APPLIED_SEQ#
---------------- ------------- --------------- ------------ 1 947 1 945
8.5.3.3 確定歸檔重做日誌檔案的位置和建立者在備資料庫上查詢V$ARCHIVED_LOG 檢視來找到歸檔重做日誌相關的額外資訊。你能獲得的一些資訊包括歸檔重做日誌的位置,那個程式建立歸檔重做日誌,每個歸檔重做日誌檔案的重做日誌序列號,每個日誌檔案何時歸檔,以及歸檔重做日誌檔案是否被應用。例如:
SQL> SELECT NAME, CREATOR, SEQUENCE#, APPLIED, COMPLETION_TIME
2> FROM V$ARCHIVED_LOG;
NAME CREATOR SEQUENCE#
APP COMPLETIO
---------------------------------------------- ------- ---------
--- ---------
H:\ORACLE\ORADATA\PAYROLL\STANDBY\ARC00198.001 ARCH 198
YES 30-MAY-02
H:\ORACLE\ORADATA\PAYROLL\STANDBY\ARC00199.001 ARCH 199
YES 30-MAY-02
H:\ORACLE\ORADATA\PAYROLL\STANDBY\ARC00200.001 ARCH 200
YES 30-MAY-02
H:\ORACLE\ORADATA\PAYROLL\STANDBY\ARC00201.001 LGWR 201
YES 30-MAY-02
H:\ORACLE\ORADATA\PAYROLL\STANDBY\ARC00202.001 ARCH 202
YES 30-MAY-02
H:\ORACLE\ORADATA\PAYROLL\STANDBY\ARC00203.001 LGWR 203
YES 30-MAY-02
6 rows selected.
8.5.3.4 檢視 OPEN RESETLOGS 前後的資料庫化身在備資料庫上查詢V$DATABASE_INCARNATION 檢視來監控資料庫化身和
RESETLOGS_ID 列。
在主資料庫上執行OPEN RESETLOGS 語句之前在備資料庫上執行下述查詢:
SQL> SELECT INCARNATION#, RESETLOGS_ID, STATUS FROM
V$DATABASE_INCARNATION ;
INCARNATION# RESETLOGS_ID STATUS
------------ ------------ -------
1 509191005 PARENT
2 509275501 CURRENT
SQL> SELECT RESETLOGS_ID,THREAD#,SEQUENCE#,STATUS,ARCHIVED FROM
V$ARCHIVED_LOG
2 ORDER BY RESETLOGS_ID,SEQUENCE# ;
RESETLOGS_ID THREAD# SEQUENCE# S ARC
------------ ------- --------- - ----
509275501 1 1 A YES
509275501 1 2 A YES
509275501 1 3 A YES
509275501 1 4 A YES
509275501 1 5 A YES
5 rows selected.
在主資料庫上執行OPEN RESETLOGS 語句之後在備資料庫上執行下述查詢,並且備
資料庫開始在新的重做分支接受重做資料:
SQL> SELECT INCARNATION#, RESETLOGS_ID, STATUS FROM
V$DATABASE_INCARNATION ;
INCARNATION# RESETLOGS_ID STATUS
------------ ------------ -------
1 509191005 PARENT
2 509275501 PARENT
3 509278970 CURRENT
SQL> SELECT RESETLOGS_ID,THREAD#,SEQUENCE#,STATUS,ARCHIVED FROM
V$ARCHIVED_LOG
2 ORDER BY RESETLOGS_ID,SEQUENCE# ;
RESETLOGS_ID THREAD# SEQUENCE# S ARC
------------ ------- --------- - ---
509275501 1 1 A YES
509275501 1 2 A YES
509275501 1 3 A YES
509275501 1 4 A YES
509275501 1 5 A YES
509278970 1 1 A YES
509278970 1 2 A YES
509278970 1 3 A YES 8 rows selected.
8.5.3.5 檢視歸檔重做日誌歷史在備站點上的V$LOG_HISTORY 顯示給你一個歸檔重做日誌的完整歷史,包括如第一個條目的時間,日誌中最低的 SCN,日誌中最高的 SCN,和歸檔重做日誌檔案的序列號。
SQL> SELECT FIRST_TIME, FIRST_CHANGE#, NEXT_CHANGE#, SEQUENCE# FROM
V$LOG_HISTORY;
FIRST_TIM FIRST_CHANGE# NEXT_CHANGE# SEQUENCE#
--------- ------------- ------------ ----------
13-MAY-02 190578 214480 1
13-MAY-02 214480 234595 2
13-MAY-02 234595 254713 3 .
.
.
30-MAY-02 3418615 3418874 201
30-MAY-02 3418874 3419280 202
30-MAY-02 3419280 3421165 203 203 rows selected.
8.5.3.6 確定哪些日誌檔案被應用到備資料庫在備資料庫上查詢V$LOG_HISTORY 檢視,它記錄已應用的最近的日誌序列號。例如,
執行下述查詢:
SQL> SELECT THREAD#, MAX(SEQUENCE#) AS "LAST_APPLIED_LOG"
2> FROM V$LOG_HISTORY
3> GROUP BY THREAD#;
THREAD# LAST_APPLIED_LOG
------- ---------------- 1 967
在這個例子中,日誌序列號967 的歸檔重做日誌檔案是最近應用的日誌檔案。你也能在備資料庫上使用 V$ARCHIVED_LOG 固定檢視的 APPLIED 列來找出哪些日
志檔案被應用到備資料庫上。例如:
SQL> SELECT THREAD#, SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG;
THREAD# SEQUENCE# APP
---------- ---------- ---
1 2 YES
1 3 YES
1 4 YES
1 5 YES
1 6 YES
1 7 YES
1 8 YES
1 9 YES
1 10 YES 1 11 NO 10 rows selected.
8.5.3.7 確定哪些日誌檔案還沒有被備站點接收到每個歸檔目的地有一個分配給它的目的地ID。你能查詢 V$ARCHIVE_DEST 固定檢視
的DEST_ID 列來找出你的目的地 ID。然後你能在主資料庫上的查詢中使用這個目的地 ID 來找到還沒有傳送到特定備站點的日誌檔案。例如,假設在你的主資料庫上的當前本地歸檔目的地 ID 是 1,你的遠端備資料庫之一的目的地 ID 是 2。要找到哪些日誌檔案還沒有被這個備目的地接收到,在主資料庫上執行下述查詢:
SQL> SELECT LOCAL.THREAD#, LOCAL.SEQUENCE# FROM
2> (SELECT THREAD#, SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=1)
LOCAL
3> WHERE LOCAL.SEQUENCE# NOT IN
5> (SELECT SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND
6> THREAD# = LOCAL.THREAD#);
THREAD# SEQUENCE#
---------- ---------- 1 12
1 13
1 14
前面所述例子顯示了還沒有被備目的地 2 接受到的日誌檔案。
8.5.4 監控在物理備資料庫上的日誌應用服務
要監控在物理備資料上的日誌應用服務的狀態,查詢在本小節中描述的固定檢視。你
也能使用Oracle 企業管理器 GUI 來監控備資料庫。
本小節包含下述主題:
z 訪問 V$DATABASE 檢視 z 訪問 V$MANAGED_STANDBY 固定檢視 z 訪問 V$ARCHIVE_DEST_STATUS 固定檢視 z 訪問 V$ARCHIVED_LOG 固定檢視 z 訪問 V$LOG_HISTORY 固定檢視 z 訪問 V$DATAGUARD_STATUS 固定檢視
同時,檢視Oracle 資料庫參考以獲得檢視相關的完整參考資訊。
8.5.4.1 訪問 V$DATABASE 檢視
執行下述查詢來顯示保護模式、保護級別、資料庫的角色、和切換狀態相關的資訊:
SQL> SELECT DATABASE_ROLE, DB_UNIQUE_NAME INSTANCE, OPEN_MODE,
PROTECTION_MODE, PROTECTION_LEVEL, SWITCHOVER_STATUS
FROM V$DATABASE;
執行下述查詢來顯示快速啟動故障轉移相關的資訊:
SQL> SELECT FS_FAILOVER_STATUS FSFO_STATUS,
FS_FAILOVER_CURRENT_TARGET TARGET_STANDBY,
FS_FAILOVER_THRESHOLD THRESHOLD,
FS_FAILOVER_OBSERVER_PRESENT OBS_PRES
FROM V$DATABASE;
8.5.4.2 訪問 V$MANAGED_STANDBY 固定檢視查詢物理備資料庫來在備站點監控重做應用和重做傳輸服務活動。
SQL> SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS
2> FROM V$MANAGED_STANDBY;
PROCESS STATUS THREAD# SEQUENCE# BLOCK# BLOCKS
------- ----------- -------- ---------- -------- ---------- RFS ATTACHED 1 947 72 72
MRP0 APPLYING_LOG 1 946 10 72
前面的查詢輸出顯示RFS 程式完成歸檔序列號 947 的日誌檔案。輸出也顯示重做應用
正活動應用一個序列號946 的歸檔重做日誌檔案。恢復操作當前正在恢復 72 個塊的歸檔重做日誌檔案中的第 10 號塊。
8.5.4.3 訪問 V$ARCHIVE_DEST_STATUS 固定檢視
要快速確定備資料庫的同步級別,在物理備資料庫上執行下述查詢:
SQL> SELECT ARCHIVED_THREAD#, ARCHIVED_SEQ#, APPLIED_THREAD#,
APPLIED_SEQ#
2> FROM V$ARCHIVE_DEST_STATUS;
ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_THREAD# APPLIED_SEQ#
---------------- ------------- --------------- ------------ 1 947 1 945
前面的查詢輸出顯示備資料庫落後於主資料庫兩個歸檔重做日誌檔案。
要確定是否允許實時應用,查詢V$ARCHIVE_DEST_STATUS 檢視的 RECOVERY_MODE 列。當允許實時應用時它將包含值為 MANAGED REAL TIME APPLY,如下面例子所示:
SQL> SELECT RECOVERY_MODE FROM V$ARCHIVE_DEST_STATUS WHERE
DEST_ID=2 ;
RECOVERY_MODE
-----------------------
MANAGED REAL TIME APPLY
8.5.4.4 訪問 V$ARCHIVED_LOG 固定檢視物理備資料庫上的V$ARCHIVED_LOG 固定檢視顯示所有從主資料庫接收到的歸檔重做日誌檔案。該檢視只有在備站點開始接收重做資料才有用;在那個時間以前,該檢視由從主控制檔案生成的舊的歸檔重做日誌記錄構成。例如,你能執行下述 SQL*Plus 語句:
SQL> SELECT REGISTRAR, CREATOR, THREAD#, SEQUENCE#, FIRST_CHANGE#,
2> NEXT_CHANGE# FROM V$ARCHIVED_LOG;
REGISTRAR CREATOR THREAD# SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# --------- ------- --------- ---------- ------------- ------------ RFS ARCH 1 945 74651 74739
RFS ARCH 1 946 74739 74772 RFS ARCH 1 947 74772 74774
前面的查詢輸出顯示從主資料庫接收三個歸檔重做日誌檔案。
8.5.4.5 訪問 V$LOG_HISTORY 固定檢視在物理備資料庫上查詢V$LOG_HISTORY 固定檢視來顯示所有已應用的歸檔重做日誌
檔案。
SQL> SELECT THREAD#, SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE#
2> FROM V$LOG_HISTORY;
THREAD# SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# --------- ---------- ------------- ------------ 1 945 74651 74739
前面的查詢輸出顯示最近應用的歸檔重做日誌檔案是序列號 945。
8.5.4.6 訪問 V$DATAGUARD_STATUS 固定檢視
V$DATAGUARD_STATUS 固定檢視顯示了典型地可能被任何訊息觸發到警告日誌或服務程式跟蹤檔案的事件。
下面的例子顯示了在主資料庫上從V$DATAGUARD_STATUS 檢視的輸出:
SQL> SELECT MESSAGE FROM V$DATAGUARD_STATUS;
MESSAGE
-----------------------------------------------------------------
ARC0: Archival started
ARC1: Archival started
Archivelog destination LOG_ARCHIVE_DEST_2 validated for no-data-loss recovery
Creating archive destination LOG_ARCHIVE_DEST_2: 'dest2'
ARCH: Transmitting activation ID 0
LGWR: Completed archiving log 3 thread 1 sequence 11
Creating archive destination LOG_ARCHIVE_DEST_2: 'dest2'
LGWR: Transmitting activation ID 6877c1fe
LGWR: Beginning to archive log 4 thread 1 sequence 12
ARC0: Evaluating archive log 3 thread 1 sequence 11
ARC0: Archive destination LOG_ARCHIVE_DEST_2: Previously completed ARC0: Beginning to archive log 3 thread 1 sequence 11 Creating archive destination LOG_ARCHIVE_DEST_1:
'/oracle/arch/arch_1_11.arc'
ARC0: Completed archiving log 3 thread 1 sequence 11 ARC1: Transmitting activation ID 6877c1fe 15 rows selected.
下面的例子顯示了在物理被資料庫上從V$DATAGUARD_STATUS 檢視的內容:
SQL> SELECT MESSAGE FROM V$DATAGUARD_STATUS;
MESSAGE
-----------------------------------------------------------------
ARC0: Archival started
ARC1: Archival started
RFS: Successfully opened standby logfile 6: '/oracle/dbs/sorl2.log'
ARC1: Evaluating archive log 6 thread 1 sequence 11 ARC1: Beginning to archive log 6 thread 1 sequence 11 Creating archive destination LOG_ARCHIVE_DEST_1:
'/oracle/arch/arch_1_11.arc'
ARC1: Completed archiving log 6 thread 1 sequence 11
RFS: Successfully opened standby logfile 5: '/oracle/dbs/sorl1.log'
Attempt to start background Managed Standby Recovery process Media Recovery Log /oracle/arch/arch_1_9.arc
10 rows selected.
8.6 為物理備資料庫調優日誌應用速度
考慮使用下述方法來最佳化應用重做到物理備資料庫所需的時間。同時,檢視Oracle
Media Recovery Best Practices 白皮書以獲得更多資訊: .
在一個備主機上設定並行恢復為CPU 數目的兩倍
在媒質恢復或重做應用期間,重做日誌檔案被讀取,需要重做應用的資料塊被分析出來。使用並行媒質恢復,這些資料塊連續平均分佈到所有恢復程式來被讀取到快取記憶體。預設是序列恢復或零並行度,這意味這同一恢復程式讀取重做,從磁碟讀取資料塊,並應用重做更改。要實施並行媒質恢復或重做應用,新增可選的PARALLEL 子句到恢復命令。進一步地,
設定資料庫引數PARALLEL_MAX_SERVERS 為最少的並行度。下面例子顯示瞭如何設定恢復並行度:
RECOVER STANDBY DATABASE PARALLEL #CPUs * 2; 你應該比較多個序列和並行恢復執行以確定最優的恢復效能。
為快速重做應用率設定DB_BLOCK_CHECKING=FALSE
在備或媒質恢復期間設定DB_BLOCK_CHECKING=FALSE 引數能提供幾乎兩倍的應用速度。在恢復過程中缺少塊校驗必須是可接收的風險。塊校驗應該在主資料庫上允許。
DB_BLOCK_CHECKSUM=TRUE(預設值)應該在生產和備資料庫上都允許。因為
DB_BLOCK_CHECKING 引數是動態的,它能在不關閉備資料庫的情況下轉換。
設定PARALLEL_EXECUTION_MESSAGE_SIZE=4096
當使用並行媒質恢復或並行備恢復,增加PARALLEL_EXECUTION_MESSAGE_SIZE 資料庫引數為 4K(4096)能增加並行恢復大概百分之二十的效能。在主和備資料庫上同時設定這個引數是為了切換操作做準備。增加這個引數每個並行執行從程式需要更多共享池中的記憶體。
並行查詢操作也使用PARALLEL_EXECUTION_MESSAGE_SIZE 引數,應該與一些並行查詢操作一起測試以確保在系統上有足夠的記憶體。在 32 位安裝上的大量並行查詢從程式可能會達到記憶體限制並禁止 PARALLEL_EXECUTION_MESSAGE_SIZE 從預設的 2K
(2048)增加到 4K。
調優磁碟I/O
在恢復期間遇到的最大瓶頸是讀和寫I/O。要釋放這個瓶頸,使用本地非同步 I/O 並設定資料庫引數 DISK_ASYNCH_IO 為 TRUE(預設值)。DISK_ASYNCH_IO 引數控制到資料檔案的磁碟 I/O 是否是非同步的。非同步 I/O 應該能顯著地降低資料庫檔案並行讀,並且應該改進整個恢復時間。
9 管理邏輯備資料庫
本章包含下述主題:
z SQL 應用架構概述 z 管理和監控邏輯備資料庫相關的檢視 z 監控邏輯備資料庫 z 定製邏輯備資料庫 z 管理邏輯備資料庫環境下的特定工作負載 z 調優邏輯備資料庫
9.1 SQL 應用架構概述
SQL 應用使用一些並行執行伺服器和後臺程式的集合來應用從主資料庫的更改到邏輯備資料庫。
圖9-1 顯示了資訊的流和每個程式執行的角色。
圖9-1 SQL 應用過程
包括的不同程式和它們在日誌提取與應用過程期間的作用如下:在日誌提取期間:
z READER 程式從歸檔重做日誌檔案或備重做日誌檔案讀取重做記錄。
z PREPARER 程式轉換在重做記錄中包含的塊更改為邏輯更改記錄(LCRs)。對於給定的歸檔重做日誌檔案或備重做日誌檔案能有多個 PREPARER 程式啟用。LCRs 駐留在系統全域性區(SGA)的共享池中,稱為 LCR 快取。
z BUILDER 程式組織 LCRs 為事務,並執行其它任務,如 LCR 快取中的記憶體管理,
SQL 應用重啟相關的檢查點和過濾不感興趣的更改。
在應用過程期間:
z ANALYZER 程式檢查包含一組 LCRs 的事務塊,可能過濾出不感興趣的事務,並識別不同事務之間的依賴性。
z COORDINATOR 程式(LSP):
{ 分配事務
{ 監控事務間的依賴性並協調排程
{ 批准更改向邏輯備資料庫的提交 z APPLIER 程式:
{ 應用 LCRs 到資料庫
{ 要求 COORDINATOR 程式批准有未解決依賴性的事務
{ 提交事務
你能查詢V$LOGSTDBY_PROCESS 事務來檢查 SQL 應用過程的活動。提供當前活動資訊的其它檢視是 V$LOGSTDBY_STATS 檢視,其顯示邏輯備資料庫在 SQL 應用活動期間的狀態資訊。這些和其它相關檢視在 9.2 節,“管理和監控邏輯備資料庫”中更詳細地討論。
9.1.1 對於 SQL 應用的不同考慮
本小節包含下述主題: z 事務大小考慮 z 頁面交換考慮 z 重啟考慮
z DML 應用考慮 z DDL 應用考慮
9.1.1.1 事務大小考慮
SQL 應用劃分事務為兩類:小的和大的:
z 小事務——SQL 應用一旦遇到重做日誌檔案中事務的提交記錄就開始應用屬於小事務的 LCRs。
z 大事務——SQL 應用分開大事務為小的片稱為事務塊,並在重做日誌檔案中看到的大事務的提交記錄之前開始應用塊。這是為了減少LCR 快取上的記憶體壓力並減少整個故障轉移時間。
例如,不分開到小片的話,SQL*Loader 轉載一千萬行,每行大小 100 位元組,可能會在 LCR 快取中使用超過 1GB 記憶體。如果分配給 LCR 快取的記憶體小於 1GB,就會導致 LCR 快取的頁面交換。
除了記憶體考慮以外,如果SQL 應用不開始應用一千萬行 SQL*Loader 裝載相關的更改,直到遇到事務的 COMMIT 記錄,就可能會停止角色轉換。在事務提交之後發起的切換或故障轉移無法完成,直到 SQL 應用在邏輯備資料庫上應用了事務。
所有的事務一開始被分類為小事務。依賴與LCR 快取可用的記憶體數量和屬於一個事務的 LCR 使用的記憶體數量,SQL 應用確定何時重新分類一個事務為大事務。
9.1.1.2 頁面互動考慮
頁面互動出現在SQL 應用的環境中,當 LCR 快取中的記憶體用盡了並且需要釋放空間給
SQL 應用向前處理。
例如,假設分配給LCR 快取的記憶體是 100MB,並且 SQL 應用遇到一個的 INSERT 事務,有一個 300MB 大小的 LONG 列。在這個情況下,日誌提取元件將會頁面交換出 LONG 資料的第一部分來讀取列更改的後面部分。在一個最佳化好的邏輯備資料庫中,頁面交換活動只會偶爾出現並且應該不影響系統的整個吞吐量。
同時檢視: 檢視 9.4 節,“定製邏輯備資料庫”以獲得如何確定造成問題的頁面交換並執行正確的操作的更多相關資訊。
9.1.1.3 重啟考慮
向邏輯備資料庫的更改不會變得持久,直到事務的提交記錄從重做日誌檔案中提取到並應用到邏輯備資料庫。因此,每次SQL 應用停止時,不管是作為使用者指令的結果還是因為系統故障,SQL 應用必須返回並再次提取最早的未提交的事務。
在事務做很少工作但是保持長時間開啟的情況下,重啟SQL 應用的代價十分驚人。這是因為 SQL 應用可能必須再次提取大量歸檔重做日誌檔案,僅僅是為了讀取少量未提交事務的重做資料。要減輕這個,SQL 應用定時地檢查點舊的未提交的資料。在檢查點進行的 SCN 反應在 V$LOGSTDBY_PROGRESS 檢視的 RESTART_SCN 列中。隨著重啟,SQL 應用開始提取比 RESTART_SCN 列中所示的值更高的 SCN 上生成的重做記錄。對於重啟不需要的歸檔重做日誌檔案被 SQL 應用自動刪除。
通常的工作負載,如大的DDL 事務,並行 DML 語句(PDML),以及直接路徑裝載,將阻止 RESTART_SCN 在工作負載期間前進。
9.1.1.4 DML 應用考慮
SQL 應用當應用影響邏輯備資料上的吞吐量和延遲的 DML 事務時有如下特性:
z 在單語句導致多行更改的地方,在主資料庫上的批次更新或刪除,在邏輯備資料庫上作為單獨行更改而應用。因此,對於每個維護的表必須有唯一或主鍵。檢視
4.1.2 節,“確保在主資料庫上的錶行能被唯一標識”以獲得更多資訊。 z 在主資料庫上直接路徑插入在邏輯備資料庫上使用常規 INSERT 語句。
z 並行 DML(PDML)事務在邏輯備資料庫上不以並行執行。
9.1.1.5 DDL 應用考慮
SQL 應用當應用影響邏輯備資料上的吞吐量和延遲的 DDL 事務時有如下特性: z 並行 DDL(PDDL)事務在邏輯備資料庫上不以並行執行。
z DDL 事務在邏輯備資料庫上序列應用。因此,在主資料庫上並行應用的 DDL 事務在邏輯備資料庫上一次應用一個。
z 如執行 CREATE TABLE AS SELECT(CTAS)那樣的語句,DML 活動(CTAS 語句的一部分)在邏輯備資料庫上被抑制。插入到新建立的表中的行作為 CTAS 語句的一部分被從重做日誌檔案中提取並使用 INSERT 語句應用到邏輯備資料庫中。
9.2 管理和監控邏輯備資料庫相關的檢視
下面效能檢視監控維護邏輯備資料庫的SQL 應用的行為。下述小節描述了能用於監控邏輯備資料庫的關鍵檢視:
z DBA_LOGSTDBY_EVENTS 檢視 z DBA_LOGSTDBY_LOG 檢視 z V$LOGSTDBY_STATS 檢視
z V$LOGSTDBY_PROCESS 檢視 z V$LOGSTDBY_PROGRESS 檢視 z V$LOGSTDBY_STATE 檢視
z V$LOGSTDBY_STATS 檢視
9.2.1 DBA_LOGSTDBY_EVENTS 檢視
DBA_LOGSTDBY_EVENTS 檢視記錄在 SQL 應用操作期間發生的感興趣的事件。預設地,該檢視記錄最近的 100 個事件。然而,你能透過呼叫 DBMS_LOGSTDBY.APPLY_SET() PL/SQL 過程來更改記錄事件的數目。如果 SQL 應用應該未預料地停止,問題的原因也記錄在該檢視中。
注:
造成 SQL 應用停止的錯誤記錄在這個事件表中。這些事件也記錄到 ALERT.LOG 中,以 LOGSTDBY 關鍵詞包含在文字中。當查詢檢視時,以 EVENT_TIME_STAMP、
COMMIT_SCN、CURRENT_SCN 排序選擇列。該順序確保關閉故障出現在檢視的最後面。
該檢視也包含其它資訊,如哪些DDL 事務被應用以及哪些被跳過了。例如:
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY HH24:MI:SS'; Session altered.
SQL> COLUMN STATUS FORMAT A60
SQL> SELECT EVENT_TIME, STATUS, EVENT FROM DBA_LOGSTDBY_EVENTS
2 ORDER BY EVENT_TIMESTAMP, COMMIT_SCN;
EVENT_TIME STATUS
----------------------------------------------------------------- EVENT
-----------------------------------------------------------------
23-JUL-02 18:20:12 ORA-16111: log mining and apply setting up 23-JUL-02 18:25:12 ORA-16128: User initiated shut down successfully completed
23-JUL-02 18:27:12 ORA-16112: log mining and apply stopping 23-JUL-02 18:55:12 ORA-16128: User initiated shut down successfully completed
23-JUL-02 18:57:09 ORA-16111: log mining and apply setting up
23-JUL-02 20:21:47 ORA-16204: DDL successfully applied create table hr.test_emp (empno number, ename varchar2(64)) 23-JUL-02 20:22:55 ORA-16205: DDL skipped due to skip setting create database link link_to_boston connect to system identified by change_on_inst 7 rows selected.
上面查詢顯示SQL 應用多次開始和停止。它也顯示哪些 DDL 被應用和跳過了。如果 SQL 應用停止了,查詢中的最後記錄將顯示問題的原因。
同時檢視:
Oracle 資料庫參考中的 DBA_LOGSTDBY_EVENTS 檢視。
9.2.2 DBA_LOGSTDBY_LOG 檢視
DBA_LOGSTDBY_LOG 檢視提供了被 SQL 應用處理的歸檔日誌的動態相關資訊。
例如:
SQL> COLUMN DICT_BEGIN FORMAT A10;
SQL> SET NUMF 9999999
SQL> SELECT FILE_NAME, SEQUENCE# AS SEQ#, FIRST_CHANGE# AS FCHANGE#,
NEXT_CHANGE# AS NCHANGE#, TIMESTAMP, -
DICT_BEGIN AS BEG, DICT_END AS END, -
THREAD# AS THR# FROM DBA_LOGSTDBY_LOG -
ORDER BY SEQUENCE#;
FILE_NAME SEQ# F_SCN N_SCN TIMESTAM BEG END THR# APPLIED
------------------------- ---- ------- ------- -------- --- --- --- ---------
/oracle/dbs/hq_nyc_2.log 2 101579 101588 11:02:58 NO NO 1
YES
/oracle/dbs/hq_nyc_3.log 3 101588 142065 11:02:02 NO NO 1
YES
/oracle/dbs/hq_nyc_4.log 4 142065 142307 11:02:10 NO NO 1 YES
/oracle/dbs/hq_nyc_5.log 5 142307 142739 11:02:48 YES YES 1 YES
/oracle/dbs/hq_nyc_6.log 6 142739 143973 12:02:10 NO NO 1
YES
/oracle/dbs/hq_nyc_7.log 7 143973 144042 01:02:11 NO NO 1
YES
/oracle/dbs/hq_nyc_8.log 8 144042 144051 01:02:01 NO NO 1
YES
/oracle/dbs/hq_nyc_9.log 9 144051 144054 01:02:16 NO NO 1 YES
/oracle/dbs/hq_nyc_10.log 10 144054 144057 01:02:21 NO NO 1 YES
/oracle/dbs/hq_nyc_11.log 11 144057 144060 01:02:26 NO NO 1
CURRENT
/oracle/dbs/hq_nyc_12.log 12 144060 144089 01:02:30 NO NO 1 CURRENT
/oracle/dbs/hq_nyc_13.log 13 144089 144147 01:02:41 NO NO 1 NO
在BEG 和 END 列中的 YES 條目指出 LogMiner dictionary build 在日誌檔案序列號 5 開始。最近的歸檔重做日誌檔案是序列號 13,並且它是在 01:02:41 在邏輯備資料庫上接收到的。APPLIED 列指出 SQL 應用已經應用了在 SCN144057 以前的所有重做。因為事務能跨多個歸檔日誌檔案,所以可以有多個歸檔日誌檔案在 APPLIED 列中顯示 CURRENT 值。同時檢視:
Oracle 資料庫參考中的 DBA_LOGSTDBY_LOG 檢視
9.2.3 V$LOGSTDBY_STATUS 檢視
該檢視提供了邏輯備資料庫的故障轉移特性的相關資訊,包括:
到故障轉移的時間(apply finish time)
在邏輯備資料庫中已提交的資料有多新(lag time)在災難發生的情況下可能會丟失什麼資料(potential data loss)
例如:
SQL> SELECT NAME, VALUE, TIME_COMPUTED FROM V$LOGSTDBY_STATS;
NAME VALUE TIME_COMPUTED
------------------ -------------- --------------------- apply finish time +00 00:00:00.1 07-APR-2005 08:29:23 lag time +00 00:00:00.1 07-APR-2005 08:29:23 potential data loss +00 00:00:00 07-APR-2005 08:29:23
每個顯示的列的單位(量度)以天(2)到秒(1)為間隔。輸出確認一個邏輯備資料庫緊跟於主資料庫後在 0.1 秒之內,並且在主資料庫故障的情況下沒有資料丟失會發生。
同時檢視:
Oracle 資料庫參考中的 V$LOGSTDBY_STATS 檢視
9.2.4 V$LOGSTDBY_PROCESS 檢視
該檢視提供涉及SQL 應用的不同程式的當前狀態的相關資訊,包括: z 確認資訊(sid | serial# | spid)
z SQL 應用程式:COORDINATOR、READER、BUILDER、PREPARER、ANALYZER、或 APPLIER(type)
z 程式當前活動的狀態(status_code | status) z 這個程式處理的最高重做記錄(high_scn)例如:
SQL> COLUMN LID FORMAT 9999
SQL> COLUMN SERIAL# FORMAT 9999
SQL> COLUMN SID FORMAT 9999
SQL> SELECT SID, SERIAL#, LOGSTDBY_ID AS LID, SPID, TYPE, HIGH_SCN
FROM V$LOGSTDBY_PROCESS;
SID SERIAL# LID SPID TYPE HIGH_SCN
----- ------- ----- -------- --------------- ----------
48 6 -1 11074 COORDINATOR 7178242899 56 56 0 10858 READER 7178243497
46 1 1 10860 BUILDER 7178242901
45 1 2 10862 PREPARER 7178243295
37 1 3 10864 ANALYZER 7178241034
36 1 4 10866 APPLIER 7178239467
35 3 5 10868 APPLIER 7178239463
34 7 6 10870 APPLIER 7178239461
33 1 7 10872 APPLIER 7178239472
9 rows selected.
HIGH_SCN 列顯示讀程式在所有其它程式之前,並且 PREPARER 和 BUILDER 程式在剩餘的前面。
SQL> COLUMN STATUS FORMAT A40
SQL> SELECT TYPE, STATUS_CODE, STATUS FROM V$LOGSTDBY_PROCESS;
TYPE STATUS_CODE STATUS
------------- ----------- ----------------------------------------- COORDINATOR 16117 ORA-16117: processing
READER 16127 ORA-16127: stalled waiting for additional transactions to be applied
BUILDER 16116 ORA-16116: no work available
PREPARER 16116 ORA-16117: processing
ANALYZER 16120 ORA-16120: dependencies being computed for transaction at SCN 0x0001.abdb440a APPLIER 16124 ORA-16124: transaction 1 13 1427 is waiting on another transaction
APPLIER 16121 ORA-16121: applying transaction with commit SCN 0x0001.abdb4390
APPLIER 16123 ORA-16123: transaction 1 23 1231 is waiting
for commit approval
APPLIER 16116 ORA-16116: no work available
輸出顯示SQL 應用執行的快照。在提取一邊,READER 程式在它能讀取更多記憶體之前
等待額外的可用記憶體,PREPARER 程式處理重做記錄,並且 BUILDER 程式沒有可用的工作。在應用一邊,COORDINATOR 分配更多的事務給 APPLIER 程式,ANALYZER 計算 SCN 7178241034 處的依存關係,一個 APPLIER 沒有可用的工作,而其它兩個有還未解決的還沒有滿足的依存關係。
同時檢視:
Oracle 資料庫參考中的 V$LOGSTDBY_PROCESS 以獲得參考資訊和 9.3.1 節,“監控
SQL 應用過程”以獲得例子輸出
9.2.5 V$LOGSTDBY_PROGRESS 檢視
該檢視提供了SQL 應用進展的過程的相關詳細資訊,包括: z SCN 或時間,在那個點所有在主資料庫上已經提交的事務已經應用到邏輯備資料庫上(applied_scn | applied_time)
z SCN 或時間,在那個點 SQL 應用將開始在重啟動上讀取重做記錄(restart_scn | restart_time)
z 最近的重做記錄在邏輯備資料庫上接收到的 SCN 或時間(latest_scn | latest_time) z 由 BUILDER 程式處理的最近的記錄的 SCN 或時間(mining_scn | mining_time)例如:
SQL> SELECT APPLIED_SCN, LATEST_SCN, MINING_SCN, RESTART_SCN FROM
V$LOGSTDBY_PROGRESS;
APPLIED_SCN LATEST_SCN MINING_SCN RESTART_SCN
----------- ----------- ---------- -----------
7178240496 7178240507 7178240507 7178219805
依照輸出:
z SQL 應用已經應用了所有在 SCN 7178240496 上或之前已提交的事務 z 在邏輯備資料庫接收到的最近的重做記錄是在 SCN 7178240507 生成的 z 提取元件已經處理了所有在 SCN 7178240507 上或之前生成的重做記錄 z 如果 SQL 應用由於任何原因停止並重啟,它將開始提取在 SCN 7178219805 上或之後生成的重做記錄
SQL> ALTER SESSION SET NLS_DATE_FORMAT='yy-mm-dd hh24:mi:ss';
Session altered
SQL> SELECT APPLIED_TIME, LATEST_TIME, MINING_TIME, RESTART_TIME FROM
V$LOGSTDBY_PROGRESS;
APPLIED_TIME LATEST_TIME MINING_TIME RESTART_TIME
----------------- ----------------- -----------------
-----------------
05-05-12 10:38:21 05-05-12 10:41:21 05-05-12 10:41:53 05-05-12 10:09:30
依照輸出:
z SQL 應用已經應用了所有在時間 05-05-12 10:38:21(APPLIED_TIME)上或之前已提交的事務
z 主資料庫上最近的重做是在時間 05-05-12 10:41:53(LASTED_TIME)生成的 z 提取引擎已經處理了所有在 05-05-12 10:41:21 上或之前生成的重做記錄
(MINING_TIME) z 在重啟的情況下,SQL 應用將開始提取在時間 05-05-12 10:09:30 以後生成的重做記錄
同時檢視:
Oracle 資料庫參考中的 V$DATAGUARD_PROGRESS 檢視以獲得參考資訊和 9.3.1 節,
“監控 SQL 應用過程”以獲得例子輸出
9.2.6 V$LOGSTDBY_STATE 檢視
該檢視提供了SQL 應用的當前狀態的概要,包括: z 主資料庫的 DBID(primary_dbid) z 分配給 SQL 應用的 LogMiner 會話 ID(session_id) z SQL 應用是否以實時應用(realtime_apply)
z 關於裝載 LogMiner Multiversioned Data Dictionary(在 4.2.3.2 節,“在重做資料中
建立字典”),從主資料庫接收重做,以及應用重做資料(STATE),SQL 應用當前在哪裡
例如:
SQL> COLUMN REALTIME_APPLY FORMAT a15
SQL> COLUMN STATE FORMAT a16 SQL> SELECT * FROM V$LOGSTDBY_STATE;
PRIMARY_DBID SESSION_ID REALTIME_APPLY STATE
------------ ---------- --------------- ---------------- 1562626987 1 Y APPLYING
輸出顯示SQL 應用執行在實時應用模式並且當前應用從主資料庫接收到的重做資料,主資料庫的 DBID 是 1562626987 並且 SQL 應用會話相關的 LogMiner 會話識別符號是 1。
同時檢視:
Oracle 資料庫參考中的 V$LOGSTDBY_STATE 檢視以獲得參考資訊和 9.3.1 節,“監控
SQL 應用過程”以獲得例子輸出
9.2.7 V$LOGSTDBY_STATS 檢視
該檢視提供SQL 應用統計資訊:例如:
SQL> COLUMN NAME FORMAT a32
SQL> COLUMN VALUE FORMAT a32 SQL> SELECT * FROM V$LOGSTDBY_STATS;
NAME VALUE
-------------------------------- -------------------------------- number of preparers 1 number of appliers 4 maximum SGA for LCR cache 30 parallel servers in use 8 maximum events recorded 1000 preserve commit order TRUE record skip errors Y record skip DDL Y record applied DDL N record unsupported operations N coordinator state APPLYING transactions ready 132412
transactions applied 132118 coordinator uptime 132102 realtime logmining Y apply delay 0 Log Miner session ID 1 bytes of redo processed 130142100140 txns delivered to client 131515 DML txns delivered 128
DDL txns delivered 23
CTAS txns delivered 0
Recursive txns delivered 874
Rolled back txns seen 40 LCRs delivered to client 2246414 bytes paged out 0 secs spent in pageout 0 bytes checkpointed 0 secs spent in checkpoint 0 bytes rolled back 0 secs spent in rollback 0 secs system is idle 2119
32 rows selected.
同時檢視:
Oracle 資料庫參考中的 V$LOGSTDBY_STATS 檢視
9.3 監控邏輯備資料庫
本節包含下述主題: z 監控 SQL 應用過程
z 日誌檔案的自動刪除
9.3.1 監控 SQL 應用過程
SQL 應用可以是六個進展狀態中的任何一個:初始化 SQL 應用,等待字典日誌,裝載
LogMiner Multiversioned Data Dictionary,應用(重做資料),等待歸檔中斷被解決,和空閒。圖 9-2 顯示了這些狀態的流程。圖9-2 在SQL 應用處理期間的進展狀態
初始化狀態
當你透過執行ALTER DATABASE START LOGICAL STANDBY APPLY 語句開始 SQL 應用時,它處於初始化狀態。
要確定SQL 應用的當前狀態,查詢 V$LOGSTDBY_STATE 檢視。例如:
SQL> SELECT SESSION_ID, STATE FROM V$LOGSTDBY_STATE;
SESSION_ID STATE
---------- ------------- 1 INITIALIZING
SESSION_ID 列標識了由 SQL 應用建立的持久 LogMiner 會話,用來提取由主資料庫生成的歸檔重做日誌檔案。
等待字典日誌
SQL 應用第一次開始時,它需要裝載在重做日誌檔案中捕獲的 LogMiner Multiversioned Data Dictionary。SQL 應用將逗留在 WAITING FOR DICTIONARY LOGS 狀態,直到它接收到所有裝載 LogMiner Multiversioned Data Dictionary 所需的重做資料。
裝載字典狀態
這個裝載字典狀態能保持一段時間。在大型資料上的裝載LogMiner Multiversioned Data
Dictionary 可能花很長時間。當裝載字典時查詢 V$LOGSTDBY_STATE 檢視返回下面輸出:
SQL> SELECT SESSION_ID, STATE FROM V$LOGSTDBY_STATE;
SESSION_ID STATE
---------- ------------------ 1 LOADING DICTIONARY
只有COORDINATOR 程式和提取程式被產生,直到 LogMiner 字典被完全裝載。因此,如果你在這個點查詢 V$LOGSTDBY_PROCESS,你將不會看到任何 APPLIER 程式。例如:
SQL> SELECT SID, SERIAL#, SPID, TYPE FROM V$LOGSTDBY_PROCESS;
SID SERIAL# SPID TYPE
------ --------- --------- --------------------- 47 3 11438 COORDINATOR
50 7 11334 READER
45 1 11336 BUILDER
44 2 11338 PREPARER
43 2 11340 PREPARER
你能透過查詢V$LOGMNR_DICTIONARY_LOAD 檢視來獲得裝載字典過程相關的更
詳細的資訊。字典裝載分三個階段:
1.相關的歸檔重做日誌檔案或備重做日誌檔案被提取以收集裝載 LogMiner
Multiversioned Data Dictionary 相關的重做更改。
2.更改被處理並裝載到資料庫內部的分段運輸表。
3.透過執行一系列 DDL 語句裝載 LogMiner Multiversioned Data Dictionary 表。例如:
SQL> SELECT PERCENT_DONE, COMMAND
FROM V$LOGMNR_DICTIONARY_LOAD
WHERE SESSION_ID = (SELECT SESSION_ID FROM V$LOGSTDBY_STATE);
PERCENT_DONE COMMAND
------------- -------------------------------
40 alter table SYSTEM.LOGMNR_CCOL$ exchange partition P101 with table SYS.LOGMNRLT_101_CCOL$ excluding indexes without validation
如果PERCENT_DONE 或 COMMAND 列長時間沒有發生更改,查詢 V$SESSION_LONGOPS 檢視來監控問題 DDL 事務的進展。
應用狀態
在這個狀態,SQL 應用已經成功裝載了 LogMiner Multiversioned Data Dictionary 的初始快照,並當前正應用重做資料到邏輯備資料庫。
要獲得SQL 應用進展的詳細資訊,查詢 V$LOGSTDBY_PROGRESS 檢視:
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
SQL> SELECT APPLIED_TIME, APPLIED_SCN, MINING_TIME, MINING_SCN,
FROM V$LOGSTDBY_PROGRESS;
APPLIED_TIME APPLIED_SCN MINING_TIME MINING_SCN
-------------------- ----------- --------------------
-----------
10-JAN-2005 12:00:05 346791023 10-JAN-2005 12:10:05 3468810134
所有主資料庫上的在APPLIED_SCN(或 APPLIED_TIME)或之前的已提交事務已經
應用到邏輯備資料庫。提取引擎已經處理了在MINING_SCN(和 MINING_TIME)或之前生成的所有重做記錄。在平穩狀態,值 MINING_SCN(和 MINING_TIME)將總是在 APPLIED_SCN(和 APPLIED_TIME)之前。
等待中斷狀態
這個狀態當SQL 應用已經提取並應用所有可用的重做記錄時發生,並且是等待新的日
志檔案(或丟失的日誌檔案)被RFS 程式歸檔。
SQL> SELECT STATUS FROM V$LOGSTBDY_PROCESS WHERE TYPE = 'READER';
STATUS
-----------------------------------------------------------------
ORA:01291 Waiting for logfile
空閒狀態一旦 SQL 應用已經應用了由主資料庫生成的所有重做就進入這個狀態。
9.3.2 日誌檔案的自動刪除
當不再需要時,SQL 應用自動刪除歸檔日誌檔案。這種行為能透過執行下述 PL/SQL 過程來覆蓋:
SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET('LOG_AUTO_DELETE', FALSE);
注:
預設地,SQL 應用將刪除不再需要的歸檔重做日誌檔案。如果你閃回邏輯備資料庫,
可能會將邏輯備資料庫帶會到一個狀態,歸檔重做日誌檔案在SQL 應用後設資料中存在(在
DBA_LOGSTDBY_LOGS 檢視中反映)但是不存在於檔案系統。嘗試在 Flashback 資料庫後
重啟SQL 應用可能會失敗,在警告日誌中會有如下錯誤:
Errors in file
/home/oracle/DGR2/logical/stdl/bdump/stdl_lsp0_11310.trc:
ORA-00308: cannot open archived log '/home/oracle/DGR2/logical/stdl/stlog/1_15_559399019.dbf' ORA-27037: unable to obtain file status
你需要複製已經被自動刪除策略刪除的歸檔重做日誌檔案到適當的目錄並重啟 SQL 應用。
雖然SQL 應用在邏輯備資料庫上自動刪除不再需要的歸檔重做日誌檔案,但是可能會
有你想手工刪除它們的時候(例如,要清理磁碟空間)。
如果你覆蓋預設的自動日誌刪除能力,執行下述步驟以確定並刪除SQL 應用不再需要
的歸檔重做日誌檔案:
1. 要清除不再需要的後設資料的邏輯備會話,輸入下述 PL/SQL 語句:
SQL> EXECUTE DBMS_LOGSTDBY.PURGE_SESSION;
該語句也更新DBA_LOGMNR_PURGED_LOG 檢視,是顯示不再需要的歸檔重做
日誌檔案。
2.查詢 DBA_LOGMNR_PURGED_LOG 檢視來列出能被刪除的歸檔重做日誌檔案: SQL> SELECT * FROM DBA_LOGMNR_PURGED_LOG;
FILE_NAME
------------------------------------
/boston/arc_dest/arc_1_40_509538672.log
/boston/arc_dest/arc_1_41_509538672.log
/boston/arc_dest/arc_1_42_509538672.log
/boston/arc_dest/arc_1_43_509538672.log
/boston/arc_dest/arc_1_44_509538672.log
/boston/arc_dest/arc_1_45_509538672.log
/boston/arc_dest/arc_1_46_509538672.log
/boston/arc_dest/arc_1_47_509538672.log
3.使用作業系統相關的命令來刪除查詢列出的歸檔重做日誌檔案。
9.4 定製邏輯備資料庫
本節包含下述主題:
z 在邏輯備資料庫上使用實時應用
z 定製記錄在 DBA_LOGSTDBY_EVENTS 檢視中的事件 z 使用 DBMS_LOGSTDBY.SKIP 來阻止對特定方案物件的更改 z 對於 DDL 語句設定跳過處理 z 更改邏輯備資料庫 z 在邏輯備資料庫上新增或重建表
同時檢視:
Oracle 資料庫 PL/SQL 包和型別參考中的 DBMS_LOGSTDBY 包
9.4.1 在邏輯備資料庫上使用實時應用
預設地,Data Guard 等待全部歸檔重做日誌檔案在應用到備資料庫之前到達備資料庫。然而,如果你在備資料庫上已經配置了一個備重做日誌,你能選擇允許實時應用。當允許實時應用,SQL 應用在日誌檔案被寫入的同時從備重做日誌檔案應用重做資料,相對於在日誌切換髮生後從歸檔重做日誌檔案應用。以這種方式立即應用備重做日誌檔案保持邏輯備資料庫緊密跟隨主資料庫,而不需要備重做日誌檔案在備站點歸檔。這能導致快速切換和故障轉移。
要在邏輯備資料庫上啟動實時應用,執行下述語句:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Oracle 推薦你以實時應用模式執行 SQL 應用。同時檢視 3.1.3 節,“配置備重做日誌” 以獲得配置備重做日誌相關的更多資訊。
9.4.2 定製記錄 DBA_LOGSTDBY_EVENTS 檢視中的事件
DBA_LOGSTDBY_EVENTS 檢視可用被視為包含發生在 SQL 應用環境中的最近感興趣的事件的迴圈日誌。預設地最近的 100 個事件被記錄在事件檢視。你能透過呼叫
DBMS_LOGSTDBY.APPLI_SET 過程來更改記錄事件的數量。例如,要確保記錄最近的
10000 個事件,你能執行下述語句:
SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET ('MAX_EVENTS_RECORDED', '10000');
注:
在 Oracle 資料庫 10g 版本 1(10.1)中,DBMS_LOGSTDBY.MAX_EVENTS 常量被稱為 DBMS_LOGSTDBY_PUBLIC.MAX_EVENTS。這兩個常量的效果是一樣的,但是在版本 2(10.2)中 DBMS_LOGSTDBY_PUBLIC 包已經被除去了,而該常量的定義就移到 DBMS_LOGSTDBY 包中。
另外,你能指定在檢視中記錄哪種型別的事件。例如,要記錄應用的DDL 事務到
DBA_LOGSTDBY_EVENTS 檢視中,執行下述語句:
SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET ('RECORD_APPLIED_DDL', 'TRUE');
造成SQL 應用停止的錯誤總是記錄在事件檢視中(除非在系統表空間中沒有足夠的空
間)。這些事件總是也記入ALERT.LOG 檔案中,在文字中包括 LOGSTDBY 關鍵詞。當查詢該檢視時,以 EVENT_TIME、COMMIT_SCN、和 CURRENT_SCN 排序選擇列。這個順序確保關閉故障出現在檢視的最後面。
9.4.3 使用 DBMS_LOGSTDBY.SKIP 來阻止對特定方案物件的更改
預設地,在主資料庫中所有支援的表被複制到邏輯備資料庫中。你能透過指定規則來
跳過對特定表的應用更改,從而更改預設行為。例如,要忽略對HR.EMPLOYEES 表的更改,
你能指定規則來阻止對特定表的DML 和 DDL 更改的應用。例如:
1.停止 SQL 應用:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
2.註冊 SKIP 規則:
SQL> EXECUTE DBMS_LOGSTDBY.SKIP (stmt => 'DML', schema_name => 'HR',
object_name => 'EMPLOYEES', proc_name => null);
SQL> EXECUTE DBMS_LOGSTDBY.SKIP (stmt => 'SCHEMA_DDL', schema_name => 'HR', object_name => 'EMPLOYEES', proc_name => null);
3.開始 SQL 應用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
9.4.4 對 DDL 語句設定跳過處理你能建立一個過程來擷取某個DDL 語句並使用其它語句替代原始 DDL 語句。例如,如果在邏輯備資料庫中的檔案系統組織不同於主資料庫中的,你能寫一個
DBMS_LOGSTDBY.SKIP 過程來透明地處理與檔案相關的 DDL 事務。
下面過程能處理主資料庫和備資料庫之間不同的檔案系統組織,只要你對於你的檔案
相關串使用特定的名字轉換。
1.建立跳過過程來處理表空間 DDL 事務:
CREATE OR REPLACE PROCEDURE SYS.HANDLE_TBS_DDL (
OLD_STMT IN VARCHAR2,
STMT_TYP IN VARCHAR2,
SCHEMA IN VARCHAR2,
NAME IN VARCHAR2,
XIDUSN IN NUMBER,
XIDSLT IN NUMBER,
XIDSQN IN NUMBER,
ACTION OUT NUMBER,
NEW_STMT OUT VARCHAR2
) AS
BEGIN
-- All primary file specification that contains a directory
-- /usr/orcl/primary/dbs
-- should go to /usr/orcl/stdby directory specification
NEW_STMT = REPLACE(OLD_STMT,
'/usr/orcl/primary/dbs',
'/usr/orcl/stdby');
ACTION := DBMS_LOGSTDBY.SKIP_ACTION_REPLACE;
EXCEPTION
WHEN OTHERS THEN
ACTION := DBMS_LOGSTDBY.SKIP_ACTION_ERROR;
NEW_STMT := NULL; END HANDLE_TBS_DDL;
2.停止 SQL 應用:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
3.向 SQL 應用註冊跳過過程:
SQL> EXECUTE DBMS_LOGSTDBY.SKIP (stmt => 'TABLESPACE', - proc_name => 'sys.handle_tbs_ddl');
4.開始 SQL 應用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
9.4.5 更改邏輯備資料庫
邏輯備資料庫能用於報表活動,即使當SQL 語句在被應用時。資料庫guard 控制使用者到邏輯備資料庫中表的訪問,使用 ALTER SESSION DATABASE DISABLE GUARD 語句可以繞過資料庫 guard 並允許更改邏輯備資料庫中表。預設地,邏輯備資料庫是操作在資料庫 guard 設定為 ALL,這是最嚴格的設定,不允許
在資料庫上執行任何使用者操作。你能透過執行ALTER SESSION DISABLE GUARD 語句來覆蓋資料庫 guard 以允許對邏輯備資料庫進行更改。特權使用者能執行這句語句來將資料庫 guard 對當前會話關閉。
下面小節提供了一些例子。在這些小節中的討論假設資料庫guard 是設為 ALL 或
STANDBY。
9.4.5.1 在邏輯備資料庫上執行 DDL 本小節描述如何新增一個約束到透過SQL 應用維護的表。
預設地,當資料庫guard 設定為 ALL 或 STANDBY 時,只有擁有 SYS 許可權的帳戶才能
更改資料庫。如果你以SYSTEM 或其它特權帳戶登入,要沒有首先對會話繞過資料庫 guard,你將不能在邏輯備資料庫上執行 DDL 語句。
下面例子顯示瞭如何停止SQL 應用,繞過資料庫 guard,在邏輯備資料庫上執行 SQL
語句,然後重新允許guard:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
Database altered.
SQL> ALTER SESSION DISABLE GUARD; PL/SQL procedure successfully completed.
SQL> ALTER TABLE SCOTT.EMP ADD CONSTRAINT EMPID UNIQUE (EMPNO);
Table altered.
SQL> ALTER SESSION ENABLE GUARD; PL/SQL procedure successfully completed.
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY; Database altered.
Oracle 建議在允許繞過資料庫 guard 時,你不要在由 SQL 應用維護的表上執行 DML 操作。這將在主和備資料庫之間引入背離,那將使得維護邏輯備資料庫變得不可能。
9.4.5.2 更改不是由 SQL 應用維護的表
有些時候,報表應用必須收集總結結果並臨時儲存它們或跟蹤報表執行的次數。雖然應用的主要目的是執行報表活動,但是應用可能需要在邏輯備資料庫上執行 DML(插入,更新,和刪除)操作。甚至可能需要建立或刪去表。
你能設定資料庫guard 以允許報表操作更改資料,只要資料不是透過 SQL 應用維護的。要這麼做,你必須:
z 在邏輯備資料庫上指定表集合,應用能透過執行 DBMS_LOGSTDBY.SKIP 過程向其上面寫資料。跳過的表是不透過 SQL 應用維護的。
z 設定資料庫 guard 只保護備表。
在下面例子中,假設報表要寫的表也在主資料庫上。例子停止SQL 應用,跳過表,然後重啟 SQL 應用,使得更改能被應用到邏輯備資料庫
上。報表應用將能夠寫到MYSCHEMA 中的 MYTABLES%。它們將不再透過 SQL 應用維護。
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
Database altered.
SQL> EXECUTE DBMS_LOGSTDBY.SKIP(stmt => 'SCHEMA_DDL',- schema_name => 'HR', - object_name => 'TESTEMP%');
PL/SQL procedure successfully completed.
SQL> EXECUTE DBMS_LOGSTDBY.SKIP('DML','HR','TESTEMP%'); PL/SQL procedure successfully completed.
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE; Database altered.
一旦SQL 應用開始,它需要為新指定新增到跳過規則的表更新備資料庫上的後設資料。直到 SQL 應用已經有機會更新後設資料,試圖更改新跳過的表將會失敗。你能透過執行下面
查詢來找出SQL 應用是否已經成功考慮你剛新增的 SKIP 規則:
SQL> SELECT VALUE FROM DBA_LOGSDTBY_PARAMETERS
WHERE NAME = 'GUARD_STANDBY';
VALUE
--------------- Ready
一旦VALUE 列顯示“Ready”,SQL 應用已經成功更新了對於跳過表的所有相關後設資料,
並且此時更改表是安全的。
同時檢視:
C.6 節,“邏輯備資料庫支援的 DDL 語句”和 Oracle 資料庫 PL/SQL 包和型別參考中的
DBMS_LOGSTDBY 包
9.4.6 在邏輯備資料庫上新增或重建表
典型地,在無法恢復的操作之後你使用表例項化來重建表。你也能使用這個過程來在
以前跳過的表上允許SQL 應用。
在你能建立表之前,它必須滿足在4.1.2 節,“確保主資料庫中的錶行能被唯一標識”
中描述的需求。然後,你能使用下述步驟來重建名為HR.EMPLOYEES 的表並重新開始 SQL 應用。說明假設已經定義了資料庫連線 BOSTON 來訪問主資料庫。下面列表顯示瞭如果重建表並重啟那個表上的 SQL 應用:
1.停止 SQL 應用:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
2.透過查詢 DBA_LOGSTDBY_SKIP 檢視來確保懷疑的表上沒有操作被跳過:
SQL> SELECT * FROM DBA_LOGSTDBY_SKIP;
ERROR STATEMENT_OPT OWNER NAME PROC
----- --------------- ------------- ---------------- ----- N SCHEMA_DDL HR EMPLOYEES
N DML HR EMPLOYEES
N SCHEMA_DDL OE TEST_ORDER
N DML OE TEST_ORDER
因為你已經有相關的跳過規則與你想在邏輯備資料庫上重建的表相關聯,你必須首先刪除那些規則。你能透過呼叫DBMS_LOGSTDBY.UNSKIP 過程來完成。例如:
SQL> EXECUTE DBMS_LOGSTDBY.UNSKIP(stmt => 'DML', -
schema_name => 'HR', - object_name => 'EMPLOYEES');SQL> EXECUTE DBMS_LOGSTDBY.UNSKIP(stmt => 'SCHEMA_DDL', - schema_name => 'HR', - object_name => 'EMPLOYEES');
3.透過使用 DBMS_LOGSTDBY.INSTANTIATE_TABLE 過程在邏輯備資料庫中重建表
HR.EMPLOYEES 與其所有資料。例如:
SQL> EXECUTE DBMS_LOGSTDBY.INSTANTIATE_TABLE(shema_name => 'HR', object-+_name => 'EMPLOYEES', - dblink => 'BOSTON');
4.開始 SQL 應用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
同時檢視:
Oracle 資料庫 PL/SQL 包和型別參考以獲得 DBMS_LOGSTDBY.UNSKIP 和 DBMS_LOGSTDBY.INSTANTIATE_TABLE 過程的相關資訊
要確保一個跨新例項化的表和資料庫的剩餘部分的一致性檢視,在查詢這個表之前等
待SQL 應用追趕上主資料庫。你能透過執行下述步驟來做到這點:
1.在主資料庫上,透過查詢 V$DATABASE 檢視確定當前 SCN:
SQL> SELECT CURRENT_SCN FROM V$DATABASE@BOSTON;
CURRENT_SCN
---------------------
345162788
2.確保 SQL 應用已經應用了所有在前面查詢中返回的 CURRENT_SCN 之前提交的事務:
SQL> SELECT APPLIED_SCN FROM V$LOGSTDBY_PROGRESS;
APPLIED_SCN
--------------------------
345161345
當在這個查詢中返回的APPLIED_SCN 比第一個查詢返回的 CURRENT_SCN 大
時,查詢新重建的表是安全的。
9.5 管理邏輯備資料庫環境下的特定工作負載
本節包含下述主題: z 匯入一個可傳輸表空間到主資料庫 z 使用物化檢視 z 觸發器和約束是如何在邏輯備資料庫上處理的
z 透過 OPEN RESETLOG 語句恢復
9.5.1 匯入一個可傳輸表空間到主資料庫
執行下述步驟來匯入一個表空間到主資料庫。 1.禁止 guard 設定使得你能更改邏輯備資料庫:
SQL> ALTER SESSION DISABLE GUARD;
2.在邏輯備資料匯入表空間。
3.允許資料庫 guard 設定(或從會話斷開):
SQL> ALTER SESSION ENABLE GUARD;
4.在主資料庫匯入表空間。
9.5.2 使用物化檢視
SQL 應用不支援這些物化檢視相關的 DDL 語句:
z CREATE、ALTER、或 DROP MATERIALIZED VIEW z CREATE、ALTER、或 DROP MATERIALIZED VIEW LOG
因此,在邏輯備資料庫已經建立後,在主資料庫上建立的、更改的、或刪去的新物化
檢視不會在邏輯備資料庫上反映。然而,在邏輯備資料庫已經建立之前,在主資料庫上建立的物化檢視也表現在邏輯備資料庫上。
z 對於同時存在於主和邏輯備資料庫上的物化檢視,當事務提交發生時 ON-COMMIT 物化檢視在邏輯備資料庫上重新整理。
ON-COMMIT 物化檢視不是由 SQL 應用自動重新整理的。你必須執行 DBMS_MVIEW.REFRESH 過程來重新整理它。例如,要在邏輯備資料庫上使用快速重新整理方
式重新整理名為HR.DEPARTMENTS_MV 的 ON-DEMAND 物化檢視,執行下面命令:
SQL> EXECUTE DBMS_MVIEW.REFRESH (- LIST => 'HR.DEPARTMENTS_MV', - METHOD => 'F');
z 在邏輯備資料庫上建立的額外 ON-COMMIT 物化檢視是自動維護的。
z 在邏輯備資料庫上建立的額外 ON-DEMAND 物化檢視不是由 SQL 應用維護,你必須使用 DBMS_MVIEW.REFRESH 過程重新整理它們。
9.5.3 觸發器和約束是如何在邏輯備資料庫上處理的
預設地,觸發器和約束在邏輯備資料庫上是自動允許和處理的。
對於由SQL 應用維護的表上的觸發器和約束: z 約束——檢查約束在主資料庫上被評估並不需要在邏輯備資料庫上重新評估 z 觸發器——在主資料庫上執行的觸發器的效果記錄並應用到備資料庫上對於不是由SQL 應用維護的表上的觸發器和約束: z 約束被評估
z 觸發器被觸發
9.5.4 透過 OPEN RESETLOGS 語句恢復
當邏輯備資料庫接收到新的重做資料分支,SQL 應用自動獲得新的重做資料分支。對於邏輯備資料庫,如果備資料庫沒有應用新重置日誌 SCN 以前的(在新的重做資料分支開始以前的)重做資料,則不需要手工介入。下面的表描述瞭如果與主資料庫分支重新同步備資料庫。
如果備資料庫… |
則… |
執行這些步驟… |
還沒有應用新重置日誌SCN以前的(在新的重做資料分支開始以前的)重做資料 |
SQL 應用自動獲取新的重做資料分支。 |
沒有必要手工介入。SQL 應用自動與新的重做資料分支重新同步。 |
已經應用新重置日誌 SCN 以前的 (在新的重做資料分支開始以前 的)重做資料,並且在備資料庫上允許 Flashback 資料庫 |
備資料庫恢復到新的重做資料分支之後。 |
1.遵循 12.5.2 節,“在閃回主之後閃回邏輯備資料庫”中的步驟來閃回邏輯備資料庫。 2.重啟 SQL 應用以繼續應用重做到新的重置日誌分支。 SQL 應用自動與新的分支重新同步備資料庫。 |
已經應用新重置日誌 SCN 以前的 (在新的重做資料分支開始以前 的)重做資料,並且在備資料庫上沒有允許 Flashback 資料庫 |
主資料庫在指定的主資料庫分支從備分叉。 |
遵循第 4 章,“建立邏輯備資料庫” 中的步驟重建邏輯備資料庫。 |
丟失介於新的重做資料分支其間的歸檔重做日誌檔案 |
SQL 應用無法繼續直到 從每個分支定位並註冊丟失的歸檔檢索到丟失的日誌檔案。 重做日誌檔案。 |
|
丟失從前面重做資料分支結尾的歸檔重做日誌檔案 |
SQL 應用無法繼續直到 從前面分支定位並註冊丟失的歸檔檢索到丟失的日誌檔案。 重做日誌檔案。 |
檢視Oracle 資料庫備份和恢復高階使用者指南以獲得資料庫化身,透過 OPEN
RESETLOGS 操作恢復,和 Flashback 資料庫的更多相關資訊。
9.6 調優邏輯備資料庫
本節包含下述主題: z 建立主鍵 RELY 約束 z 為基於代價的最佳化器收集統計資訊 z 調整程式的數量 z 調整 LCR 快取使用的記憶體
z 調整如何在邏輯備資料庫上應用事務
9.6.1 建立主鍵 RELY 約束
在主資料庫上,如果表沒有主鍵或唯一索引,並且你確認行是唯一的,則建立一個主
鍵RELY 約束。在邏輯備資料庫上,在組成主鍵的列上建立一個索引。下面查詢生成一個表的列表,這些表沒有索引資訊能被邏輯備資料庫使用來應用唯一地標識行。透過在下述表上建立索引,效能能顯著提高。
SQL> SELECT OWNER, TABLE_NAME FROM DBA_TABLES
2> WHERE OWNER NOT IN('SYS','SYSTEM','OUTLN','DBSNMP') 3> MINUS
3> SELECT DISTINCT TABLE_OWNER, TABLE_NAME FROM DBA_INDEXES
4> WHERE INDEX_TYPE NOT LIKE ('FUNCTION-BASED%')
5> MINUS
6> SELECT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED;
你能向主資料庫上的表新增一個rely 主鍵約束,如下:
1.在主資料庫上新增主鍵 rely 約束
SQL> ALTER TABLE HR.TEST_EMPLOYEES ADD PRIMARY KEY (EMPNO) RELY
DISABLE;
SQL> ALTER SESSION DISABLE GUARD;
這將確保EMPNO 列,能被用於唯一標識 HR.TEST_EMPLOYEES 表中的行,將
作為表上任何更新的一部分被補充記錄。注意到HR.TEST_EMPLOYEES 表還沒有任何唯一索引在邏輯備資料庫上指定。這可能造成 UPDATE 語句在邏輯備資料庫上做全表掃描。你能透過在邏輯備資料庫上在 EMPNO 列新增一個唯一索引來改正這個問題。檢視 4.1.2 節,“確保在主資料庫中的行能被唯一標識”和 Oracle 資料庫 SQL 參考以獲得 RELY 約束相關的更多資訊。
2.停止 SQL 應用:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
3.禁止 guard 使得你在邏輯備資料上更改邏輯備資料上的被維護的表:
SQL> ALTER SESSION DISABLE GUARD;
4.在 EMPNO 列上新增一個唯一索引:
SQL> CREATE UNIQUE INDEX UI_TEST_EMP ON HR.TEST_EMPLOYEES (EMPNO);
5.允許 guard:
SQL> ALTER SESSION ENABLE GUARD;
6.開始 SQL 應用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
9.6.2 為基於代價的最佳化器收集統計資訊
在邏輯備資料庫上應該收集統計資訊,因為基於代價的最佳化器(CBO)使用它們來確
定最優的查詢執行路徑。在方案物件的資料或結構發生改變使得以前的統計資訊不準確時,應該收集新的統計資訊。例如,在對錶插入或刪除大量行後,收集相應數量行的新統計資訊。
應該在備資料庫上收集統計資訊,因為在主資料上的DML 和 DDL 操作是作為工作復
雜的功能執行的。當備資料庫邏輯等同於主資料庫時,SQL 應用可能以不同的方式執行工作負載。這就是為什麼使用邏輯備資料庫上的 STATS 包和 V$SYSTAT 檢視能用於確定哪些表消耗了最多的資源和表掃描。
同時檢視:
4.1.2節,“確保主資料庫中的錶行能被唯一標識”和Oracle資料庫SQL參考以獲得RELY 約束相關的更多資訊
9.6.3 調整程式的數量
下面小節描述了:調整 APPLIER 程式的數量
調整PREPARER 程式的數量
9.6.3.1 調整 APPLIER 程式的數量執行下述步驟來找出調整APPLIER 程式的數量是否能幫助你獲得更高的吞吐量:
1.透過執行下面查詢確定 APPLIER 程式是否繁忙:
SQL> SELECT COUNT(*) AS IDLE_APPLIER
FROM V$LOGSTDBY_PROCESS
WHERE TYPE = 'APPLIER' and status_code = 16166;
IDLE_APPLIER
-------------------------
0
2.一旦你確定有非空閒的 APPLIER 程式,如果你選擇調整 APPLIER 的數量,執行下
面查詢來確保對於額外的APPLIER 程式有足夠的工作可做:
SQL> SELECT NAME, VALUE FROM V$LOGSTDBY_STATS
WHERE NAME LIKE 'TRANSACTIONS%';
NAME VALUE
--------------------- ------- transactions ready 27896 transactions applied 25671
有兩種統計資訊保留事務的累計總數,一種是APPLIER 程式準備應用的事務數,
另一種是已經被應用的事務數量。
如果數量(transactions ready – transactions applied)比兩倍可用的 APPLIER 程式數量還要高,則如果你增加 APPLIER 程式的數量對吞吐量的提高是可能的。
注:
數量是準備好的工作的大概測量。工作負載可能由於準備好的事務之間的相關性阻止額外可用的 APPLIER 程式應用它們。例如,如果大多數準備好應用的事務是 DDL 事務,則新增更多的 APPLIER 程式將不會導致更高的吞吐量。
要從預設值5 調整 APPLIER 程式的數量到 20,執行下述步驟:
a.停止 SQL 應用:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY; Database altered
b.設定 APPLY_SERVERS 的數量為 20:
SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET('APPLY_SERVERS', 20);
PL/SQL procedure successfully completed
c.開始 SQL 應用
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE; Database altered
9.6.3.2 調整 PREPARER 程式的數量只有在很罕見的情況下你需要調整PREPARER 程式的數量。在你決定增加 PREPARER
程式的數量之前,確保下麵條件為真: z 所有 PREPARER 程式是繁忙的 z 準備好要應用的事務數量少於可用的 APPLIER 程式數量 z 有空閒的 APPLIER 程式下面步驟顯示如何確定這些條件為真:
1.確保所有 PREPARER 程式是繁忙的:
SQL> SELECT COUNT(*) AS IDLE_PREPARER
FROM V$LOGSTDBY_PROCESS
WHERE TYPE = 'PREPARER' and status_code = 16166;
IDLE_PREPARER
-------------
0
2.確保準備好要應用的事務數量少於可用的 APPLIER 程式數量:
SQL> SELECT NAME, VALUE FROM V$LOGSTDBY_STATS
WHERE NAME LIKE 'transactions%';
NAME VALUE --------------------- ------- transactions ready 27896 transactions applied 27892
SQL> SELECT COUNT(*) AS APPLIER_COUNT
FROM V$LOGSTDBY_PROCESS WHERE TYPE = 'APPLIER';
APPLIER_COUNT
-------------
20
注:多次執行這個查詢以確保這不是一個短暫的事件。
3.確保有空閒的 APPLIER 程式:
SQL> SELECT COUNT(*) AS IDLE_APPLIER
FROM V$LOGSTDBY_PROCESS
WHERE TYPE = 'APPLIER' and status_code = 16166;
IDLE_APPLIER
-------------------------
19
在這個例子中,所有條件已經被滿足。因此,你現在可以增加PREPARER 程式到 4(從
預設值1),透過執行下述步驟:
1.停止 SQL 應用:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY; Database altered
2.設定 PREPARE_SERVERS 的數量為 4:
SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET('PREPARE_SERVERS', 4);
PL/SQL procedure successfully completed
3.開始 SQL 應用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE; Database altered
9.6.4 調整 LCR 快取使用的記憶體
對於一些工作負載,SQL 應用可能使用大量的換頁操作,從而減輕系統的整個吞吐量。要找到增加分配給 LCR 快取的記憶體是否有益,執行下述步驟:
1.執行下面查詢以獲得換頁活動的快照:
SQL> SELECT NAME, VALUE FROM V$LOGSTDBY_STATS
WHERE NAME LIKE '%PAGE%' OR
NAME LIKE '%UPTIME%' OR NAME LIKE '%idle%';
NAME VALUE
-------------------------- ---------------
coordinator uptime in secs 894856 bytes paged out 20000 seconds spent in pageout 2 system idle time in secs 1000
2.在 5 分鐘內再次執行查詢:
SQL> SELECT NAME, VALUE FROM V$LOGSTDBY_STATS
WHERE NAME LIKE '%PAGE%' OR
NAME LIKE '%UPTIME%' OR NAME LIKE '%idle%';
NAME VALUE
-------------------------- --------------- coordinator uptime in secs 895156 bytes paged out 1020000 seconds spent in pageout 100 system idle time in secs 1000
3.計算規格化的換頁活動。例如:
Change in coordinator uptime (C)= (895156 – 894856) = 300 secs
Amount of additional idle time (I)= (1000 – 1000) = 0
Change in time spent in pageout (P) = (100 – 2) = 98 secs
Pageout time in comparison to uptime = P/(C-I) = 98/300 ~ 32.67%
理想地,換頁活動不應該消耗超過百分之5 的整個執行時間。如果你繼續在延長的間
隔獲取快照,你會發現換頁活動繼續消耗了應用時間的顯著部分,增加記憶體大小能提供一些益處。你能透過執行下述步驟增加分配給SQL 應用的記憶體:
1.停止 SQL 應用:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY; Database altered
2.設定分配給 LCR 快取的記憶體(對於這個例子,SGA 設為 1GB):
SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET('MAX_SGA', 1024);
PL/SQL procedure successfully completed
因為MAX_SGA 是以兆位元組(MB)指定的,增加記憶體到 1GB 在例子中以 1024MB
指定。
3.開始 SQL 應用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE; Database altered
9.6.5 調整如何在邏輯備資料庫上應用事務
預設地,在邏輯備資料庫上應用的事務與它們在主資料庫上提交的次序完全相同。提
交事務的預設順序允許任何報表應用在邏輯備資料庫上透明地執行。然而,當你想邏輯備資料庫追趕上主資料庫時是要時間的(如在由於硬體故障或升級邏輯備資料庫長時間地中斷之後),並且能容忍不執行報表應用一段時間。在這種情況下,你能透過執行下述步驟更改預設應用模式:
1.停止 SQL 應用:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY; Database altered
2.執行下面以允許事務不按它們在主資料庫上提交的順序應用:
SQL> EXECUTE DBMS_LOGSTDBY.APPLY_SET('PRESERVE_COMMIT_ORDER',
'FALSE');
PL/SQL procedure successfully completed
3.開始 SQL 應用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE; Database altered
一旦你已經追趕上主資料庫(透過查詢V$LOGSTDBY_STATS 檢視來檢驗),並且你準
備開啟邏輯備資料庫以用於報表應用,你能如下更改應用模式:
1.停止 SQL 應用:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY; Database altered
2.還原 PRESERVE_COMMIT_ORDER 引數的預設值:
SQL> EXECUTE
DBMS_LOGSTDBY.APPLY_UNSET('PRESERVE_COMMIT_ORDER');
PL/SQL procedure successfully completed
3.開始 SQL 應用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Database altered
對於典型的聯機事務處理(OLTP)工作負載,非預設模式能比預設的應用模式提
供百分之50 或更好的吞吐量提高。
10 使用 RMAN 來備份和恢復檔案
本章描述與Data Guard 和備資料庫使用 Oracle 恢復管理器工具(RMAN)的備份策略。
RMAN 能以對主資料庫最小影響來執行備份並且從丟失單個資料檔案或整個資料庫中快速恢復。RMAN 和 Data Guard 能一起使用來簡化 Data Guard 配置的關聯。
本章包含下述主題:
z 備份過程 z 切換、故障轉移、和控制檔案重建在備份上的影響 z 額外的備份情況
注:
因為邏輯備資料庫不是主資料庫的塊對塊複製,你不能使用邏輯備資料庫來備份主資料庫。
10.1 備份過程
在備環境中,在主或備系統上進行的備份資料檔案和歸檔重做日誌檔案在其它系統是可以用於恢復的。雖然一些檔案如控制檔案和SPFILE 必須在主資料庫上備份,但是備份資料檔案和歸檔重做日誌檔案的步驟能解除安裝到備系統,以最小化生產系統上的備份影響。
只有那些由備例項建立的歸檔重做日誌檔案才能在備站點上備份。如果有在備資料庫啟動之前生成的歸檔重做日誌檔案,它們必須在主資料庫上備份。例如,如果從主資料庫傳送到備的第一個日誌是日誌序列100 執行緒 1,則日誌序列小於 100 的歸檔重做日誌檔案的備份必須在主資料庫上完成。
如果配置了閃回恢復區,Oracle 軟體基於需求從閃回恢復區刪除檔案。閃回恢復區對於磁帶備份作為磁碟快取。
10.1.1 對磁帶備份使用磁碟作為快取
下面指導假設已配置了閃回恢復區(如5.2.3 節中描述)和設定了其它 RMAN 持久平配置。執行下述步驟:
1.在主資料庫上,執行下面 RMAN 命令來進行控制檔案和 SPFILE 的當前備份,並備份由主例項建立的閃回恢復區中的檔案到磁帶:
BACKUP DEVICE TYPE DISK CURRENT CONTROLFILE;
BACKUP RECOVERY AREA;
每天或一週一次執行這些命令(或在指令碼中使用它們),取決於在丟失所有當前控制檔案的情況下能容忍丟失多少重做資料的應用(檢視10.2.4 節)。
2.在備資料庫上,每天執行下面 RMAN 命令來前滾 0 級別資料庫複製:
RECOVER COPY OF DATABASE WITH TAG 'OSS';
BACKUP DEVICE TYPE DISK INCREMENTAL LEVEL 1 FOR RECOVER OF COPY
WITH TAG 'OSS' DATABASE;
BACKUP DEVICE TYPE DISK ARCHIVELOG ALL NOT BACKED UP 2 TIMES; BACKUP RECOVERY AREA;
這些命令應用一天以前進行的級別1 增量備份,建立一個新的級別 1 增量備份,備份歸檔重做日誌檔案到閃回恢復區,並從閃回恢復區備份由備例項建立的檔案到磁帶。
10.1.2 直接執行備份到磁帶
如果所有備份直接寫到磁帶,使用RMAN CONFIGURE DEFAULT DEVICE TYPE TO
SBT 命令來配置預設的裝置型別為 SBT。
在主資料庫上,使用下面RMAN 命令來備份當前控制檔案並複製由主例項建立的自動備份到磁帶上:
BACKUP AS BACKUPSET CURRENT CONTROLFILE;
BACKUP RECOVERY AREA;
每天或一週一次執行這些命令,取決於在丟失所有當前控制檔案的情況下能容忍丟失多少重做資料的應用(檢視10.2.4 節)。
假設每週日進行全資料庫備份,能在備資料庫上執行下面命令來進行級別0 資料庫備份:
BACKUP AS BACKUPSET INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG NOT
BACKED UP 2 TIMES;
在備份週期的其它日期,執行下面命令來建立資料庫的級別1 增量備份和所有還沒有備份兩次的歸檔重做日誌檔案:
BACKUP AS BACKUPSET INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG NOT
BACKED UP 2 TIMES;
10.2 切換、故障轉移、和控制檔案重建在備份上的影響
所有在備份完成所在系統上的上次備份以後生成的歸檔重做日誌檔案,在下述事件之
後,必須使用RMAN CATALOG ARCHIVELOG ‘archivelog_name_complete_path’命令手工編錄:
z 主或備控制檔案重建。
z 在切換後主資料庫角色轉換到備。
z 在切換或故障轉移後備資料庫角色轉換到主。
如果新的歸檔重做日誌檔案沒有編錄,RMAN 將不會備份它們。
在下面小節中的例子假設你從磁帶還原檔案到備份建立的同一系統上。如果你需要還原檔案到不同系統,你可能需要更改媒質配置或在還原期間在RMAN 通道上指定不同的引數,或兩者都。檢視媒質管理文件以獲得如何從不同系統訪問 RMAN 備份的更多相關資訊。
10.2.1 從主資料庫上資料檔案的丟失恢復
指定下面RMAN 命令來還原並恢復資料檔案。你必須同時連線到主和恢復目錄資料庫。
RESTORE DATAFILE n,m...;
RECOVER DATAFILE n,m...;
執行下面RMAN 命令來還原並恢復表空間。你必須同時連線到主和恢復目錄資料庫。
RESTORE TABLESPACE tbs_name1, tbs_name2, ...
RECOVER TABLESPACE tbs_name1, tbs_name2, ...
10.2.2 從備資料庫上資料檔案的丟失恢復
要在丟失一個或更多資料檔案恢復備資料庫,你必須使用RMAN RESTORE DATAFILE 命令從備份中還原丟失的檔案到備資料庫。如果恢復損壞檔案所需的所有歸檔重做日誌檔案在磁碟上可以由備資料庫訪問,則重啟重做應用。如果恢復所需的歸檔重做日誌檔案在磁碟上不可訪問,使用 RMAN 還原恢復的資料文
件到SCN/日誌序號高於最近應用到備資料庫的,然後重啟重做應用繼續應用重做資料,如下:
1.停止重做應用。
2.確定 UNTIL_SCN 列的值,透過執行下面查詢:
SQL> SELECT MAX(NEXT_CHANGE#)+1 UNTIL_SCN FROM V$LOG_HISTORY LH, V$DATABASE DB WHERE LH.RESETLOGS_CHANGE#=DB.RESETLOGS_CHANGE#
AND LH.RESETLOGS_TIME = DB.RESETLOGS_TIME;
UNTIL_SCN
------- ----------------
967786
3.執行下面 RMAN 命令來還原並恢復備資料庫上的資料檔案。你必須同時連線到備
和恢復目錄資料庫(使用TARGET 關鍵詞來連線到備例項):
RESTORE DATAFILE <n,m,...>;
RECOVER DATABASE UNTIL SCN 967786;
要還原一個表空間,使用RMAN ‘RESTORE TABLESPACE tbs_name1,
tbs_name2, …’命令。
4.重啟重做應用。
10.2.3 從備控制檔案的丟失恢復
Oracle 軟體允許多重備控制檔案。要確保備控制檔案被多重,檢查 CONTROL_FILES 初始化引數,如下:
SQL> SHOW PARAMETER CONTROL_FILES
NAME TYPE VALUE
------------------------------------ -----------
------------------------------
control_files string
<cfilepath1>,<cfilepath2>
如果其中一個多重備控制檔案丟失或不可訪問,Oracle 軟體停止例項並寫下面資訊到警告日誌:
ORA-00210: cannot open the specified controlfile
ORA-00202: controlfile: '/ade/banand_hosted6/oracle/dbs/scf3_2.f'
ORA-27041: unable to open file
你能複製一個控制檔案的完整複製覆蓋到丟失的複製,然後使用下面SQL 語句重啟備例項:
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM
SESSION;
如果所有備控制檔案丟失了,則你必須從主資料庫建立一個新的控制檔案,複製它到備資料庫上所有多重位置,並重啟備例項和重做應用。建立的控制檔案丟失所有在其建立之前生成的歸檔重做日誌檔案的相關資訊。因為RMAN 到控制檔案中查詢要備份的歸檔重做日誌檔案的列表,所有在最近備份以後生成的歸檔重做日誌檔案必須手工編錄。
10.2.4 從主控制檔案的丟失恢復
Oracle 軟體允許在主資料庫上多重控制檔案。如果其中一個控制檔案無法在主資料庫上更新,則主資料庫例項自動關閉。如 10.2.3 節中描述,你能複製一個控制檔案的完整複製並重啟例項而不用執行還原或恢復操作。
如果你丟失你的所有控制檔案,你能選擇下述步驟之一,取決於可接受的當機事件。
建立一個新的控制檔案 如果所有控制檔案的複製丟失了,你能使用 NORESETLOGS 選項來建立一個新的控制檔案並在完成媒質恢復之後開啟資料庫。現有的備資料庫例項能透過使用下面語句生成指令碼來建立一個新的控制檔案:
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS;
注意到資料庫檔名在主和備資料庫中是不同的,然後你必須編輯生成的指令碼來更改檔名。
這個語句能定期地使用以生成控制檔案建立指令碼。如果你要將控制檔案建立作為你的恢復計劃的一部分,則你應該在任何物理架構更改後使用這個語句,如新增或刪去資料檔案、表空間、或重做日誌成員。
建立的控制檔案丟失所有在控制檔案建立時間之前生成的歸檔重做日誌檔案的相關資訊。如果歸檔重做日誌檔案備份正在主資料庫上執行,自從最近歸檔重做日誌檔案備份以後生成的所有歸檔重做日誌檔案必須手工編錄。
使用備份控制檔案恢復 如果你不能使用前面的步驟建立控制檔案,則你能使用一個備份控制檔案,執行完全恢復,並以 RESETLOGS 選項開啟資料庫。
要還原控制檔案並恢復資料庫,在連線到主例項(在NOMOUNT 狀態)之後執行下面
RMAN 命令並編錄資料庫: RESTORE CONTROLFILE;
ALTER DATABASE MOUNT;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
從Oracle 版本 10.1.0 開始,所有在 RESETLOGS 選項之前進行的備份能用於恢復。因此,沒有必要在可用於生產之前備份資料庫。
10.2.5 從聯機重做日誌檔案的丟失恢復
Oracle 建議多重聯機重做日誌檔案。丟失一個聯機重做日誌組的所有成員導致 Oracle 軟體終止例項。如果只有一個日誌檔案組的一些成員無法寫入,則它們將不被使用直到它們變得可訪問。檢視 V$LOGFILE 和 V$LOG 包含主資料庫例項中日誌檔案成員的當前狀態的更多相關資訊。
當Oracle 軟體不能寫聯機重做日誌檔案成員之一時,會返回下面警告資訊:
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1:
'/ade/banand_hosted6/oracle/dbs/t1_log1.f'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3
如果訪問問題是暫時由於硬體問題,更正問題處理將自動繼續。如果丟失是永久的,可以新增一個新的成員並從組中刪去舊的組。
要新增一個新的成員到重做日誌組,執行下面語句:
SQL> ALTER DATABASE ADD LOGFILE MEMBER 'log_file_name' REUSE TO GROUP n
即使資料庫開啟時你也能執行這個語句,而不影響資料庫可用性。
如果一個已經歸檔的非活動組的所有成員丟失了,該組能刪除並重建。
在所有其它情況(丟失當前ACTIVE 組,或還沒有備歸檔的非活動組的所有聯機日誌成員),你必須故障轉移到備資料庫。參考第 7 章以獲得故障轉移步驟。
10.2.6 資料庫的不完全恢復
主資料庫的不完全恢復通常在如下情況下完成,如當資料庫邏輯損壞(被一些使用者或應用)或當表空間或資料檔案意外從資料庫刪去。
取決於備資料庫例項上的當前資料庫檢查點SCN,你能使用下面步驟之一來執行資料庫的不完全恢復。所有過程按優先排序,以花費最少時間的開始。
使用Flashback 資料庫 當在主資料庫上允許 Flashback 資料庫特性時,使用 Flashback 資料庫是推薦的步驟,不丟失一個資料庫檔案,並且基於時間點的恢復比最舊的閃回 SCN 或最舊的閃回時間還大。檢視 12.5 節以獲得使用 Flashback 資料庫來做基於時間點的恢復的步驟。
使用備資料庫例項 當備資料庫處於期望的不完全恢復時間之後時,並且在主或備資料庫上沒有允許 Flashback 資料庫,推薦使用這個步驟,
1.恢復備資料庫到期望的時間點:
RECOVER DATABASE UNTIL TIME 'time';
可選的,不完全恢復時間能使用SCN 或日誌序列號指定:
RECOVER DATABASE UNTIL SCN incomplete recovery SCN'
RECOVER DATABASE UNTIL LOGSEQ incomplete recovery log sequence number THREAD thread number
2.以只讀模式開啟備資料庫以檢驗資料庫的狀態。
如果狀態不是期望的,使用LogMiner 工具來查詢歸檔重做日誌檔案以找到不完全恢復正確的目標時間或 SCN。可選地,你能開始恢復備資料庫到你已知的在目標時間前的點,然後以只讀模式開啟資料庫來檢查資料的狀態。重複這個過程直到資料庫的狀態檢查為正確。注意如果你恢復資料庫太遠,(就是說,經過錯誤發生的 SCN)你不能返回到更早的 SCN。
3.使用 SQL ALTER DATABASE ACTIVATE STANDBY DATABASE 語句啟用備資料庫。這轉換備資料庫到主資料庫,建立一個新的重置日誌分支,並開啟資料庫。檢視
8.4 節以認識到備資料庫如何反應到新的重置日誌分支。
使用主資料庫例項 如果所有的備資料庫例項已經恢復到期望的時間點以後,並且在主或備資料庫上允許 Flashback 資料庫,則這是你的唯一選擇。
使用下面步驟在主資料庫上執行不完全恢復:
1.使用 LogMiner 或其它方法來確定在那個時間或 SCN,資料庫中的所有資料是好的。
2.使用時間或 SCN,執行下面 RMAN 命令來做不完全資料庫恢復並使用 RESETLOGS
選項開啟資料庫(在連線到目錄資料庫和處於MOUNT 狀態的主例項之後):
RUN
{
SET UNTIL TIME 'time';
RESTORE DATABASE; RECOVER DATABASE;
}
ALTER DATABASE OPEN RESETLOGS;
在這個過程之後,所有備資料庫例項必須在Data Guard 配置中重新建立。
10.3 額外的備份情況
下面小節描述瞭如何對於其它配置更改備份步驟,如當備和主資料庫無法共享備份檔案時;備例項只用於遠端歸檔重做日誌檔案時;或備資料庫檔名不同於主資料庫時。
10.3.1 備資料庫地理距離太遠無法共享備份
在這種情況中,在備系統上進行的備份不容易被主系統或其它備系統訪問到。在所有系統上執行資料庫的完全備份以執行恢復操作。閃回恢復區能位於主和備系統的本地(例如,閃回恢復區對於主和備資料庫不是同一個)。
在這個場景中,你還是能使用10.2 節中描述的普通策略,但有如下例外:
z 由 RMAN 建立的備份檔案必須標記本地系統名字,在 RESTORE 操作時必須使用標記以限制 RMAN 選擇在同一主機上進行的備份。換句話說,BACKUP 命令在建立備份時必須使用 TAG node name 選項;RESTORE 命令必須使用 FROM TAG node name 選項;並且 RECOVER 命令必須使用 FROM TAG node name ARCHIVELOG TAG node name 選項。
z 備站點的災難恢復:
1.使用備例項以前操作使用的同樣引數檔案以 NOMOUNT 狀態啟動備例項。
2.使用 SQL ALTER DATABASE CREATE STANDBY CONTROLFILE AS filename 語句在主例項上建立一個備控制檔案,並使用建立的控制檔案來安裝備例項。
3.執行下面 RMAN 命令來還原和恢復資料庫檔案:
RESTORE DATABASE FROM TAG 'node name'
RECOVER DATABASE FROM TAG 'node name' ARCHIVELOG TAG 'node name'
4.重啟重做應用。
備例項將取得5.8 節中描述的剩餘歸檔重做日誌檔案。
10.3.2 備資料庫不包含資料檔案,用於 FAL 伺服器
使用在10.1 節中描述的同樣步驟,除了備份資料檔案的 RMAN 命令不能對 FAL 服務
器執行。對於所有歸檔重做日誌檔案FAL 伺服器能用於備份源,從而減負向 FAL 伺服器的歸檔重做日誌檔案的備份。
10.3.3 備資料庫檔名不同於主資料庫
如果資料庫檔名在主和備資料庫上是不同的,你使用的RESTORE 和 RECOVER 命
令將會稍微不同。要獲得備資料庫上實際的資料檔名字,查詢V$DATAFILE 檢視並對於
資料庫中的所有資料檔案指定SET NEWNAME 選項:
RUN
{
SET NEWNAME FOR DATAFILE 1 TO 'existing file location for file#1 from
V$DATAFILE';
SET NEWNAME FOR DATAFILE 2 TO 'existing file location for file#2 from
V$DATAFILE';
…
…
SET NEWNAME FOR DATAFILE n TO 'existing file location for file#n from V$DATAFILE';
RESTORE {DATAFILE <n,m,…> | TABLESPACE tbs_name_1, 2, …| DATABASE;
SWITCH DATAFILE ALL;
RECOVER DATABASE {NOREDO};
}
類似地,在備資料庫恢復期間,RMAN DUPLICATE 命令也應該使用 SET NEWNAME
選項來指定新的檔名。
10.3.4 對於閃回恢復區中的歸檔重做日誌檔案的刪除策略
預設地,在閃回恢復區中已備份到第三方裝置或變得廢棄(如RMAN 保留策略定義)的歸檔重做日誌檔案是適宜刪除的。如果閃回恢復區中的磁碟空間變滿了,已備份或廢棄的歸檔重做日誌檔案最終能被自動刪除以騰出空間。然而,你能使用下面 RMAN 命令來更改這種預設刪除策略:
CONFIGURE ARCHIVELOG DELETION POLICY TO [CLEAR | NONE | APPLIED ON
STANDBY];
本小節描述命令限定詞並提供設定刪除策略的例子。檢視Oracle 資料庫備份和恢復高階使用者指南以獲得 Oracle 軟體如何管理閃回恢復區中的磁碟空間的更多相關資訊。
使用APPLIED ON STANDBY 子句
使用APPLIED ON STANDBY 子句使得已經被應用到所有強制備目的地的歸檔重做日誌檔案將被刪除。當你指定這個子句時進行的處理在下面表中描述:
當 APPLIED ON STANDBY 子句配置在… |
然後,這些檔案適宜於刪除… |
主資料庫 |
在閃回恢復區中已經應用在所有強制備資料庫上的歸檔重做日誌檔案 |
有一個或更多強制級聯備資料庫的備資料庫 |
在閃回恢復區中已經應用在所有強制級聯備資料庫上的歸檔重做日誌檔案 |
沒有級聯備數控的備資料庫 |
在閃回恢復區中已經應用在備資料庫上的歸檔重做日誌檔案 |
檢視附錄 E 以獲得級聯目的地的更多相關資訊。
使用CLEAR 子句
使用CLEAR 子句來禁止以前使用 RMAN CONFIGURE ARCHIVELOG DELETION
POLICY 命令設定的刪除策略。Oracle 資料庫將繼續預設的刪除策略行為,就是如果閃回恢復區中的磁碟空間變滿就刪除已備份或廢棄的歸檔重做日誌。
使用NONE 子句
使用NONE 子句使得在閃回恢復區中已備份或作為 RMAN 保留策略廢棄的歸檔重做日誌適宜於刪除。這是預設的配置。如果閃回恢復區中的磁碟空間變滿了,已備份或廢棄的歸檔重做日誌檔案被刪除以騰出空間。
CONFIGURE ARCHIVELOG DELETION POLICY 命令的例子當在備資料庫上進行歸檔重做日誌檔案的備份時:
1.在主資料庫上執行下面命令:
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
2.在備資料庫上執行下面命令:
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;
當在主資料庫上進行歸檔重做日誌檔案的備份時:
1.在備資料庫上執行下面命令:
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY; 2.在主資料庫上執行下面命令:
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;
10.3.4.1 在角色轉換之後重新配置刪除策略在切換或故障轉移之後,你可能需要在每個資料庫上重新執行RMAN CONFIGURE
ARCHIVELOG DELETION POLICY 命令。如果對於歸檔重做日誌檔案的備份站點保持相同,則不需要操作。否則,你必須透過在不進行備份的資料庫上執行CONFIGURE
ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY 語句來切換歸檔日誌刪除策略,並在進行備份的資料庫上執行 CONFIGURE ARCHIVELOG DELETION POLICY TO NONE 語句。
10.3.4.2 檢視當前刪除策略要檢視資料庫的當前設定(APPLIED ON STANDBY、CLEAR、NONE),執行下面查
詢:
SELECT NAME, VALUE FROM V$RMAN_CONFIGURATION WHERE
NAME LIKE '%ARCHIVELOG DELETION POLICY%';
NAME VALUE
----------------------------- -------------- ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY
你也能使用RMAN SHOW ARCHIVELOG DELETION POLICY 命令來找出現有的配
置:
RMAN> SHOW ARCHIVELOG DELETION POLICY RMAN configuration parameters are:
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
11 使用SQL 應用來升級Oracle 資料庫
從Oracle 資料庫 10g 版本 1(10.1.0.3)開始,你能使用邏輯備資料庫來執行 Oracle 資料庫 10g 軟體的滾動升級。在滾動升級期間,你能在升級的時候在主和資料庫上執行不同版本的Oracle 資料庫,每次一個,從而最小化主資料庫的當機時間。
注:
本章描述如何以滾動方式在邏輯備備資料庫到位時升級以最小化當機時間。第二種方法,在 B.3 節,“在邏輯備資料庫到位時升級 Oracle 資料庫”中描述的是一種傳統的升級步驟,它會導致在升級過程中當機。只能使用一種方法的步驟來執行完整升級。不要嘗試使用兩種方法或組合兩種方法中的步驟。
在本章中的指導描述當升級Oracle 資料庫時如何最小化當機時間。本章包含下述主題: z 使用 SQL 應用滾動升級的益處 z 使用 SQL 應用執行滾動升級的必要條件 z 在升級指導中使用的圖示和規範 z 準備升級
z 升級資料庫
11.1 使用 SQL 應用滾動升級的益處
使用SQL 應用執行滾動升級提供了一些優點: z 你的資料庫將會發生非常小的當機時間。整個當機時間就是執行切換所需的時間。
z 由於 PL/SQL 重新編譯你消除了應用當機時間。 z 你能驗證升級的資料庫版本而不影響主資料庫。
11.2 使用 SQL 應用執行滾動升級的必要條件
滾動升級過程需要下述:
z 執行於 Oracle 資料庫版本 x 中的主資料庫和執行於 Oracle 資料庫版本 y 的邏輯備資料庫。
z 資料庫必須不是 Data Guard Broker 配置中的一部分。檢視 Oracle Data Guard Broker 以獲得從 broker 配置中移除資料庫的相關資訊。
z Data Guard 保護模式必須設為最大可用性或最大效能。查詢 V$DATABASE 檢視中的 PROTECTION_LEVEL 列來找出當前的保護模式設定。
z 對於邏輯備資料庫目的地的 LOG_ARCHIVE_DEST_n 初始化引數必須設為
OPTIONAL 以確保主資料庫在邏輯備資料庫升級時能處理。
同時檢視:
Oracle Data Guard 概念和管理以獲得在 LOG_ARCHIVE_DEST_n 初始化引數中使用
MANDATORY 和 OPTIONAL 屬性的完整相關資訊
z COMPATIBLE 初始化引數必須符合升級前的軟體版本。就是說,從版本 x 滾動升級到版本 y 需要 COMPATIBLE 初始化引數在主和被資料庫上都設為版本 x。
11.3 在升級指導中使用的圖示和規範
圖11-1 顯示了在升級開始之前的 Data Guard 配置,主和邏輯備資料庫都執行在同一
Oracle 資料庫軟體版本。
圖11-1 在升級之前的Data Guard 配置
在升級過程中,Data Guard 配置在這個過程中的一些點上執行於混合資料庫版本。資料保護在跨版本時不可用。在這些步驟期間,考慮在 Data Guard 配置中設定第二個備資料庫以提供資料保護。
描述升級過程的步驟和圖示稱資料庫為“資料庫 A”和“資料庫 B”,而不是“主資料庫”和“備資料庫”。這是因為在升級過程中資料庫切換角色。資料庫 A 是主資料庫,資料庫 B 是備資料庫,如圖 11-1 中所示。
11.4 準備升級
執行下述步驟來為升級準備主和備資料庫。
第1 步 設定 COMPATIBLE 初始化引數
確保COMPATIBLE初始化引數在升級之前確定執行在主資料庫上的Oracle資料庫軟體版本號。
例如,如果主資料庫執行在版本10.1,則在兩個資料庫上都設定 COMPATIBLE 初始化引數為 10.1。確保在設定主資料庫之前先在備資料庫上設定 COMPATIBLE 初始化引數。
第2 步 獲得不支援表的相關資訊
在資料庫A 上,使用 DBMS_LOGSTDBY PL/SQL 過程來捕獲執行在主資料庫上的將不被邏輯備資料庫支援的事務相關資訊。執行下面過程來捕獲並以
DBA_LOGSTDBY_EVENTS 表中的時間記錄資訊:
EXEC
DBMS_LOGSTDBY.APPLY_SET('MAX_EVENTS_RECORDED',DBMS_LOGSTDBY.MAX_E
VENTS);
EXEC DBMS_LOGSTDBY.APPLY_SET('RECORD_UNSUPPORTED_OPERATIONS',
'TRUE');
注:
在 Oracle 資料庫 10g 版本 1(10.1)中,DBMS_LOGSTDBY.MAX_EVENTS 常量被稱為 DBMS_LOGSTDBY_PUBLIC.MAX_EVENTS。兩個常量的效果是一樣的,但是在版本 2 (10.2)中 DBMS_LOGSTDBY_PUBLIC 包被廢棄了,常量的定義就轉移到 DBMS_LOGSTDBY 包中。
即使你在資料庫A 上執行這些 PL/SQL 過程,它們也不會影響主資料庫。然而,透過
在建立邏輯備資料庫(和邏輯備資料庫控制檔案)之前在主資料庫上執行這些過程,當你在步驟4 中建立邏輯備資料庫時這些設定自動轉移。如果邏輯備資料庫以及存在(資料庫 B)並且能用於升級過程,在兩邊資料庫上都執行
DBMS_LOGSTDBY PL/SQL 命令,然後跳到步驟 3。
同時檢視:
Oracle 資料庫 PL/SQL 包和型別參考以獲得 DBMS_LOGSTDBY 過程的完整相關資訊
第3 步 確認不支援的資料型別和儲存屬性要在主資料庫上確認不支援的資料庫物件並決定如何處理它們,遵循這些步驟:
1.確認對錶不支援的資料型別和儲存屬性: z 回顧在附錄 C,“邏輯備資料庫上支援的資料型別和 DDL 支援”中提供的支援的資料型別和儲存屬性的列表。
z 在主資料庫上查詢 DBA_LOGSTDBY_UNSUPPORTED 和 DBA_LOGSTDBY_SKIP 檢視。在主資料庫上向列出表和方案進行的更改將不會應
用到邏輯備資料庫上。下面查詢顯示了不支援表的列表的例子:
SQL> SELECT DISTINCT OWNER, TABLE_NAME FROM
DBA_LOGSTDBY_UNSUPPORTED;
OWNER TABLE_NAME
---------- ----------------- OE CATEGORIES_TAB
OE CUSTOMERS
OE WAREHOUSES
PM ONLINE_MEDIA
PM PRINT_MEDIA
SCOTT MYCOMPRESS SH MVIEW$_EXCEPTIONS 7 rows selected.
SQL>
SQL> SELECT OWNER FROM DBA_LOGSTDBY_SKIP
2 WHERE STATEMENT_OPT = 'INTERNAL SCHEMA';
OWNER
------------------------------
CTXSYS
DBSNMP
DIP
ORDPLUGINS
ORDSYS
OUTLN
SI_INFORMTN_SCHEMA
SYS
SYSTEM
WMSYS
10 rows selected.
2.決定如何處理不支援的表。
如果在你的主資料庫上更改不支援的物件,可能使用下面方法之一來執行升級: z 在執行升級過程的時間期間臨時掛起對不支援的表的更改。
如果你能阻止對不支援更改的更改,則使用SQL 應用還是一個可行的執行升級過程的方法。這種方法需要你從建立邏輯備控制檔案到你完成升級期間阻止使用者更改任何不支援的表。你能監控在 DBA_LOGSTDBY_EVENTS 檢視中的事務活動並終止升級(如果必要)直到你執行第一次切換。
z 當使用者將不能對不支援的表進行更改時執行升級。
對於支援多個不同需求的部門的邏輯備資料庫,如果你知道使用者如何訪問資料庫中的表,使用SQL 應用來執行升級還是可能的。例如,假設薪酬部門更新一個物件表,但是那個部門只是從週一到週五更新資料庫。然而,客戶服務部門需要每天 24 小時、每週 7 天地訪問資料庫,但是隻使用支援的資料型別和表。在這種場景,你能在週末執行升級。
如果在升級期間你不能阻止對不支援的表的更改,任何發生的不支援的事務被記錄在邏輯備資料庫上的DBA_LOGSTDBY_EVENTS 表中。在更新完成後,你可能能使用 Oracle Data Pump 或 Export/Import 工具來匯入更改的表到升級的資料庫中。
更改的表的大小將會確定資料庫操作有多長時間不可用,所以你必須決定表是否太大而無法到處並匯入其資料到備資料庫。例如,一個4TB 的表不適於匯出/匯入處理。
注: 如果因為在你的應用中的資料型別不被支援,你不能使用邏輯備資料庫,則根據 Oracle 資料庫升級指南中的文件執行升級。
第4 步 建立邏輯備資料庫
要建立邏輯備資料庫,遵循第 4 章中的指導。
Oracle 建議在邏輯備資料庫上配置一個備重做日誌以最小化當機時間。
注:
如果已經存在邏輯備資料庫,跳到 11.5 節,“升級資料庫”來開始升級過程。
11.5 升級資料庫
本節提供了升級邏輯備資料庫和主資料庫的逐步過程。表 11-1 列出了步驟。
表11-1 升級Oracle 資料庫軟體的逐步過程
1 停止 SQL 應用並升級邏輯備資料庫
2 重啟 SQL 應用
3 監控已升級備資料庫上的事件
4 開始切換
5 確定在升級期間是否有更改不支援的物件
6 完成切換並啟用使用者應用
7 升級前主資料庫
8 開始 SQL 應用
9 可選地,在兩邊資料庫上都提升相容級別
10 監控在新的邏輯備資料庫上的事件
11 可選地,執行另一次切換
注:
如果你的業務不需要邏輯備資料庫來支援主資料庫,你能跳過步驟 7 到 11。
第1 步 停止 SQL 應用並升級邏輯備資料庫
要開始升級,停止SQL 應用並在邏輯備資料庫(資料庫 B)上升級 Oracle 資料庫軟體到版本 y。要停止 SQL 應用,在資料庫 B 上執行下面語句:
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
要升級Oracle 資料庫軟體,參考 Oracle 資料庫升級指南以獲得合適的 Oracle 資料庫版本。
圖11-2 顯示了資料庫 A 執行在版本 x,資料庫 B 執行在版本 y。在升級期間,重做資料庫在主系統上累積。
圖11-2 升級邏輯備資料庫版本
第2 步 重啟 SQL 應用
重啟SQL 應用並操作於資料庫 A 上的版本 x 和資料庫 B 上的版本 y。要開始 SQL 應用,在資料庫 B 上執行下面語句:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
在主系統上累積的重做資料庫自動傳輸並應用到新升級的邏輯備資料庫上。當你檢驗升級的Oracle 資料庫軟體版本在生產環境正確執行的任意時期,Data Guard 配置都能執行圖
11-3 所示的混合版本。圖11-3 執行混合模式
要監控資料庫B 多快趕上資料庫 A,在資料庫 B 上查詢 V$LOGSTDBY_PROGRESS
檢視。例如:
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY HH24:MI:SS';
Session altered.
SQL> SELECT SYSDATE, APPLIED_TIME FROM V$LOGSTDBY_PROGRESS;
SYSDATE APPLIED_TIME
------------------ ------------------
27-JUN-05 17:07:06 27-JUN-05 17:06:50
第3 步 監控已升級備資料庫上的事件
你應該頻繁地查詢DBA_LOGSTDBY_EVENTS 檢視來獲知是否有 DDL 和 DML 語句還沒有在資料庫 B 上被應用。例子 11-1 示範了監控事件如何能警告你在兩個資料庫中可能的區別。
例子11-1 透過DBA_LOGSTDBY_EVENTS 監控事件
SQL> SET LONG 1000
SQL> SET PAGESIZE 180
SQL> SET LINESIZE 79
SQL> SELECT EVENT_TIMESTAMP, EVENT, STATUS FROM DBA_LOGSTDBY_EVENTS
ORDER BY EVENT_TIMESTAMP;
EVENT_TIMESTAMP
----------------------------------------------------------------- EVENT
----------------------------------------------------------------- STATUS
-----------------------------------------------------------------
…
24-MAY-05 05.18.29.318912 PM
CREATE TABLE SYSTEM.TST (one number) ORA-16226: DDL skipped due to lack of support
24-MAY-05 05.18.29.379990 PM
"SYSTEM"."TST"
ORA-16129: unsupported dml encountered
在前面的例子中:
z ORA-16226 錯誤顯示了一句 DDL 語句可能不被支援。在這種情況下,因為它屬於內部方案而可能不被支援。
z ORA-16129 錯誤顯示了一句 DML 語句沒有被應用。
這些錯誤型別指出所有在資料庫A 上發生的更改還沒有被應用到資料庫 B。在這個點上,你必須決定是否繼續升級過程。如果你確定這種邏輯備資料庫和主資料庫之間的不同是能夠接收的,則繼續升級過程。如果不是,中斷並丟棄資料庫 B 並在其它時間執行升級過程。
第4 步 開始切換
當你對升級的資料庫軟體正確操作感到滿意時,透過在資料庫A 上執行下面語句來執行切換以反轉資料庫角色:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY;
這可能只需要幾秒鐘,取決於語句是否必須等待現有的事務完成。還是連線到資料庫A 的使用者應該立即登出並重新連線到資料庫 B。
注:
如果當資料庫 A 是主資料庫時,你對其上面的不支援的表或包掛起活動,如果你最終
計劃切換回資料庫A,你必須當資料庫 B 是主資料庫時繼續在其上面掛起同樣的活動。
第5 步 確定在升級期間是否有更改不支援的物件
步驟3,“監控已升級備資料庫上的事件”描述瞭如何列出被更改的不支援的表。如果在主資料庫上執行了不支援的 DML 語句(如例子 11-1 中描述),使用匯入工具如 Oracle
Data Pump 匯入那些表的最近的版本。
注:
你匯入的表必須滿足在 11.4 節,“準備升級”,步驟 3 中宣告的資料型別需求。
例如,下面匯入命令截斷scott.emp 表並匯入符合前主資料庫(A)的資料:
IMPDP SYSTEM/MANAGER NETWORK_LINK=DATABASEA TABLES=SCOTT.EMP
TABLE_EXIST_ACTION=TRUNCATE
第6 步 完成切換並啟用使用者應用當你對升級的資料庫軟體正確操作感到滿意時,完成切換以反轉資料庫角色:
1.在資料庫 B 上,查詢 V$DATABASE 檢視的 SWITCHOVER_STATUS 列,如下:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
2.當 SWITCHOVER_STATUS 列顯示 TO PRIMARY 時,透過在資料庫 B 上執行下面語句完成切換:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL PRIMARY;
3.在資料庫 B 上啟用使用者應用和服務,它現在執行在主資料庫角色了。
在切換過後,你不能從執行在新資料庫軟體版本的新的主資料庫(B)傳送重做資料到執行在舊的軟體版本的新的備資料庫(A)。這意味著: z 重做資料在新的主資料庫上累積。
z 新的主資料庫在這個時候是不受保護的。
圖11-4 顯示資料庫 B,前備資料庫(執行版本 y),現在是主資料庫,資料庫 A,前主資料庫(執行版本 x),現在是備資料庫。使用者連線到資料庫 B。
如果資料庫B 能足夠地作為主資料庫服務並且你的業務不需要邏輯備資料庫來支援主資料庫,則你已經完成了滾動升級步驟。允許使用者登陸到資料庫 B 並在那裡開始工作,並在方便的時候丟棄資料庫 A。否則,繼續步驟 7。
圖11-4 在切換過後
第7 步 升級前主資料庫
資料庫A 還是執行在版本 x 並且不能從資料庫 B 應用重做資料,直到你升級它並開始
SQL 應用。
要獲得升級Oracle 資料庫軟體的更多資訊,檢視 Oracle 資料庫升級指南以獲得合適的
Oracle 資料庫版本。
圖11-5 顯示了在兩邊資料庫都升級過後的系統。
圖11-5 兩邊資料庫都升級了
第8 步 開始 SQL 應用
在資料庫A 上執行下面語句以開始 SQL 應用,如果必要,建立一個資料庫連結到資料庫 B:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE NEW PRIMARY db_link_to_b;
注:
只有在資料庫連結還沒有設定時,在執行這條語句之前建立資料庫連結。
當你在資料庫A 上開始 SQL 應用時,在主資料庫(B)上累積的重做資料被髮送到邏
輯備資料庫(A)。一旦所有重做資料庫在備資料庫上變得可用,主資料庫再次受到保護。
第9 步 可選地,在兩邊資料庫上都提升相容級別
透過設定COMPATIBLE 初始化引數提升兩個資料庫的相容性級別。在設定主資料庫之前先在備資料庫上設定 COMPATIBLE 引數。檢視 Oracle 資料庫參考以獲得 COMPATIBLE 初始化引數的更多相關資訊。
第10 步 監控在新的邏輯備資料庫上的事件
要確保在資料庫B 上執行的所喲更改正確應用到邏輯備資料庫(A),你應該頻繁地查詢 DBA_LOGSTDBY_EVENTS 檢視,如在步驟 3 中對資料庫 A 所做。(檢視例子 11-1)如果進行的更改使得資料庫 A 無效作為你的現有主資料庫的複製,你能丟棄資料庫 A 並在其位置建立一個新的邏輯備資料庫,檢視第 4 章,“建立邏輯備資料庫”以獲得完整資訊。
第11 步 可選地,執行另一次切換
可選地,執行資料庫的另一次切換使得資料庫A 再次執行於主資料庫角色(如圖 11-1 中所示)。
同時檢視:
7.3.1 節,“包含邏輯備資料庫的切換”
About Me
...............................................................................................................................
● 本文整理自網路
● 本文在itpub(http://blog.itpub.net/26736162)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新
● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/
● 本文部落格園地址:http://www.cnblogs.com/lhrbest
● 本文pdf版及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/
● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/
● QQ群:230161599 微信群:私聊
● 聯絡我請加QQ好友(646634621),註明新增緣由
● 於 2017-07-01 09:00 ~ 2017-07-31 22:00 在魔都完成
● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解
● 版權所有,歡迎分享本文,轉載請保留出處
...............................................................................................................................
拿起手機使用微信客戶端掃描下邊的左邊圖片來關注小麥苗的微信公眾號:xiaomaimiaolhr,掃描右邊的二維碼加入小麥苗的QQ群,學習最實用的資料庫技術。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2142310/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【ASK_ORACLE】Oracle Data Guard(一)DG架構Oracle架構
- 物理DG!Oracle 10G Data Guard DemoOracle 10g
- 【DG】Data Guard搭建(physical standby)
- Oracle DG(Data Guard)支援異構平臺說明Oracle
- oracle10g data guard(dg)__flashback_physical databaseOracleDatabase
- oracle data guard!!Oracle
- 官方文件學習:data guard broker
- G008-ORACLE-DG ORACLE 19C Active Data Guard DML RedirectionOracle
- 【DG】Data Guard主備庫Switchover切換
- 介紹ORACLE DATA GUARD——DATA GUARD概念和管理Oracle
- Oracle Data Guard配置Oracle
- 【DG】Data Guard主備庫Failove切換AI
- oracle9i(9204)dg(data guard)_ place the standby database in manual recovery modeOracleDatabase
- Oracle Data Guard Broker元件Oracle元件
- Oracle Data Guard簡介Oracle
- Oracle Data Guard 介紹Oracle
- ORACLE Data Guard--IOracle
- 【DataGuard】部署Data Guard相關引數詳解 - Oracle官方文件描述Oracle
- oracle9204(9i)_dg(data guard)__Tuning Logical Standby DatabasesOracleDatabase
- Oracle 11g Data Guard Enabling Active Data GuardOracle
- [Data Guard]Oracle10g Data Guard學習筆記(一)Oracle筆記
- [Data Guard]Oracle10g Data Guard學習筆記(二)Oracle筆記
- [Data Guard]Oracle10g Data Guard學習筆記(三)Oracle筆記
- 與oracle10g data guard(dg)緊密關聯的相關檢視Oracle
- oracle9i(9204)data guard(dg)_logical standby_failover操作指南OracleAI
- oracle9204(9i)_dg(data guard)_archive gap_query_apply_transmitOracleHiveAPPMIT
- 1 關於 Oracle Data GuardOracle
- 2 Oracle Data Guard 安裝Oracle
- 1 Oracle Data Guard Broker 概念Oracle
- Oracle Data Guard和Broker概述Oracle
- Oracle 11g Data GuardOracle
- Oracle11g Data GuardOracle
- Oracle Data Guard Failover(activate)OracleAI
- 4.1.6 Oracle Restart 與 Oracle Data Guard 整合OracleREST
- oracle10g data guard(dg)__Adding or Dropping Online Redo Log FilesOracle
- Data Guard的三種保護模式(摘自官方文件)模式
- 8 Oracle Data Guard Broker 屬性Oracle
- 9 Oracle Data Guard 故障診斷Oracle