1. 程式人生 > >Focus on Oracle internal、tuning、recover、training!

Focus on Oracle internal、tuning、recover、training!

基礎資料結構

2.1  控制檔案

控制檔案包含了資料庫中所有其他檔案的狀態資訊。

                控制檔案包含了如下幾類資料:

A.      資料庫資訊記錄(一條)

B.      資料檔案記錄(每個資料檔案一條)

C.      執行緒記錄(每個執行緒一條。注:每個例項一個執行緒)

D.      日誌檔案記錄(每個日誌檔案一條)

E.       檔名記錄(每個資料檔案或者日誌檔案成員一條)

F.       日誌歷史記錄(每個已經完成的日誌檔案一條)

控制檔案的被後面文件引用到的欄位如下,後面是引用該欄位的章節:

2.1.1  資料庫資訊記錄(控制檔案)

                所含欄位:

A. resetlogs timestamp: 8.2

B. resetlogs scn: 8.2

C. enabled thread bitvec: 8.3

D. force archiving scn: 3.8

E.  database checkpoint thread(thread record index) : 2.13, 3.10

2.1.3  資料檔案記錄(控制檔案)

A. thread checkpoint structure: 2.12, 3.4, 8.3

B. thread-open flag: 3.9, 3.11, 8.3

C. current log (logfile record index)

D. head and tail (logfile record indices) of list of logfiles in thread: 2.8

2.1.4  日誌檔案記錄(控制檔案)

A. log sequence number: 2.7

B. thread number: 8.4

C. next and previous (logfile record indices) of list of logfiles in thread: 2.8

D. count of files in group: 2.8

E.  low SCN: 2.7

F.  next SCN: 2.7

G. head and tail (filename record indices) of list of filenames in group: 2.8

H. "being cleared" flag: 10.3

I.   "archiving not needed" flag: 10.3

2.1.5  檔名記錄(控制檔案)

A. filename

B. filetype

C. next and previous (filename record indices) of list of filenames in group: 2.8

2.1.6  日誌檔案歷史記錄(控制檔案)

A. thread number: 2.11

B. log sequence number: 2.11

C. low SCN: 2.11

D. low SCN timestamp: 2.11

E.  next SCN: 2.11

2.2  資料檔案頭

資料檔案頭部分的被後面文件引用的欄位如下,後面跟的是引用該欄位的章節:

A. datafile checkpoint structure: 2.14

B. backup checkpoint structure: 4.1

C. checkpoint counter: 2.16, 3.4, 5.3, 6.2

D. esetlogs timestamp: 8.2

E.  resetlogs SCN: 8.2

F.  creation SCN: 8.1

G. online-fuzzy bit: 3.5, 6.7.1, 8.1

H. hotbackup-fuzzy bit: 4.1, 4.4, 6.7.1, 8.1

I.   media-recovery-fuzzy bit: 6.7.1, 8.1

2.3  日誌檔案頭

日誌檔案頭部分的被後面文件引用的欄位如下,後面跟的是引用該欄位的章節:

A. thread number: 2.7

B. sequence number: 2.7

C. low SCN: 2.7

D. next SCN: 2.7

E.  end-of-thread flag: 6.10

F.  resetlogs timestamp: 8.2

G. resetlogs SCN: 8.2

2.4  改變向量(Change Vector)

改變向量表示對資料塊的一次變更。改變向量頭部記錄了發生變更的資料塊的DBA地址,該塊的版本號,序列值和操作程式碼。頭部以後的內容跟具體的變更操作有關。資料塊版本號和序列值是在建立改變向量時從資料塊的頭部複製過來的。當塊被更新後,版本號值就比原來的值大一點,而序列號則被設為1。此後資料塊每變更一次,序列值就增長1.

2.5  重做記錄

一個重做記錄是由一組改變向量組成,代表一個數據庫變更。如一個事務的重做記錄由三部分組成。首先是事務表(回滾段段首)的改變向量,其次是回滾段塊的改變向量,最後是資料塊的改變向量。一個事務可以產生多個重做記錄組成。一個重做記錄是資料庫恢復的最小單位,一個重做記錄由多個改變向量組成的機制允許多個數據塊被修改並且這些修改要麼都發生要麼就都沒發生,即使發生突然的失敗。這種原子性是由資料庫緩衝層的一個基礎Job來保證的。Oracle恢復保證重做記錄是不可分割的,即使在資料庫失敗的時候。

2.6  System Change Number (SCN)

                SCN描述了資料庫的一次事務提交版本。一次查詢也是查詢資料庫的某個SCN產生時刻時的內容。SCN會被分配和儲存在事務的重做記錄的頭部。SCN也會儲存在控制檔案和資料檔案中。SCN是由48位長的數字組成。

2.7  重做日誌

所有資料塊的變更發生時都是先構建一個重做記錄,然後把這個重做記錄儲存到重做日誌中,最後在資料塊中應用該變更。恢復的過程就是在舊的資料塊上應用重做日誌使該資料塊變成當前版本。這個過程在當前版本資料丟失的情況下是必須的。

當一個重做日誌檔案寫滿了時,就會發生日誌切換。每個日誌是由一個執行緒號(見後面),序列號(一個執行緒以內再分)和該日誌跨越的SCN範圍標識。這些資訊儲存在日誌檔案頭中。

重做日誌檔案中的重做記錄是根據SCN排序的。此外,重做記錄中包含的具體資料塊的改變向量也是按SCN遞增順序發生的,即使是跨多個執行緒(這種情況發生在多個例項環境中)。只有某些重做記錄頭部包含有SCN資訊,但是所有的記錄都是在某個SCN被分配後才發生的。日誌檔案的頭部包含了最小的SCN和下一個 SCN。最小的SCN是這個日誌檔案中第一個重做記錄對應的SCN。下一個SCN是當前日誌序列遞增後的下一個日誌檔案的的最小SCN。當前在使用的重做日誌的下一個SCN都是無限大,因為還沒有日誌檔案的序列號比當前日誌的序列要大。

2.8  重做執行緒

每個例項產生的重做日誌被稱為一個重做日誌執行緒。一個日誌執行緒由聯機重做日誌和歸檔重做日誌(前提是資料庫執行在歸檔模式下)組成。聯機重做日誌是由兩個或更多個日誌組組成,每個日誌組由一個或更多重複的日誌成員組成。通常說一個日誌組,重做日誌,聯機日誌或簡稱日誌都是指一個日誌組的成員集合(可能是一個或者多個)。一個重做日誌只包含該日誌所屬的執行緒記錄的日誌。各個執行緒在寫日誌時分配日誌檔案的序列號是彼此獨立的,各個執行緒的日誌組之間的日誌切換也是獨立進行的。

每個日誌檔案組在控制檔案中都有一筆記錄描述它的資訊,每筆記錄通過日誌號碼查詢。注意日誌號跟日誌組的號碼是一致的,而且是全域性唯一的(並行伺服器環境中)。每個重做執行緒的日誌檔案組列表記錄都在每個重做執行緒記錄的後面(類似於一種Head-Detail結構),各個日誌檔案組的記錄中都分別有一個向前和向後的欄位記錄上一個日誌檔案組和下一個日誌檔案組(通過日誌檔案組號來記錄)。日誌檔案組的成員資訊在日誌檔案組的記錄中描述。

2.9  Redo Byte Address (RBA)

RBA指定了重做日誌的位置,長度為10位元組,由三部分組成:日誌序號,塊號以及塊中的位元組序號。

2.10  檢查點結構

檢查點結構定義了資料庫重做日誌的一個點。檢查點結構資訊儲存資料檔案頭部和控制檔案中每個重做執行緒的記錄中。這些檢查點結構用於恢復時告訴資料庫從哪個重做日誌的哪一筆重做記錄開始恢復。

檢查點結構的關鍵欄位是檢查點SCN和當前啟用的執行緒標誌。

檢查點SCN能有效的定位每個啟用的執行緒的任一位置(啟用的定義見3.11)。對於每個重做執行緒,檢查點SCN就是發生一次提交時的時間點以及對應重做日誌的位置,根據重做日誌檔案頭部的重做記錄可以發現第一筆重做記錄產生時分配的SCN是檢查點SCN或更高一點.

當前啟用的執行緒標誌標記了這個檢查點SCN被分配時哪個重做執行緒處於啟用狀態。注意每個執行緒在啟用時都有一個狀態位被設定,不管它是開啟還是關閉狀態。每個啟用的執行緒都有一個重做日誌,重做日誌包含該檢查點SCN,這點證明了該重做日誌存在(聯機或者已經歸檔)。

檢查點結構還還儲存了這個檢查點SCN被分配時的時間戳,這個時間戳只是輸出一些資訊便於使用者查詢日誌。

此外,檢查點結構還儲存了檢查點SCN被分配時的執行緒的數量和執行緒中當前RBA地址。顯式的儲存執行緒的RBA地址(相對於儲存SCN作為執行緒的隱式的指標)使得在單例項環境中日誌序列和歸檔日誌名稱更容易找到。

檢查點在一段時間內可以支援高達1023個重做日誌執行緒,總計150位元組長。

2.11  日誌歷史

控制檔案在建立之初可以指定包含多少個已完成的日誌歷史記錄(在CREATE DATABASE或CREATE CONTROLFILE時指定MAXLOGHISTORY選項).日誌歷史記錄很短(在VMS裡只有24位元組).它會被迴圈改寫,因此舊的資訊就會丟失.

對每個日誌檔案,日誌歷史記錄包含了執行緒號,日誌序號,Low SCN,Low SCN時間戳,next SCN(即下一個日誌檔案的Low SCN)。日誌歷史記錄用來根據執行緒號和SCN構建歸檔日誌名稱。因為日誌序號就包含在檢查點結構中(RBA的一個欄位),單執行緒(即單例項環境)的資料庫不需要日誌歷史記錄來得到歸檔日誌名稱。

日誌歷史記錄的欄位可以通過檢視V$LOG_HISTORY來查詢。此外 V$RECOVERY_LOG記錄了介質恢復需要的歸檔日誌,它的資訊就來自於日誌歷史記錄。雖然對單例項環境來說日誌歷史記錄對管理沒什麼大的幫助,不過為了使用檢視V$LOG_HISTORY和V$RECOVERY_LOG,建議配置這個功能。

2.12  執行緒檢查點

每個啟用的執行緒在控制檔案中的記錄中都包含了一個檢查點結構,我們稱之為執行緒檢查點。這個檢查點中的SCN欄位就是執行緒檢查點SCN,還有執行緒序號和RBA欄位指明瞭這個執行緒檢查點跟哪個執行緒相關。

執行緒檢查點結構在例項每次對其執行緒發出檢查點操作時被更新(見3.4)。檢查點發生時,跟該例項相關的執行緒會把重做日誌裡記錄的小於該執行緒檢查點SCN的重做記錄保護的髒資料寫入到聯機資料檔案中。

執行緒檢查點事件保證了該執行緒的重做日誌中所有小於該執行緒檢查點SCN的重做記錄對應的髒資料都被寫入到磁碟(注意到如果該執行緒關閉了,重做日誌裡就沒有SCN比執行緒檢查點SCN還小的記錄。)

例項恢復的時候要保證對應執行緒的所有重做日誌都應用到資料檔案中。因為執行緒檢查點SCN以前的重做日誌已經被應用了,所以例項恢復可以保證,在啟動重做日誌程序時只要從執行緒檢查點SCN開始應用,直至重做日誌檔案的尾部,所有執行緒的重做日誌都被應用。

2.13  資料庫檢查點結構

資料庫檢查點結構就是所有開啟的執行緒中執行緒檢查點SCN最小的那個執行緒檢查點。資料庫檢查點執行緒的序號——當前執行緒檢查點是資料庫檢查點的那個執行緒的序號——被記錄在控制檔案的資料庫資訊部分。

因為每個例項都保證對應執行緒檢查點SCN以前的重做日誌保護的髒資料已經寫到資料檔案中,並且資料庫檢查點SCN是所有執行緒中執行緒檢查點SCN最小的,所以可以說所有例項中在資料庫檢查點SCN以前的重做日誌記錄所保護的髒資料都被寫到資料檔案中。換句話說是資料庫所有聯機資料檔案都在資料庫檢查點時發生了檢查點操作。這就是一個例項檢查點了對應執行緒時用資料庫檢查點更新了所有聯機資料檔案檢查點(見下面)的基本原理(見3.4)。

2.14  資料檔案檢查點結構

資料檔案檢查點結構指的是每個資料檔案的頭部包含的檢查點結構,其中的SCN欄位就是資料檔案檢查點SCN。

由前面而知,針對每個資料檔案,在其檢查點SCN以前的所有執行緒的重做日誌保護的髒資料都已經被寫入到資料檔案。每個聯機的資料檔案會把它的檢查點SCN記錄在控制檔案中,但這個值可能跟資料檔案頭部的檢查點SCN不一致。Oracle恢復層設計成能接受這種不一致。當例項失敗發生在更新資料檔案頭部的檢查點之後提交控制檔案“事務”之前時,二者沒有及時同步造成不一致。(注:控制檔案“事務”是資料庫內部機制,獨立於Oracle事務層,指的是保證對控制檔案任意大的更新都能夠自動被“提交”)。

資料檔案檢查點執行時(見3.6),資料檔案頭部的檢查點結構會被更新,並且保證所有執行緒產生的重做日誌記錄在該檢查點SCN以前對應的髒資料都已經被寫入到磁碟上了。

執行緒檢查點事件(見3.4)保證了所有執行緒產生的所有SCN在檢查點SCN以前的重做日誌記錄對應的髒資料都被寫入到磁碟了。執行緒檢查點事件可能會推進資料庫檢查點(如在單例項環境中;或該執行緒的檢查點最舊了)如果資料庫檢查點推進了,新的檢查點將更新所有聯機資料檔案的檢查點結構(熱備份中的資料檔案除外,見第4節)。

介質恢復時要保證對即將恢復的資料檔案把任一個執行緒產生的重做日誌記錄都要應用上去。由前面知對即將恢復的資料檔案來說,每個執行緒產生的重做日誌在該資料檔案檢查點SCN以前的重做日誌都已經得到應用,介質恢復在重新應用日誌時只需要從資料檔案檢查點SCN開始支援恢復結束點。注:使用者指定結束的SCN或時間點等(不完全回覆),又或者是所有執行緒的結束點(完全恢復)。

因為資料檔案檢查點儲存在資料檔案的頭部中,所以在資料檔案的備份中同樣也存在。如果是熱備份產生的備份,熱備份保證了當資料檔案處於熱備份狀態時,即使在複製要備份的資料檔案過程中資料庫要更新該資料檔案上的髒資料,資料檔案中所有資料庫的版本跟資料檔案頭部的檢查點結構的版本是一致的,都是在熱備份開始那一刻時的版本。

2.15  結束SCN

每個資料檔案在控制檔案的記錄中都有一個欄位叫結束SCN。如果該資料檔案是離線狀態或只讀的,該結束SCN的值表示對該資料檔案不會有再比這個結束SCN 更大的重做記錄。如果該資料檔案是聯機的並且有一個例項打開了資料庫,結束SCN就會被設定為無限大(注:值為0xffff.ffffffff)。結束 SCN用於介質恢復時告訴重做程式在該資料檔案上應用重做日誌時到了這個SCN時就停止。這保證了在資料庫開啟的狀態下恢復一個離線的資料檔案時介質恢復能停下來。

不管資料檔案離線或者只讀,結束SCN都會被設定為具體的SCN。不管離線操作時“立即”(因為I/O錯誤導致或者因為資料檔案所在表空間被立即離線)還是“臨時的“或“正常的”(資料檔案所在表空間正常離線)。不過在資料檔案被立即離線時,不會發生資料檔案檢查點(見3.6),並且對應的髒資料都丟失了。因此在將該離線檔案變成聯機時介質恢復需要重新應用重做日誌直至結束SCN。介質恢復不需要應用結束SCN以後的重做日誌,因為就不存在這樣的重做日誌。如果結束SCN等於資料檔案檢查點SCN,那麼該資料檔案就不需要恢復。

2.16  檢查點計數

在資料檔案頭部和資料檔案在控制檔案的記錄部分都有一個檢查點技術。檢查點計數是用來判斷資料檔案或者控制檔案是否是過時的(從一個備份中恢復出來的)。

每次發生執行緒檢查點事件時,檢查點計數都會遞增。從而即使資料檔案的檢查點沒有被推進時檢查點計數也會增加。執行緒檢查點事件時資料檔案檢查點沒有被推進的原因可能是資料檔案處於熱備份狀態,或者它的SCN比要更新的檢查點SCN值還要新(如資料檔案時新增的或者剛經歷了一次資料檔案檢查點事件)。

2.17  表空間乾淨結束SCN

資料字典TS$有兩列表示 表空間乾淨結束SCN(注:9i中是SCNWRP和SCNBAS組合表示)。它表示表空間是在這個SCN時被離線或者設定為只讀。如在對資料檔案發出檢查點操作後(見3.6),資料檔案檢查點SCN被記錄到TS$中作為表空間乾淨結束SCN。這樣的表空間在資料庫以重置日誌方式開啟後不需要被刪除(見 8.6)。在介質恢復時,以重置日誌方式開啟日之前,這種表空間會處於離線狀態。重置日誌後,表空間也不需要恢復,允許被直接設定為聯機狀態或讀寫狀態。重置日誌後建議立即備份表空間。

當把一個離線且乾淨的表空間置為聯機或者可讀寫時,表空間乾淨結束SCN會被設定為0(中間可能短暫性被設定為無窮大)。立即或臨時性的將表空間置為離線狀態,tablespace-clen-stop SCN也會是0.

一個在TS$中表空間乾淨結束SCN為非零的表空間被認為在那個SCN時是乾淨的,指的是該表空間包含了直至那個SCN的所有的重做記錄保護的資料,沒有大於那個SCN的重做日誌記錄存在。如果該表空間的所有資料檔案都是離線時刻的狀態或者只讀的,那在將表空間置為聯機狀態時是不需要恢復的。注意到表空間乾淨結束SCN同資料檔案在控制檔案中的記錄的結束SCN是有區別的。結束SCN只是表明該資料檔案沒有超過結束SCN的重做日誌記錄,但並沒有暗示該資料檔案已經包含了結束SCN以前的所有重做日誌記錄所保護的髒資料。

表空間乾淨結束SCN存放在TS$中而不是控制檔案中,所以可以得到重做日誌的保護並且處於正確的狀態。如在一個不完全恢復後(見6.12),該表空間的狀態依然正確。它的值也不會隨著使用了備份的控制檔案。更重要的是這種 SCN的存在使得該表空間在以重置日誌方式開啟資料庫後依然可以存在。因此不完全恢復期間的離線了的表空間可以在以重置日誌方式開啟資料庫後直接置為聯機狀態或設定為可讀寫。如果沒有表空間乾淨結束SCN,就沒有辦法知道該表空間不需要被重置日誌拋棄的重做日誌記錄。那時唯一可選的辦法就是將該表空間離線。

2.18  資料檔案離線範圍

資料檔案在控制檔案中記錄了離線時的SCN和離線結束時的檢查點。二者界定了該資料檔案不需要重做日誌的範圍。因此介質恢復的時候可以直接跳過該範圍的重做日誌。這個特性幫助恢復了一個已經離線了或者設為只讀了很長一段時間的資料檔案變成聯機或可讀寫。

當一個數據檔案從離線狀態變為聯機狀態時(或從只讀變成可讀寫時),離線範圍設定規則如下:離線起始SCN取的是該表空間的表空間乾淨結束SCN,離線結束檢查點取的是資料檔案設定為聯機(或可讀寫)時的資料檔案檢查點。

**********本部落格所有內容均為原創,如有轉載請註明作者和出處!!!**********
Name:    guoyJoe

QQ:        252803295

Email:    [email protected]

OCM:    http://education.oracle.com/education/otn/YGuo.HTM
_____________________________________________________________
加群驗證問題:哪些SGA結構是必需的,哪些是可選的?否則拒絕申請!!!

[email protected]  總群:127149411

[email protected] No.1群:177089463(已滿)

[email protected] No.2群:121341761

[email protected] No.3群:140856036