Oracle10g与oracle11g中current_scn计算差别

简介: 我们知道Oracle10g在v$database视图中引入了current_scn,这个SCN来自底层表,代表当前的SCN,在Oracle9i中我们可以通过dbms_flashback.get_system_change_number来获得系统的SCN。

我们知道Oracle10g在v$database视图中引入了current_scn,这个SCN来自底层表,代表当前的SCN,在Oracle9i中我们可以通过dbms_flashback.get_system_change_number来获得系统的SCN。我的版本是oracle11g的。

但是注意current_scn还是有所不同的,看一下一个查询:
SQL> col current_scn for 99999999999999999
SQL> select current_scn from v$database;
       CURRENT_SCN                                                             
------------------                                                             
           1941617                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941650                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941675                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941678                                                             

SQL> select current_scn from v$database;

       CURRENT_SCN                                                             
------------------                                                             
           1941683                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941689                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941691                                                             

SQL> select current_scn from v$database;

       CURRENT_SCN                                                             
------------------                                                             
           1941762                                                             

SQL> conn system/yang as sysdba
已连接。
SQL> select current_scn from v$database;

       CURRENT_SCN                                                             
------------------                                                             
           1941780                                                             

SQL> select current_scn from v$database;

       CURRENT_SCN                                                             
------------------                                                             
           1941794                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941794                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941795                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941797                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941797                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941798                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941799                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941799                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941799                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941800                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941800                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941801                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941801                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941801                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941802                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941802                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941802                                                             

SQL> select dbms_flashback.get_system_change_number current_scn from dual;

       CURRENT_SCN                                                             
------------------                                                             
           1941803                                                             

SQL> select current_scn from v$database;

       CURRENT_SCN                                                             
------------------                                                             
           1941806                                                             

SQL> select current_scn from v$database;

       CURRENT_SCN                                                             
------------------                                                             
           1941808                                                             

SQL> select current_scn from v$database;

       CURRENT_SCN                                                             
------------------                                                             
           1941809                                                             

SQL> select current_scn from v$database;

       CURRENT_SCN                                                             
------------------                                                             
           1941811                                                             

SQL> select current_scn from v$database;

       CURRENT_SCN                                                             
------------------                                                             
           1941812                                                             

SQL> select current_scn from v$database;

       CURRENT_SCN                                                             
------------------                                                             
           1941814                                                             

SQL> select current_scn from v$database;

       CURRENT_SCN                                                             
------------------                                                             
           1941815                                                             

SQL> select current_scn from v$database;

       CURRENT_SCN                                                             
------------------                                                             
           1941817       
                                                      

我们看到current_scn的查询会直接导致SCN的增进,而其他方式并不会,至少执行两次时不会。也就是说在这里的current_scn就像是一个Sequence一样,查询会导致增进。这也很好理解,v$database只能通过增进当前的SCN才能保证获得的SCN是Current的。可是如果不查询呢?这个值肯定是不会增长的。

这里 和盖国强大师 说点不一样。

http://www.eygle.com/archives/2007/06/oracle10g_current_scn.html

有点疑惑?那位朋友能给个解答!先谢谢了。。

目录
相关文章
|
4月前
|
SQL Oracle 关系型数据库
Oracle查询优化-计算字符在字符串中出现的次数
【2月更文挑战第3天】【2月更文挑战第7篇】只接上SQL
118 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle之日期计算相关函数
Oracle之日期计算相关函数
73 0
|
Oracle 关系型数据库
Oracle 计算两个日期间隔的天数、月数和年数
在Oracle中计算两个日期间隔的天数、月数和年数: 一、天数: 在Oracle中,两个日期直接相减,便可以得到天数; 1 select to_date('08/06/2015','mm/dd/yyyy')-to_date('07/01/2015','mm/dd/yyyy') from dual;返回结果:36 二、月数: 计算月数,需要用到months_between函数; 1 --months_between(date1,date2) 2 --如果两个日期中“日”相同,或分别是所在月的最后一天,那么返回的结果是整数。
3956 0
|
4月前
|
存储 Oracle 关系型数据库
手把手教你安装Oracle——以oracle 11g为例
手把手教你安装Oracle——以oracle 11g为例
手把手教你安装Oracle——以oracle 11g为例
|
4月前
|
SQL Oracle 关系型数据库
Oracle之有哪些日期计算函数?
Oracle之有哪些日期计算函数?
135 0
|
4月前
|
Oracle 关系型数据库 数据库
【Oracle学习】—Oracle11g修改用户名与密码(一)
【Oracle学习】—Oracle11g修改用户名与密码(一)
|
SQL Oracle 关系型数据库
ORACLE——一条SQL计算同比、环比
ORACLE——一条SQL计算同比、环比
|
SQL Oracle 关系型数据库
Oracle中计算除法 ,解决除数为零报错问题
Oracle中计算除法 ,解决除数为零报错问题
307 0
|
监控 Oracle 关系型数据库
Oracle 计算时间差
Oracle 计算时间差
70 0