oracle資料庫SCN

Eko_db發表於2013-12-16

四種SCN

Oracle資料庫中有四SCN分別為系統檢查點SCN、資料檔案SCN、資料檔案頭SCN、結束SCN。資料檔案頭SCN存數在資料檔案頭中,而其他SCN儲存在控制檔案中。

系統檢查點SCN可通過如下語句:

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#

------------------

            632913

 資料檔案SCN檢視:

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

        FILE# CHECKPOINT_CHANGE#

---------- ------------------

         1             632913

         2             632913

         3             632913

         4             632913

 

結束SCN檢視:

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

     FILE# LAST_CHANGE#

---------- ------------

         1

         2

         3

         4

 

資料檔案頭SCN檢視:

SQL> select file#,checkpoint_change# from v$datafile_header; 

     FILE# CHECKPOINT_CHANGE#

---------- ------------------

         1             632913

         2             632913

         3             632913

         4             632913

 

實時的資料庫SCN檢視:

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

                  635909

 

上面檢視了五種SCN資訊,其中最後一項的SCN是資料庫閃回時經常用到的,它其實是資料庫的系統檢查點SCN的實時值,當使用select checkpoint_change# from v$database;語句查詢時查出的是上次檢查點事件發生時重新整理的SCN。

查詢系統檢查點SCN,兩者相差是比較大的。

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#

------------------

            632913

 

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

                  636826

執行檢查點事件後,兩個值幾乎相等。所以閃回資料庫會使用第二種查詢方法以準確的恢復到想要的SCN。

SQL> alter system checkpoint;

System altered.

 

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#

------------------

            636835

 

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

                  636839

 

從上可以看到LAST_CHANGE值為空,說明資料庫處於開啟狀態。而當資料庫一致性關閉後,系統會將四種SCN製成統一。如果資料庫非一致性關閉則LAST_CHANGE值則仍為空。

從實驗看出資料庫一致性關閉後,四種SCN保持一致。

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

 

Total System Global Area  285212672 bytes

Fixed Size                  1273252 bytes

Variable Size              96469596 bytes

Database Buffers          180355072 bytes

Redo Buffers                7114752 bytes

Database mounted.

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#

------------------

            666440

 

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

     FILE# CHECKPOINT_CHANGE#

---------- ------------------

         1             666440

         2             666440

         3             666440

         4             666440

 

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

     FILE# LAST_CHANGE#

---------- ------------

         1       666440

         2       666440

         3       666440

         4       666440

 

SQL> select file#,checkpoint_change# from v$datafile_header;

     FILE# CHECKPOINT_CHANGE#

---------- ------------------

         1             666440

         2             666440

         3             666440

         4             666440

資料庫非一致性關閉後LAST_CHANGE值仍為空。

SQL> shutdown abort

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

 

Total System Global Area  285212672 bytes

Fixed Size                  1273252 bytes

Variable Size              96469596 bytes

Database Buffers          180355072 bytes

Redo Buffers                7114752 bytes

Database mounted.

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#

------------------

            666443

 

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

     FILE# CHECKPOINT_CHANGE#

---------- ------------------

         1             666443

         2             666443

         3             666443

         4             666443

 

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

     FILE# LAST_CHANGE#

---------- ------------

         1

         2

         3

         4

 

SQL> select file#,checkpoint_change# from v$datafile_header;

     FILE# CHECKPOINT_CHANGE#

---------- ------------------

         1             666443

         2             666443

         3             666443

         4             666443

 

資料庫SCN原理:

資料庫重新啟動時,系統會對SCN進行兩次比較。第一次是比較資料檔案頭中的啟動SCN與資料檔案SCN,如果兩個值匹配,說明資料檔案不需要介質恢復。接下來比較資料檔案頭SCN與資料檔案結束SCN,如果數值匹配,說明在資料庫關閉時所有資料塊已提交,資料庫不需要恢復,正常開啟。當資料庫開啟後,資料檔案結束SCN再次被置為空。當資料檔案被設定為只讀或使用begin backup命令時該資料檔案SCN將被凍結,直到被設定為正常狀態。

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

相關文章