关于scn号的疑惑

[复制链接]
查看11 | 回复8 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
我通过两条sql得到最近的scn,结果发现有一些差距,希望高手能给我一个解释
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------

810680

SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from X$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------

810769
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
111
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
后一个在8i可以使用。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
原帖由 zhangjia205 于 2007-11-26 15:08 发表
我通过两条sql得到最近的scn,结果发现有一些差距,希望高手能给我一个解释
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
...


dbms_flashback.get_system_change_number 这样的方法更准确。
dbms_flashback.get_system_change_number 适用于oracle9i及之后的版本
max(ktuxescnw*power(2,32)+ktuxescnb)适用于9i前面的版本。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
3Q
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
我查到的
select max(ktuxescnw*power(2,32)+ktuxescnb) from X$ktuxe;
好象都是小于
select dbms_flashback.get_system_change_number from dual;
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
现象表示的是,你第一次通过dbms_flashback.get_system_change_number获得的SCN是没有问题的。但是这个SCN是当commit发生时才会变化,你可能会疑惑为什么我当前的session确实没有commit,但是为什么.......因为oracle内部的recursive sql一直在变化。所以SCN也会有些改变,可能是3秒,或者特定的某一个状态,然后你在用8i的方法查出SCN就会发现比以前的SCN递进了一些。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
原帖由 撒克巨人 于 2007-11-27 09:30 发表
现象表示的是,你第一次通过dbms_flashback.get_system_change_number获得的SCN是没有问题的。但是这个SCN是当commit发生时才会变化,你可能会疑惑为什么我当前的session确实没有commit,但是为什么.......因为 ...

这个就不大对了吧?
dbms_flashback.get_system_change_number 即使没有 commit,它也会在瞬间递进好几个scn号。
可以自己执行一下看看。


回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
ktuxe是最近一个transaction的scn,老版本是没有准确的办法看到scn的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行