SCN
System Change Numbers (SCNs)&System Commit Numbers(系統(tǒng)改變號&系統(tǒng)提交號)
A system change number (SCN) is a logical, internal time stamp used by Oracle Database;
********************************************************************************************************
創(chuàng)新互聯(lián)公司服務(wù)項目包括禹王臺網(wǎng)站建設(shè)、禹王臺網(wǎng)站制作、禹王臺網(wǎng)頁制作以及禹王臺網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,禹王臺網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到禹王臺省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
SCN特點:
SCN本身也是一種時間
SCN是從你建庫開始單調(diào)遞增的序列;當你將SCN號用完了,數(shù)據(jù)庫就不能運行; 但是幾百年之內(nèi)是不會用完的!
SCN是一個重要機制,在數(shù)據(jù)恢復(fù)、Data Guard、Streams復(fù)制、RAC 節(jié)點間的同步等各個功能中起著重要作用;
*********************************************************************************************************
Oracle數(shù)據(jù)庫SCN的種類:
1.數(shù)據(jù)庫當前的SCN
SYS@orcl11g> select current_scn from v$database;
CURRENT_SCN
--------------------
1159919
SYS@orcl11g> select dbms_flashback.get_system_change_number() from dual;
DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER()
----------------------------------------------------------------------
1159919
SYS@orcl11g>select dbms_flashback.get_system_change_number() from dual
2 union all
3* select current_scn from v$database
DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER()
----------------------------------------------------------------------
1159919
1159919
2.數(shù)據(jù)庫的檢查點scn(系統(tǒng)scn) -- 來源控制文件,用來標識當前數(shù)據(jù)庫的數(shù)據(jù)更新的信息(用來表示數(shù)據(jù)庫的更新行為)
SYS@orcl11g> select checkpoint_change#,current_scn from v$database;
CHECKPOINT_CHANGE# CURRENT_SCN
-------------------------------- ----------------------
1666278 1676455
3.數(shù)據(jù)文件的檢查點scn --來源控制文件,標識每一個文件是什么時候同步的
SYS@orcl11g> select file#,checkpoint_change# from v$datafile order by 1;
FILE# CHECKPOINT_CHANGE#
----------- --------------------------------
1 1666278
2 1666278
3 1666278
4 1666278
5 1666278
6 1666278
7 1384282
8 1666278
9 1666278
SYS@orcl11g> select tablespace_name,file_id from dba_data_files where file_id=7;
TABLESPACE_NAME FILE_ID
------------------------------ ----------
TBS02 7
SYS@orcl11g> select tablespace_name,status from dba_tablespaces where tablespace_name='TBS02';
TABLESPACE_NAME STATUS
------------------------------ ------------
TBS02 OFFLINE
4.數(shù)據(jù)文件頭部的檢查點SCN -- 來源于數(shù)據(jù)文件頭部
SYS@orcl11g> select file#,checkpoint_change# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
--------- ---------------------------------
1 1676699
2 1676699
3 1676699
4 1676699
5 1676699
6 1676699
7 1676699
8 0
9 1676699
9 rows selected.
如果是0的話,說明數(shù)據(jù)文件已經(jīng)離線,不再讀取這個數(shù)據(jù)文件
5.數(shù)據(jù)文件的last_change# --數(shù)據(jù)文件的關(guān)閉SCN(結(jié)束SCN)
SYS@orcl11g> select file#,checkpoint_change#,last_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- -------------------------------- ----------------------
1 1737727 (null)
2 1737727 (null)
3 1737727 (null)
4 1737727 (null)
5 1737727 (null)
6 1737727 (null)
7 1737727 (null)
8 1737727 (null)
9 1737727 (null)
那系統(tǒng)是如何產(chǎn)生一個最新的 SCN 的?
是由當時的 timestamp 轉(zhuǎn)換過來的。每當需要產(chǎn)生一個最新的 SCN 到 redo 記錄時,系統(tǒng)獲取當時的 timestamp,將其轉(zhuǎn)換為數(shù)字作為 SCN。
TIME & SCN的相互轉(zhuǎn)換函數(shù):
SYS@orcl11g> select scn_to_timestamp(1906338) from dual;
SCN_TO_TIMESTAMP(1906338)
------------------------------------------------
26-JUN-13 10.52.09.000000000 AM
SYS@orcl11g> select timestamp_to_scn(to_timestamp('2013-06-26 10:53:27','yyyy-mm-dd hh34:mi:ss')) from dual;
TIMESTAMP_TO_SCN(TO_TIMESTAMP('2013-06-2610:53:27','YYYY-MM-DDHH24:MI:SS'))
-----------------------------------------------------------------------------------------------------------------
1906370