OCP-032-Chapter07 例項和介質恢復結構(zt)

tolywang發表於2006-08-23
OCP-032-Chapter07 例項和介質恢復結構
目的
完成本課後,應該可以做下列事情:
描述Oracle的程式、記憶體結構和與恢復相關的檔案
瞭解檢查點、重做日誌檔案和歸檔日誌檔案的重要性
描述調整例項恢復的方法

一些常用的檢視:v$sga, v$instance, v$process, v$bgprocess, v$database, v$datafile
大型共享池用於從共享記憶體分配順序 I/O 緩衝區。對於 I/O 從屬和 Oracle 備份與還原,RDBMS 分配大

小為幾百KB的緩衝區。
當設定了DBWR_IO_SLAVES和BACKUP_TAPE_IO_SLAVES引數模擬非同步I/O時,恢復管理器(Recovery Manager

-- RMAN)會使用大型池來執行備份和恢復。
如果設定了LARGE_POOL_SIZE,Oracle嘗試從大型池中取得記憶體,如果這個值不夠大,Oracle也不會從共享

池中取得記憶體。如果沒有設定這個引數,Oracle會嘗試從SGA中取得記憶體。如果Oracle不能取得足夠的記憶體

,它會從本地程式記憶體中獲得I/O緩衝區記憶體,同時向alert.log檔案寫入一條資訊表明備份採用了同步I/O


DBWR_IO_SLAVES:該引數指定 DBWn 程式使用的 I/O 從屬的數量。DBWn 程式及其從屬總是寫入磁碟。缺

省情況下,該值為 0,即不使用 I/O 從屬。
如果 DBWR_IO_SLAVES 設定為非零值,則由 ARCn 程式、LGWR 程式和恢復管理器使用的 I/O 從屬的數量

都設定為 4。
在不支援或不能有效實施非同步 I/O 的平臺上,通常使用 I/O 從屬來模擬非同步 I/O。不過,即使在使用異

步 I/O 時也可以使用 I/O 從屬。在這種情況下,I/O 從屬將使用非同步 I/O。
BACKUP_TAPE_IO_SLAVES:它指定恢復管理器是否使用 I/O 從屬將資料備份、複製或還原到磁帶上。
當 BACKUP_TAPE_IO_SLAVES 設定為 TRUE 時,I/O 從屬程式用於對磁帶裝置進行讀寫操作。
當該引數設定為 FALSE(預設值)時,I/O 從屬不用於備份;相反,參與備份的影子程式將訪問磁帶裝置


注:由於在任一特定時刻只能有一個程式訪問磁帶裝置,因此該引數值是一個布林值,它控制對 I/O 從屬

程式的部署,允許或禁止該程式訪問磁帶裝置。
要執行雙重備份,則需要啟用該引數,否則將發出一個錯誤。啟用該引數後,恢復管理器將根據所請求的

備份副本數來配置所需的從屬程式的數量

儘管一個資料庫寫入器程式對於大多數系統已足夠,但如果系統需要修改大量資料,您還可以配置附加的

程式(從 DBW1 到 DBW9)以提高寫入效能。這些附加的資料庫寫入器程式對單處理器系統不起作用。
例程啟動後,資料檔案可能會包含未提交的資料。這種情況發生在資料已更改但尚未提交時(已更改的數

據正處在快取記憶體中),此時快取記憶體中需要更多空間,從而強制未提交的資料轉存入磁碟。
表空間包含一個或多個資料檔案。認真建立表空間對於提供靈活且易管理的備份和恢復策略非常重要。以

下是一種典型的表空間配置,其中考慮了備份和恢復操作的要求:
系統:如果將系統資料和使用者資料分放在不同的表空間中,則可以更靈活地進行備份和恢復操作。
臨時:如果含有臨時段(用於排序等)的表空間丟失,可以重建它,而不是恢復它。
還原:備份還原表空間的過程與備份其它任何讀/寫表空間的過程完全相同。由於自動還原表空間對於恢復

和讀一致性至關重要,您應該經常對它進行備份。
只讀資料:可以縮短備份時間,因為只有當表空間設為只讀時,才必須對它進行備份。
頻繁變更的資料:應該頻繁地備份這種表空間,這樣也可以縮短恢復時間。
索引資料:應當建立僅用來儲存索引段的表空間。可以經常重建而不是恢復這些表空間。

Oracle 伺服器程式將重做條目從使用者的記憶體空間複製到重做日誌緩衝區
儘管它至少必須擁有兩個日誌組以支援迴圈特性,在大多數情況下,您可能需要兩個以上的重做日誌組。
您可以使用以下 SQL 命令建立附加的日誌檔案組:
ALTER DATABASE [database]
ADD LOGFILE [GROUP integer] filespec
[, [GROUP integer] filespec]...]
要刪除整個聯機重做日誌組,可使用以下 SQL 命令:
ALTER DATABASE [database]
DROP LOGFILE
{GROUP integer|('filename'[,'filename']...)}
[,{GROUP integer|('filename'[,'filename']...)}]...
V$LOG:列出每個組中成員的數量,包含組號、當前日誌序列號、組大小、成員數、狀態、檢查點更改號
V$LOGFILE:列出每個日誌檔案成員的名稱、狀態(STALE 或 INVALID)和組別。
V$LOG_HISTORY:包含有關控制檔案中的日誌歷史記錄的資訊。
透過重新命名聯機重做日誌檔案,可以更改聯機重做日誌檔案的位置。在重新命名聯機重做日誌檔案之前,請

確保新的聯機重做日誌檔案存在。Oracle 伺服器僅更改控制檔案內的指標,並不從物理上重新命名或建立任

何作業系統檔案。如果舊檔案是 Oracle 管理檔案並且它確實存在,則它會被刪除。
如何重新定位重做日誌檔案
1.如果日誌檔案是當前日誌,透過以下命令進行日誌切換:
ALTER SYSTEM SWITCH LOGFILE;
2.使用作業系統的複製實用程式(Unix 中的 cp 或 Windows NT 中的 COPY)將 重做日誌檔案

從先前位置複製到新位置
3.使用 ALTER DATABASE RENAME FILE 命令在控制檔案中進行更改:
ALTER DATABASE [database]
RENAME FILE 'filename'[, 'filename']...
TO 'filename'[, 'filename']...
注:您也可以向組中新增新成員,然後刪除舊成員。
如何向組中新增成員
您可以使用下面的 SQL 命令向現有的重做日誌檔案組中新增新成員:
ALTER DATABASE [database]
ADD LOGFILE MEMBER
['filename' [REUSE]
[, 'filename' [REUSE]]...
TO {GROUP integer
|('filename'[, 'filename']...)
}
]...
如何從組中刪除成員
如果一個聯機重做日誌成員處於 INVALID 狀態,您也許希望刪除該成員。請使用下列 命令:
ALTER DATABASE [database]
DROP LOGFILE MEMBER 'filename'[, 'filename']...
注:您不能從當前或活動的重做日誌檔案組中刪除成員。

檢查點位置
重做日誌中開始恢復的位置稱為檢查點位置。在該檢查點之前的所有引用資料塊都已由 DBWn 寫入磁碟。

該位置定義為它與重做日誌末尾之間的 “距離”。還可以將它看成是檢查點佇列中第一個條目的 “年齡

”,該佇列是按照資料塊最初變灰時的順序排列的灰資料塊連結列表。
檢查點佇列
檢查點佇列中的每個條目包含對應資料塊的識別符號(即檔案編號與塊編號),以及該資料塊最初變灰時在

重做日誌中所處的位置(稱為重做位元組地址或 RBA)。它還包括上一次更改該資料塊時在重做日誌中所處

的位置。檢查點佇列中的第一個條目標識資料庫緩衝區快取記憶體中最早的灰資料塊。DBWn 按檢查點佇列中

的順序從緩衝區快取記憶體中寫入塊,隨著資料塊的寫入,對應的每個條目將被刪除。
當關閉資料庫(異常關閉除外)或透過 ALTER SYSTEM CHECKPOINTA 命令手動啟動檢查點操作時,將執行

稱為完全檢查點的過程。在完全檢查點操作中,DBWn 將資料庫緩衝區快取記憶體中的所有灰緩衝區資料寫入

資料檔案。
增量檢查點(也稱為快速啟動檢查點)是持續活動的檢查點。DBWn 定期從檢查點佇列寫出緩衝區資料,從

而不斷推進記憶體中的增量檢查點操作。增量檢查點操作使 DBWn 寫入緩衝區快取記憶體中的塊,這樣,最早

變灰的緩衝區會被最先寫入。增量檢查點不更新資料檔案頭。增量檢查點記錄在控制檔案中。
ALTER TABLESPACE BEGIN BACKUP 命令僅對緩衝區快取記憶體中屬於該表空間的灰緩衝區啟動部分檢查點操

作。
ALTER TABLESPACE tablespace OFFLINE NORMAL 命令也可用於啟動部分檢查點操作。
檢查點程式 (CKPT) 負責在執行各個檢查點操作時向 DBWn 發出通知,並更新資料庫的資料檔案和控制文

件以指明最新的檢查點。
每隔三秒,CKPT 就會在控制檔案中記錄檢查點佇列中最舊條目的 RBA。出現例程故障後,透過該 RBA 可

以在重做日誌中找到例程恢復操作的起點。之所以能夠做到這一點,是因為系統能夠保證透過 DBWn 將先

前重做記錄中表示的所有資料塊都寫入磁碟。
只有在出現日誌切換的情況下,CKPT 才另外將該資訊寫入資料檔案頭。要提高效能,不要一次寫入所有文

件頭,而是按照所謂的 “惰性寫入” (Lazy Write) 的方式進行分組更新。日誌切換並不強制將所有灰緩

衝區都寫入磁碟。
檢查點確保所有編輯過的資料庫緩衝都被寫到資料庫檔案中,這樣資料庫檔案頭被標記為當前資料檔案,

同時檢查點順序號寫入控制檔案。檢查點透過把緩衝區中已經被檢查點記錄過的所有快取寫入磁碟來達到

同步。增量檢查點是連續不斷的,低負載的檢查點作為後臺程式不斷的把緩衝資料寫入磁碟。
檢查點程式的特性:
CKPT程式總是啟用;在檢查點完成後,CKPT程式負載更新檔案頭;頻繁的檢查點可以減少恢復例項的時間
什麼時候發生檢查點?
每一次日誌切換
當設定了快速啟動檢查點,這會強制DBWn提前寫入緩衝以縮短例項恢復的時間
當LOG_CHECKPOINT_INTERVAL初始化引數設定的頻率到達時。定義了上次完全備份和當前要進行的增量備份之間的重做日誌檔案的塊數。

當設定了LOG_CHECKPOINT_TIMEOUT初始化引數,並且發生超時(從當前檢查點位置開始寫入重做塊算起,逝去的時間超過了設定的秒數)。這個引數設定了上次增量檢查點寫入重做日誌檔案後(有時也稱為日誌尾部),已經過去的時間。這個引數同時設定了快取中髒資料的保留最長時間。
例項關閉時,除非是abort選項
由DBA手動發出alter system checkpoint命令
當表空間離線或者線上備份開始時
注意:只讀資料檔案例外,它們的檢查點號是固化的,和控制檔案裡面的並不匹配。

同步
在每一個檢查點,檢查點序號會在每一個資料庫檔案頭和控制檔案中更新
檢查點序號作為重做日誌檔案、控制檔案和資料檔案之間的同步標記。如果它們擁有同樣的檢查點序號,則認為資料庫處於一致的狀態。
控制檔案中的資訊用來確保其它檔案在資料庫啟動的所擁有的檢查點序號一致。任何的不一致都會導致資料庫無法開啟,需要恢復。
例項恢復
檢查點加速例項的恢復,這是因為在每一個檢查點所有改變的資料都寫入磁碟,這樣子例項恢復時,最後的檢查點之前的資料都不需要回滾。

多工控制檔案
控制檔案的內容:資料庫名、資料庫建立的時間戳、恢復需要的同步資訊、資料檔案和日誌檔案的名字和位置、資料庫的歸檔模式、當前的日誌序列號、RMAN的相關資料
v$controlfile
如何多工控制檔案:
1. 關閉資料庫
2. 複製控制檔案
3. 更改或者新增CONTROL_FILES引數
4. 啟動資料庫

歸檔日誌的用處:
一個資料庫備份和歸檔日誌檔案,可以保證所有提交的資料可以被恢復
在資料庫線上時也可以進行備份
在資料庫恢復時,Oracle伺服器會自動尋求日誌檔案(包括歸檔的),所以要保證它們在設定的位置

例項恢復的各個階段:
1. 檔案不同步
Oracle伺服器檢測當不同步的檔案出現時哪個資料庫需要恢復。例項故障可能會導致這種情況發生,這時沒有提交的資料都會丟失,從而發生檔案不同步
2. 前滾
DBWR把所有已提交和未提交的資料都寫入資料檔案,目的是要把日誌檔案中所有記錄的改變都寫入資料塊。

回滾段在前滾階段產生。因為重做日誌儲存著資料改變前後的映象,如果在資料檔案中發現未提交的塊而且沒有回滾時,就會新增一個回滾段。
重做日誌都會應用到日誌緩衝。被標記為用於恢復的緩衝不會參與一般的事務,知道它們被恢復程式釋放掉。
如果只讀檔案和控制檔案的狀態發生衝突,那麼重做日誌會應用於只讀檔案。
3. 資料檔案中包含提交和未提交的資料
4. 回滾階段:為了去除沒有提交的資料,會使用到前滾階段或者是故障發生前產生的回滾段。資料塊會根據Oracle伺服器或者是使用者的請求回滾,看誰先請求資料塊。之後資料庫就可以使用,即使回滾仍然在進行。只有那些參與回滾的資料塊不可使用。
5. 資料檔案只包含提交的資料:當前滾和回滾都結束後,磁碟中只包含提交的資料
6. 同步資料檔案:所有的資料檔案此時都完成同步
最佳化例項恢復的效能:
最佳化例項恢復和故障恢復的時間
最佳化例項恢復的階段
例項故障後,例項恢復或者故障恢復會自動把重做日誌項應用於Oracle資料塊
要在例程恢復的持續時間與日常效能之間取得平衡,採用的主要手段就是影響 Oracle 執行檢查點操作的頻率。您可以儘量減少恢復過程中所處理的塊的數量,方法是讓檢查點處於最新重做日誌記錄之後的若干塊處。但是,頻繁地執行檢查點操作將會給正常操作帶來更大的效能開銷。

要將例項恢復和故障恢復的持續時間保持在使用者指定的範圍內,可以採用以下手段:
設定初始化引數以影響恢復過程中所涉及的重做日誌記錄和資料塊的數量
調整重做日誌檔案的大小以影響檢查點操作的頻率
發出SQL語句以啟動檢查點操作
並行執行例程恢復操作
快速啟動故障恢復功能可用來控制例程恢復。該功能透過設定前滾時間的範圍並使其可以預知,從而縮短前滾時間,同時還節省了執行回退所需的時間。快速啟動故障恢復的基礎是快速啟動檢查點體系結構。透過初始化引數可指定完成恢復操作的前滾階段的目標時間。
重做日誌檔案的大小直接影響檢查點操作。最小日誌的大小越小,Oracle 伺服器越可以頻繁地將灰緩衝區寫入磁碟,以確保在當前日誌完全填滿之前,使檢查點的位置前進到該當前日誌;這樣,就可以重新使用該日誌。
您可以使用這三個初始化引數來影響 Oracle 執行檢查點的頻率。
快速啟動檢查點可持續進行,只要寫入塊,檢查點時間即會前移。完成恢復前滾階段的目標(限定)時間可透過引數 FAST_START_MTTR_TARGET 來指定,Oracle 將按照該目標時間要求自動調整檢查點的寫入頻率。
建議您只使用 FAST_START_MTTR_TARGET 引數,而不要再象在先前版本中那樣組合使用 FAST_START_IO_TARGET、LOG_CHECKPOINT_INTERVAL 和 LOG_CHECKPOINT_TIMEOUT。FAST_START_MTTR_TARGET 可以最精確地控制恢復持續時間,而且不需要手動為 LOG_CHECKPOINT_INTERVAL 和 LOG_CHECKPOINT_TIMEOUT 設定值。
動態檢視 V$INSTANCE_RECOVERY 提供了當前的恢復引數設定。
V$INSTANCE_RECOVERY中的列值定義:
RECOVERY_ESTIMATED_IOS:高速緩衝中包含的髒資料的數量(在標準版中,總是NULL)
ACTUAL_REDO_BLKS:用於恢復所需要的重做日誌塊
TARGET_REDO_BLKS:恢復階段使用的重做日誌的最大塊數。是下面三個引數的最小值(LOG_FILE_SIZE_REDO_BLKS,LOG_CHKPT_TIMEOUT_REDO_BLKS,LOG_CHKPT_INTERVAL_REDO_BLKS).
LOG_FILE_SIZE_REDO_BLKS:恢復時要處理的重做塊的數量,相當於最小日誌檔案尺寸的90%
LOG_CHKPT_TIMEOUT_REDO_BLKS:為了滿足LOG_CHECKPOINT_TIMEOUT引數,恢復時要處理的日誌塊數
LOG_CHKPT_INTERVAL_REDO_BLKS:和上面的引數類似
FAST_START_IO_TARGET_REDO_BLKS:過時的引數,總是NULL
TARGET_MTTR:有效的MTTR時間,一般等於設定的FAST_START_MTTR_TARGET引數
ESTIMATED_MTTR:基於當前的髒緩衝和日誌塊估算出來的MTTR值,即使沒有設定FAST_START_MTTR_TARGET引數也會存在
CKPT_BLOCK_WRITES:由檢查點寫入操作寫入的塊數
RECOVERY_PARALLELISM 初始化引數用來指定例程或崩潰恢復操作中併發程式的數量。使用多個程式實際上相當於提供並行塊恢復。在前滾階段,不同的程式分配給不同的塊。
RECOVERY_PARALLELISM 初始化引數僅指定例程或崩潰恢復中併發恢復程式的數量。介質恢復不受此引數影響。對於介質恢復,可在 RECOVER DATABASE 語句中使用 PARALLEL 子句。
快速啟動按需回退是一種自動功能,藉助此功能,恢復操作的前滾階段一結束,就可以立即開始新的事務處理。如果使用者試圖訪問被死事務處理鎖定的行,則僅回退完成該事務處理所需的更改。回退是根據需要進行的。
使用者事務處理僅對該事務處理試圖訪問的塊啟動回退。剩餘的塊由 SMON 在後臺恢復(可能是並行的)。這樣做的優勢在於:不必等到一個較長事務的處理工作被全部回退即可完成另一個事務處理。
快速啟動並行回退使 SMON 可以充當協調程式並使用多個伺服器程式來完成回退操作。當 SMON 確定死事務處理已生成大量的還原塊時,它會自動啟動並行回退。
對於長時間執行事務處理的系統,特別是對執行並行的 INSERT、UPDATE 和 DELETE 操作的系統,該功能非常有用。
事務處理恢復中所涉及的程式數量由動態初始化引數 FAST_START_PARALLEL_ROLLBACK 設定。
FALSE:無
LOW(預設值):CPU數量*2
HIGH:CPU數量*4
使用以下查詢可以監視將並行查詢從屬用於快速啟動並行回退的情況:
SELECT * FROM v$fast_start_servers;
STATE UNDOBLOCKSDONE PID
---------- -------------- ---
RECOVERING 99 10
IDLE 0 11
IDLE 0 12
IDLE 0 13
使用以下查詢可以確認快速啟動回退的狀態:
SELECT usn, state, undoblksdone, undoblkstotal
FROM v$fast_start_transactions;
USN STATE UNDOBLOCKSDONE UNDOBLOCKSTOTAL
--- ---------- -------------- ---------------
2 RECOVERING 82 365
USN 列指定回退發生在哪個還原段,而 UNDOBLKSDONE 和 UNDOBLKSTOTAL 則分別指定已完成的工作量和總工作量。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84433/,如需轉載,請註明出處,否則將追究法律責任。

相關文章