我們可以通過函式SCN_TO_TIMESTAMP(10g以後)將其轉換回timestamp:
SQL> select dbms_flashback.get_system_change_number, SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER)
---------------------------------------------------------------------------
2877076756
17-AUG-07 02.15.26.000000000 PM
也可以用函式timestamp_to_scn將一個timestamp轉換為SCN:
SQL> select timestamp_to_scn(SYSTIMESTAMP) as scn from dual;
SCN
----------
2877078439
下面,在簡單介紹一下SCN如何在資料庫恢復中起作用。
資料庫在正常關閉(shutdown immediate/normal)時,會先做一次checkpoint,將log file中的資料寫入資料檔案中,將控制檔案、資料檔案中的SCN(包括控制檔案中的Stop SCN)都更新為最新的SCN。
資料庫異常/意外關閉不會或者只更新部分Stop SCN。
當資料庫啟動時,Oracle先檢查控制檔案中的每個Datafile Checkpoint SCN和資料檔案中的Start SCN是否相同,再檢查每個Datafile Checkpoint SCN和Stop SCN是否相同。如果發現有不同,就從Redo Log中找到丟失的SCN,重新寫入資料檔案中進行恢復。具體的資料恢復過程這裡就不再贅述。
SCN作為Oracle中的一個重要機制,在多個重要功能中起著“控制器”的作用。瞭解SCN的產生和實現方式,幫助DBA理解和處理恢復、DG、Streams複製的問題。
最後提一句,利用SCN機制,在Oracle10g、11g中又增加了一些很實用的功能——資料庫閃回、資料庫負載重現等。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13750068/viewspace-498365/,如需轉載,請註明出處,否則將追究法律責任。