執行個體恢複與Oracle的SCN,執行個體oraclescn
簡單理解oracle的SCN就是自己的時間功能,好比linux系統自己的時間一樣,oracle它也有自己的一套時間。
在你乾淨的關閉資料庫時shutdown immediate或者使用alter system checkpoint都會把SCN的值寫入4個位置,其中有3個位於controlfile內,還有1個位於datafile header內
controlfile裡面的三個SCN分別是:1、system checkpoint SCN 2、datafile checkpoint SCN 3、stop SCN
---system checkpoint SCN 查詢
SQL>select checkpoint_change# from v$database;
---datafile checkpoint SCN查詢
SQL>select name,checkpoint_change# from v$datafile where name like '%user%';
---stop SCN查詢
SQL>select name,last_change# from from v$datafile where name like '%user%';
其中這個stop SCN在資料庫正常使用的時候是NUll值
datafile header裡面的SCN是:start SCN
---start SCN 查詢
SQL>select name,checkpoint_change# from v$datafile_header were namelike '%user%';
1、 Clean shutdown 時
當clean shutdown 時,checkpoint會進行,並且此時datafile的stop scn和控制檔案裡的start scn會相同。 等到open資料庫時,Oracle檢查datafile header中的start scn和存於control file中的datafile的scn是否相同, 如果相同,接著檢查datafile header的start scn和存於control file中的stop scn是否相同,如果仍然相同,資料庫就會正常開啟,否則就需要recovery。
等到資料庫開啟後,儲存在control file中的stop scn就會恢複為NULL值,此時表示datafile是open在正常模式下了。
2、 非正常shutdown
如果不正常SHUTDOWN (shutdown abort),則mount資料庫後,會發現stop scn並不是等於其它位置的scn, 而是等於NULL,這表示Oracle在shutdown時沒有進行checkpoint,下次開機必須進行instance crash recovery(執行個體恢複)。
注意一點:
(1)啟動資料庫時,如果發現STOP SCN = NULL,表示需要進行instancecrash recovery;
(2)啟動資料庫時,如果發現有datafile header的START SCN 不等於儲存於CONTROLFILE的DATAFILE SCN,表示需要進行Media recovery
oracle終止SCN可以
oracle正常運行時資料檔案終止SCN為NULL或者無窮大
如果資料庫正常關閉狀態下“各個”資料檔案終止SCN (存在控制檔案)與“相對應數”據檔案頭SCN(存在資料檔案頭) 一致則不需要恢複
oracle資料檔案為何要有SCN
啟動scn
Oracle把這個檢查點的scn儲存在每個資料檔案的檔案頭中,這個值稱為啟動scn,因為它用於在資料庫執行個體啟動時,
檢查是否需要執行資料庫恢複。
select name,checkpoint_change# from v$datafile_header
終止scn
每個資料檔案的終止scn都儲存在控制檔案中。
select name,last_change# from v$datafile
這個SCN號用於檢查資料庫啟動過程是否需要做instance recovery。資料庫檔案狀態改變的情況 才更改
在資料庫正常啟動並執行情況下,對可讀寫的,online的資料檔案,該SCN號為NULL