1. 程式人生 > >第八章 Oracle恢復內部原理(重置日誌RESETLOGS)

第八章 Oracle恢復內部原理(重置日誌RESETLOGS)

重置日誌選項用於下列情形後的第一次開啟資料庫的時候:

  1. 不完全恢復
  2. 基於備份控制檔案的恢復
  3. CREATE CONTROLFILE...RESETLOGS

重置日誌的最主要的作用就是丟棄不完全恢復中沒有使用的重做日誌並保證後續的恢復不再需要。為此,重置日誌選項將所有聯機日誌和歸檔日誌都做廢掉。副作用就是此前的所有備份對將來的恢復都沒有用了。

重做日誌選項還初始化了控制檔案中關於聯機日誌和重做執行緒的內容,清除了當前存在的聯機重做日誌的內容,如果聯機日誌檔案不存在就建立,並重置了所有執行緒的日誌序號。

8.1 模糊的檔案

以重做日誌選項方式開啟資料庫時最重要的事情就是檢驗所有的資料檔案都被恢復到同一個時間點。這保證了單筆重做日誌的所有變更都自動應用了。這點對其他的一致性原因也很重要。如果所有執行緒重做日誌都應用到所有聯機資料檔案上,當然可以說資料庫是一致的。

如果進行了不完全恢復,有可能某個檔案不是從足夠舊的備份中恢復過來。通常這點可以通過檢測該資料檔案的頭部的檢查點跟其他資料檔案不一致而發現(離線檔案和只讀檔案是例外)。

另外一種可能性就是這個檔案是“模糊的”。它可能包含了超出它檢查點SCN的變更。由前面章節知資料檔案頭部維護了下面這些“模糊狀態位”來判斷資料檔案是否是“模糊的”:

  1. 聯機模糊位(見3.5,6.7.2)
  2. 熱備份模糊位(見4,6.7.3)
  3. 介質恢復模糊位(見6.7.1)

不完全恢復後以重置日誌方式開啟資料庫時如果聯機資料檔案的模糊被設定了則會開啟失敗。

熱備份或崩潰恢復結束時會寫一筆重做日誌記錄使得介質恢復可以決定何時可以清除這些模糊位。重做日誌會報錯如果這些模糊位還沒有被清除。

當資料檔案中有一個數據檔案結束恢復時的檢查點SCN跟其他資料檔案的檢查點SCN(重置日誌SCN,見8.2)不一致時,重置日誌會報錯,除非是下面這幾種情形:

1. 一個數據檔案恢復到一個比重置SCN要早點的SCN是可以接受的,前提是該資料檔案在二者之間已經沒有重做日誌可以應用。舉例說明,該資料檔案是隻讀的或者離線的,且離線範圍覆蓋了結束恢復時的SCN和重置SCN。這種情形下重做日誌允許該資料檔案設定為離線。

2. 一個數據檔案做檢查點的SCN比重做SCN要晚,前提是它的建立SCN(在建立資料檔案的時候分配的,儲存在檔案頭中)顯示它是在重置SCN以後建立的。重做日誌時檢查資料字典和控制檔案會發現該資料檔案在資料字典中不存在但控制檔案中存在。結果,它會從控制檔案中被清除。

8.2 重置SCN和計數器

控制檔案的資料庫資訊部分記錄了一個重置日誌的SCN和時間點(合稱重置日誌資料)。重置日誌資料是為了唯一標識每次重做日誌開啟資料庫的操作,同時也儲存在每個資料檔案頭和日誌檔案頭。日誌檔案中的重置日誌資料如果跟控制檔案中記錄的不一致就不能應用該日誌檔案中的重做日誌。資料檔案中的重做日誌資料如果跟控制檔案中記錄的不一致則該資料檔案就不能被訪問或者恢復,除非某些特殊情形(如該資料檔案所在表空間正常離線或者是隻讀的)。這保證了被重置日誌丟棄的重做日誌不會再被應用到資料庫中,也聲明瞭此前的任何備份對將來的恢復都是無用的。因此重做日誌後立即做一個備份時聰明之舉。

8.3 重置日誌對執行緒的影響

重置日誌時,每個執行緒的控制檔案記錄都清除執行緒開啟標記並將執行緒檢查點SCN設定到重置SCN。因此看起來執行緒好像在重置SCN處關閉了。控制檔案中資料庫資訊部分記錄的啟用的執行緒列表依舊可以使用。此時哪個執行緒在恢復結束被啟用已經不重要了,因為此前的重做日誌已經不需要了。所有執行緒的日誌序號都被置為 1,其中一個執行緒的檢查點被選為資料庫檢查點。

8.4 重置日誌對日誌檔案的影響

所有聯機日誌都被清零,意味著所有的重做日誌都被永久丟棄,除非在重做日誌之前有備份聯機日誌,否則沒有任何辦法可以恢復這些聯機日誌。因此要恢復錯誤的清除聯機日誌的唯一方案就是聯機日誌有備份。要恢復一個錯誤的重做日誌操作,必須先還原所有的資料檔案、控制檔案和聯機日誌檔案,然後全部恢復。

每個啟用的執行緒會挑選一個日誌檔案作為當前日誌。那個日誌頭部將寫為日誌序號1.注意日誌檔案和相關的執行緒是從控制檔案中取出來的(用控制檔案中記錄的執行緒號和它的日誌集合)。如果這個控制檔案是備份的控制檔案,可能跟資料庫最後一次開啟的時候有點區別。

8.5 重置日誌對聯機資料檔案的影響

所有聯機資料檔案頭的檢查點都更新為新的資料庫檢查點。新的重置資料會更新到各個聯機資料檔案頭部。

8.6 重置日誌對離線資料檔案的影響

離線資料檔案在控制檔案中的記錄顯示需要做介質恢復。不過這是不可能的,因為它需要應用的重做日誌的日誌檔案的重置資料已經不對了。這意味著包含這個資料檔案的表空間必須被刪除掉。有一個重要的例外就是該表空間是正常離線的或者只讀的,表空間的資料檔案頭中的檢查點SCN都儲存在TS$中,即表空間乾淨結束 SCN(見2.17)。只要資料檔案不是“模糊的”且是在表空間乾淨結束SCN處做的檢查點,在將資料檔案聯機時是不需要重做日誌的。此時離線檔案頭部的重置資料被忽略。因此在重做日誌之前正常離線的表空間是不受它離線期間的重做日誌操作影響的。

8.7 重置日誌開啟資料庫時對資料字典和控制檔案的檢查

重做日誌開啟資料庫後,資料字典FILE$中記錄的資料檔案會跟控制檔案中記錄的資料檔案進行對比。這個操作在用CREATE CONTROLFILE命令後的第一次開啟資料庫也會進行的。不完全恢復結束的時侯資料庫中的資料檔案可能跟用來恢復的控制檔案中記錄資料檔案不一致。使用備份的控制檔案或者建立一個控制檔案都有同樣的問題。檢查資料字典沒有什麼危害,因此每次資料庫開啟的時候都會做。不過正常情形下也要花時間去做沒有什麼道理。

FILE$中資料檔案的入口會跟控制檔案中每個資料檔案號進行比較。因為FILE$反映的是資料庫中的空間分配資訊,它是正確的,控制檔案中可能不對。如果FILE$中不存在的而控制檔案中存在的資料檔案將會從控制檔案中清除掉。

如果一個數據檔案在FILE$中存在而在控制檔案中不存在,則會在控制檔案中建立一個記錄佔位,記錄在名字MISSINGnnnn下(MISSINGnnnn中nnnn是十進位制形式的檔案號)。MISSINGnnnn在控制檔案中用來表示被離線的檔案和需要介質恢復的檔案。實際檔案可以通過將MISSINGnnnn重新命名為實際檔名的途徑來訪問。

在重置開啟的時候,重新命名MISSINGnnnn能夠訪問實際資料檔案的前提是該資料檔案是隻讀的或者正常離線的。換句話說如果重新命名MISSINGnnnn為一個不是正常離線或只讀的資料檔案,並不能使得該資料檔案可以訪問,因為它還需要重置開啟資料庫前的重做日誌來進行介質恢復。如果是這樣,這個表空間就得被刪除了。

如果是因為執行了CREATE CONTROLFILE...NORESETLOGS後開啟資料庫時進行資料字典檢查而不是因為重置開啟資料庫的話,需要介質恢復將該資料檔案更新到最新狀態。

另外一個步驟就是重複上面操作使控制檔案中的資料檔案記錄跟資料字典中的一致。對不完全恢復而言,這個就要求還原所有的備份再重新恢復了。

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

QQ: 252803295

Email: [email protected]

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

DSI&Core Search():127149411


相關推薦

 Oracle恢復內部原理(日誌RESETLOGS)

重置日誌選項用於下列情形後的第一次開啟資料庫的時候: 不完全恢復 基於備份控制檔案的恢復 CREATE CONTROLFILE...RESETLOGS 重置日誌的最主要的作用就是丟棄不完全恢復中沒有使用的重做日誌並保證後續的恢復不再需要。為此,重置日誌選項將所有聯機日誌

Oracle恢復內部原理(介質恢復

介質恢復用在丟失或損壞資料檔案或者丟失了控制檔案的情形。介質恢復將還原的資料檔案恢復成當前資料檔案。還能夠恢復資料檔案異常離線時沒有來得及做檢查點操作丟失的變更。介質恢復使用歸檔日誌和聯機日誌。跟例項恢復不同的是,介質恢復必須由命令顯式呼叫。 6.1 什麼時候做介質恢復

內部字段分隔符IFS、腳本調試DEBUG

shel內部字段分隔符IFS腳本調試 shell腳本調試DEBUG 第八章 內部字段分隔符IFS、腳本調試DEBUG 內部字段分隔符 內部字段分隔符(internal field separator,IFS)是shell腳本中的一個特殊變量,在處理文本數據時很有用。把單個數據流劃分成不同的數據元素的定

【軟件構造】第一節 軟件構造性能的度量原理

內存 指標 VM 優化 度量 垃圾回收 lin 時空 ava 第八章第一節 軟件構造性能的度量原理 本章是課程覆蓋的第5個質量指標:時空性能 這是大家最熟悉的指標,雖然很重要,但並非軟件構造中最重要的指標,當其他指標得以優化之後,再去考慮性能問題。 Outline 性能度

微控制器原理

SPI序列外設介面由時鐘線SCK,資料線MOSI和MISO,片選端CS組成。主要特點:全雙工,3線同步傳輸;主機或從機工作;提供頻率可程式設計時鐘;傳送結束中斷標誌;寫衝突保護;匯流排競爭保護。 I2C匯流排由一根資料線SDA和一根時鐘線SCL組成。在I2C總線上,SDA用

Java基礎知識二次學習--

cti 註意 spa 基礎 2個 cnblogs images 方向 視頻 第八章 流 時間:2017年4月28日11:03:07~2017年4月28日11:41:54 章節:08章_01節 視頻長度:21:15 內容:IO初步 心得: 所有的流在java.io包裏面

【MySQL比知必會】 用通配符進行過濾

通配符 操作符 範圍 name 使用 技巧 商品 -- rom 1、LIKE操作符   之前使用的操作符都是針對已知的數據,而使用通配符可以對未知數據也進行搜索。   通配符(wildcard):用來匹配值得一部分的特殊字符。   搜索模式(search pattern):

c primer plus(五版)編程練習-編程練習

main tdi blog plus prim span int 統計 rime 1.設計一個程序,統計從輸入到文件結尾為止的字符數。 #include<stdio.h> int main(void){ int ch; int i; i

需求分析小結

不同 寬帶 獲取 strong 金錢 有效 聊天 引入 信息 需求分析方法: 1.獲取和引導需求 軟件團隊需要找到 軟件的利益相關者,了解和挖掘他們對軟件的需求,引導他們表達出對軟件的需求。 不同的項目需要不同的手段,這一步驟也被叫做“需求捕捉”,形容真正的需求稍縱即逝,

構建之法 需求分析

lock 焦點 ron 寫到 模型 優先 產品 輔助 討論 其實這是“啃硬骨頭”的第一步,就是如何從“茫茫”中鎖定需求相關方、挖出來需求的方法論 1.挖取需求 獲取和引導需求。需求不僅是來自外界,甚至也可以來自技術成員團隊內部; 分析和定義需求。主要是對需求進行量化; 驗

《Linux Device Drivers》 分配內存——note

用戶 代碼 troy 避免 又一 span 使用 star 下使用 本章主要介紹Linux內核的內存管理。 kmalloc函數的內幕 不正確所獲取的內存空間清零分配的區域在物理內存中也是連續的flags參數 <linux/slab.h><linu

需求分析跟項目經理學習總結------(七)

總結 重新 需求 需求分析 需求量 團隊項目 div 改進 缺點 本周我看了第八章需求分析跟第九章項目經理,以下是我的學習總結。 一 .如何了解用戶的軟件需求 1.獲取和引導需求。軟件團隊需要找到軟件的利益相關者,了解和挖掘他們對軟件的需求,引導他們表達出軟件的需求。軟件團

ofb 設置 比較 位置 插入 數組名 數字 tro 個數 一、 什麽是數組及其作用? 定義:具有相同數據類型的一個集合 作用:存儲連續的具有相同類型的數據 二、 java中如何聲明和定義數組 l 聲明和定義的語法: 數據類型[

java:

插入 bound tex print class 循環 tail pre 數據 第八章 數組 1.數組的聲明定義 數據類型[]變量名 = new 數據類型[長度]; 列:int[]ary = new int[5];

、線程池的使用

else 增加 void actor package class 全局 link catch 線程工廠的使用:   在創建線程時,應該要初始化它的線程名稱,以便以後更好的查找錯誤,下面的示例展示了線程工廠的使用,創建線程是並發的,因此count使用原子類。 impor

我的學習之路__map集合

val arc 特點 nbsp 方法名 shuf 數據結構 鏈表結構 靜態 【Map集合】 Map集合中常用方法: 1: 返回值:value值 put(K key, V value) 往Map集合中添加元素,如果key值重復,那麽將返回被覆蓋的value值.

Python核心編程--條件和循環

ext ads uid ldh eal ann jca cer 條件 html5%20%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%AA%8C%E8%AF%81%E4%B8%8A%E4%

【HTTP權威指南】1  HTTP 概述

1.4 狀態 1.8 網關 資源 ip 地址 gen 歷史 客戶端 1.1 HTTP——因特網的多媒體信使 ...................................................................................

類對象的特性

註意 span tro 封裝 謝謝 cte 不同 定義 his 第八章 類對象的特性 面向對象程序設計有4個主要特點:抽象、封裝、繼承和多態。 任何對象都應當具有兩個要素,即屬性和行為。對象是由一組屬性和一組行為構成的。 1.類的聲明和對象的定義 *類是對象的抽象,對象是類

網絡的時代—網絡開發(4)

fonts 數據共享 基本 ref 讀寫 integer 面向服務 簡單 time 8.5輕量級的數據交換格式—JSON8.5.1 client與server端的數據交互在Android應用開發中,尤其是網絡應用的開發,我們常常須要從網絡上獲取數據,而不只從本地數據庫或