oracle 學習總結篇三:SCN的理解

paulyibinyi發表於2008-03-17

scn(system change number)  系統改變號,這個號碼一直是增加不會減少的數字,

可以透過以下sql 查出當前scn 是多少

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
                  210923

1.一。SCN與CHECKPOINT
CKPT程式在checkpoint發生時,將當時的SCN號寫入資料檔案頭和控制檔案,同時通知DBWR程式將資料塊寫到
資料檔案。
CKPT程式也會在控制檔案中記錄RBA(redo block address),以標誌Recovery需要從日誌中哪個地方開始。

與checkpoint相關的SCN號有四個,其中三個存在控制檔案中,一個存放在資料檔案頭中。
這四個分別是:
1.System Checkpoint SCN
當checkpoint完成後,ORACLE將System Checkpoint SCN號存放在控制檔案中。
我們可以透過下面SQL語句查詢:
SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
            209006

2.Datafile Checkpoint SCN
當checkpoint完成後,ORACLE將Datafile Checkpoint SCN號存放在控制檔案中。
我們可以透過下面SQL語句查詢所有資料檔案的Datafile Checkpoinnt SCN號。
select name,checkpoint_change# from v$datafile;

SQL> select name,checkpoint_change# from v$datafile;

NAME
-----------------------------------------------------------------

CHECKPOINT_CHANGE#
------------------
D:\ORACLE\ORADATA\PUBTEST\SYSTEM01.DBF
            209006

D:\ORACLE\ORADATA\PUBTEST\UNDOTBS01.DBF
            209006

D:\ORACLE\ORADATA\PUBTEST\INDX01.DBF
            209006


NAME
-----------------------------------------------------------------

CHECKPOINT_CHANGE#
------------------
D:\ORACLE\ORADATA\PUBTEST\TOOLS01.DBF
            209006

D:\ORACLE\ORADATA\PUBTEST\USERS01.DBF
            209006

3.Start SCN號
ORACLE將Start SCN號存放在資料檔案頭中。
這個SCN用於檢查資料庫啟動過程是否需要做media recovery.
我們可以透過以下SQL語句查詢:
SQL> select name,checkpoint_change# from v$datafile_header;

NAME
----------------------------------------------------------------

CHECKPOINT_CHANGE#
------------------
D:\ORACLE\ORADATA\PUBTEST\SYSTEM01.DBF
            209006

D:\ORACLE\ORADATA\PUBTEST\UNDOTBS01.DBF
            209006

D:\ORACLE\ORADATA\PUBTEST\INDX01.DBF
            209006


NAME
----------------------------------------------------------------

CHECKPOINT_CHANGE#
------------------
D:\ORACLE\ORADATA\PUBTEST\TOOLS01.DBF
            209006

D:\ORACLE\ORADATA\PUBTEST\USERS01.DBF
            209006

4.End SCN號
ORACLE將End SCN號存放在控制檔案中。
這個SCN號用於檢查資料庫啟動過程是否需要做instance recovery.
我們可以透過以下SQL語句查詢:
select name,last_change# from v$datafile;

SQL> select name,last_change# from v$datafile;

NAME
-------------------------------------------------------------

LAST_CHANGE#
------------
D:\ORACLE\ORADATA\PUBTEST\SYSTEM01.DBF


D:\ORACLE\ORADATA\PUBTEST\UNDOTBS01.DBF


D:\ORACLE\ORADATA\PUBTEST\INDX01.DBF

 

NAME
-------------------------------------------------------------

LAST_CHANGE#
------------
D:\ORACLE\ORADATA\PUBTEST\TOOLS01.DBF


D:\ORACLE\ORADATA\PUBTEST\USERS01.DBF

 

SQL>

在資料庫正常執行的情況下,對可讀寫的,online的資料檔案,該SCN號為NULL.

可以看到System Checkpoint SCN,Datafile Checkpoint SCN,Start SCN號
這三者值是一致的,這是因為checkpoint發生時同時要寫這三個值保持一致

後續還有因為時間關係,下次再補充

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-207596/,如需轉載,請註明出處,否則將追究法律責任。

相關文章