數據庫當前scn
代碼如下 復制代碼
idle> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
271743118
idle> shutdown abort
ORACLE 例程已經關閉。
分析控制文件中scn
這裡我們可以看到加粗部分為數據庫scn
代碼如下 復制代碼
SQL>select to_number('10327a59','xxxxxxxxx') from dual;
TO_NUMBER('10327A59','XXXXXXXXX')
---------------------------------
271743577
這裡的scn值和在數據庫中查詢的值有小差別,因為查詢時間點和我完全關閉數據庫有個時間差,而這個時間差有scn變化.細紅框部分為控制文件對塊的驗證信息
修改控制文件scn和驗證信息
驗證信息修改為全部0,scn信息你可以根據你的需求去修改,這裡把數據庫的scn修改為57253932971026,按照數據庫的原理,啟動後的scn應該稍微大於該scn值.
代碼如下 復制代碼
SQL>select to_number('341278563412','xxxxxxxxxxxxxxxxx') from dual;
TO_NUMBER('341278563412','XXXXXXXXXXXXXXXXX')(www.111cn.net)
---------------------------------------------
57253932971026
啟動數據庫
idle> startup mount
ORACLE 例程已經啟動。
代碼如下 復制代碼
Total System Global Area 400846848 bytes
Fixed Size 2440024 bytes
Variable Size 289408168 bytes
Database Buffers 100663296 bytes
Redo Buffers 8335360 bytes
數據庫裝載完畢。
代碼如下 復制代碼
idle> recover database;
完成介質恢復。
idle> alter database open;
數據庫已更改。
idle> select checkpoint_change# from v$database;
CHECKPOINT_CHANGE#
------------------
57253932991028
數據庫啟動後查詢scn為57253932991028(數據庫當前scn)果然微大於57253932971026(修改控制文件scn),證明我們通過修改控制文件scn,實現數據庫scn推近完全OK.不實驗風險較大,請勿在生產環境上測試,負載後果自負
from:http://www.111cn.net/database/Oracle/60235.htm
啟動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
你這裡缺少了一個重要的東西就是日志,checkpoint會首先記錄在日志中,沒有這個數據庫怎麼知道恢復到哪裡