1、SCN(System Change Number 简称 SCN)是当Oracle数据库更新后,由DBMS自动维护去累积递增的一个数字。
2、SCN表示车载收音机会自动搜索频道。车载收音机是安装在汽车上的语音娱乐配置,是汽车影音娱乐系统最早也是最常见的配置之一。
1. SCN的定义scn的英文全称就是 system change number, 中文直译过来就是系统改变号了.
有名字可以知道, scn其实是一串数字. 那么它到底是用来做什么的.
其实scn是oracle 根据1个时间点, 然后经过1个函数的运算后得出的1个数字. (x和y一一对应), 反之, 也可以通过scn号码经过反函数的运算得出时间.
也就是说, scn其实就是时间的另1种表示.
2. 系统为什么要把时间转化为SCN
原因很简单, 因为系统要用不同的SCN号码来比较, 例如A对象的SCN号码和B对象的SCN号码. 系统就会知道哪个SCN的号码更新, 就知道SCN对应的时间更迟了.
也就是说, oracle 会利用scn 来比较 时间上的先后或者新旧.
那为什么不用直接用时间来比较呢? 因为直接比较时间的话比较复杂啊.
回想起, sharepool 解析sql的概念, oracle会判断sql语句 在sharepool 里有没有被执行(解析)过, 如何判断呢? 很简单, 就是根据要执行的sql语句 跟sharepool 缓存的sql语句(其实是sql]语句的哈希码)比较啊.
问题是就是怎样比较了, 就是把sql语句的ASCII码根据函数转化为1个哈希码(数字)啊. 而不是直接地比较两条sql语句啊.
根本原因就是计算内部比较数字是很简单的, 而比较复杂一点的数据类型, 例如字符串,或者时间, 就相对复杂了.
所以系统会把时间转化为SCN, 就是为了方便不同时间之间的比较啊.
可以利用下面语句来获得当前的时间及当前时间所对应的scn:
[sql] view plaincopy
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)
------------------------ ---------------------------------------------------------------------------
1760283 29-APR-13 11.25.40.000000000 PM
那个1760283 就是SCN啦.
3. SCN的意义
SCN的意义很简单, 就是为了保证oracle数据和文件的一致性, 下面会详细分析常见的SCN, 来体会这个意义.
SCN(System Change Number)数据更新后,会增加一个数字,相当于快照,多用于闪回 *** 作。rowid是数据行的物理存储位置,由数据对象编号、文件编号、块编号、行编号
,一般创建索引就是用rowid和索引健的对应关系。数据的物理位置发生变化,rowid才会变。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)