SCN
System Change Numbers (SCNs)&System Commit Numbers(系统改变号&系统提交号) A system change number (SCN) is a logical, internal time stamp used by Oracle Database;********************************************************************************************************SCN特点:
SCN本身也是一种时间 SCN是从你建库开始单调递增的序列;当你将SCN号用完了,数据库就不能运行; 但是几百年之内是不会用完的! SCN是一个重要机制,在数据恢复、Data Guard、Streams复制、RAC 节点间的同步等各个功能中起着重要作用;*********************************************************************************************************Oracle数据库SCN的种类: 1.数据库当前的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.数据库的检查点scn(系统scn) -- 来源控制文件,用来标识当前数据库的数据更新的信息(用来表示数据库的更新行为) SYS@orcl11g> select checkpoint_change#,current_scn from v$database; CHECKPOINT_CHANGE# CURRENT_SCN -------------------------------- ---------------------- 1666278 1676455 3.数据文件的检查点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.数据文件头部的检查点SCN -- 来源于数据文件头部 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的话,说明数据文件已经离线,不再读取这个数据文件 5.数据文件的last_change# --数据文件的关闭SCN(结束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)那系统是如何产生一个最新的 SCN 的?是由当时的 timestamp 转换过来的。每当需要产生一个最新的 SCN 到 redo 记录时,系统获取当时的 timestamp,将其转换为数字作为 SCN。TIME & SCN的相互转换函数: 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 hh24:mi:ss')) from dual; TIMESTAMP_TO_SCN(TO_TIMESTAMP('2013-06-2610:53:27','YYYY-MM-DDHH24:MI:SS')) ----------------------------------------------------------------------------------------------------------------- 1906370