ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle10g与oracle11g中current_scn计算差别

Oracle10g与oracle11g中current_scn计算差别

原创 Linux操作系统 作者:杨奇龙 时间:2010-05-02 12:43:02 0 删除 编辑

我们知道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

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

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22664653/viewspace-661762/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
MySQL DBA NoSQL DEVOPS

注册时间:2009-10-07

  • 博文量
    1026
  • 访问量
    8205978