關於resetlogs和incanation的理解

2021-06-04 23:33:46 字數 1301 閱讀 7529

**:

執行了不完全恢復操作,或者使用了備份的控制檔案進行恢復,或者執行flashback database操作之後,在開啟資料庫時必須指定resetlogs選項,這是由oracle自身特性決定的。

正常執行中oracle內部有乙個生命週期,這種生命週期在oracle中也有乙個專業詞彙,叫incarnation。不完全恢復,顧名思義就是只恢復部分資料,由於已經無法將資料庫恢復到當前狀態(崩潰前的狀態),oracle資料庫也不知道當前處於什麼狀態了,事務上也許一致,但是不是最新,oracle自己無從判斷,後續也許仍有重做日誌檔案,但卻無法應用(或dba不允許應用)。如果沒有incarnation的概念,正常open資料庫的話又會產生重做日誌檔案,並且這些日誌檔案的序號與之前相同(但內容可能不同),這樣不管是備份還是恢復都會造成混淆,因此必須在執行不完全恢復後,標示之前生命週期結束,方法就是以resetlogs方式開啟資料庫。以resetlogs方式開啟後,oracle資料庫又開始了乙個新的生命週期,即重置incarnation,日誌檔案序號也被重新初始化到1。

圖7-4顯示了一次open resetlogs的操作。如果我們畫乙個時間軸的話,不完全恢復就是將資料庫恢復到從備份時間到當前時間之間的某乙個點。

資料庫在日誌檔案序號為1000時建立了備份,在日誌檔案序號為4000時崩潰,由於日誌檔案序號為2501,因此你只能將資料庫恢復到日誌檔案序號為2500時的狀態,然後以resetlogs方式開啟,oracle資料庫又開始了乙個新的incarnation,日誌檔案序號被重新初始化到1,然後隨著資料庫的執行不斷增加並達到4000,但這些日誌檔案與之前的日誌檔案並不關聯(雖然檔案序號相同)。

指定resetlogs會執行下列操作:

log_archive_format

初始化引數必須包含

%s, 

%t和 

%r,以確保生成的歸檔重做日誌名稱唯一,

10g能做穿越incarnation的恢復,所以要加%r,代表的是resetlog  id)

,相當於open resetlogs只是乙個命令操作,就像其他sql命令一樣,這樣保證了歸檔日誌檔案的連續性,之前的備份依然有效,不過三思仍然建議執行open resetlogs操作之後馬上進行一次全庫備份。 提示

什麼是incarnation?

oracle資料庫的incarnation在有些資料中譯作對應物,在我看來可以將其理解成生命週期。oracle資料庫從建立到遇到resetlogs操作為乙個生命週期,這個生命週期內資料庫的邏輯屬性,如scn、日誌檔案序列號等具有相同的特徵。當通過open resetlogs方式開啟資料庫後,原生命週期即宣告結束,原生命週期中生成的重做日誌檔案也被廢棄,日誌檔案序號自動重置為1

關於inc檔案

what s inc file inc 檔案顧名思義是include file的意思。實際上,檔案的字尾對於檔案包含是無所謂 你可以包含乙個asp檔案,也可以包含txt文。一般我們使用inc作為字尾,是因為這樣能體 現該檔案的作用。why inc file inc檔案的作用有點類似於c c 內的.h...

修改器 inc 增加和減少

修改器 inc 用來增加已有鍵的值,或者 鍵不存在時 建立鍵。它 用來 專門 增加 或減少 數字的。inc 只能用於 整數 長整數 或 雙精度浮點數 修改其他型別 會失敗報錯,即使其他多種語言中能自動轉換的型別 如 null 布林 或 數字構成字串 都是不行的。報錯字串 如下 modifier in...

in c 讀後感 理解繼承和組合

1 繼承類預設繼承了基類的成員函式,即,在不重定義的前提下,y.f 和y.x f 呼叫的同乙個函式 而組合類則必須通過成員類物件進行函式呼叫,乙個類的構造函式呼叫順序是先基類,再組合類,最後會進行本類的建構函式。2 如果重定義了基類的函式,則基類的同名函式全部自動隱藏。所謂 全部 是因為,可能在基類...