|
最初由 lifeng@itpub 发布
[B]试验结果确实同所说:
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282673
SQL> insert into test values (1);
已创建一行。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282674
SQL> insert into test values (2);
已创建一行。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282674
SQL> commit;
提交完成。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282678
---------------------------------------
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282684
SQL> insert into test values (1);
已创建一行。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282685
SQL> rollback;
重算已完成。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282687
从实验结果看,一个事务中并不是所有的DML操作导致了SCN的增加,只有第一个非SELECT的DML语句导致SCN的增加,因此我认为不是DML本身导致SCN增加,而更有可能是第一个非SELECT的DML语句执行额外的动作(相比较事务中其他语句来说),此额外动作导致了SCN增加。
另外,要注意的是如果一个事务光是SELECT,而不做其它的INSERT,UPDATE操作,即使在COMMIT后,SCN也不会改变。
试验如下:
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282694
SQL> select * from test2;
N
----------
1
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282694
SQL> commit;
提交已完成。
SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)
------------------------------------
282694
注:
在ORACLE 8I以下,可通过如下语句取得CURRENT SCN
select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;
在ORACLE 9I,使用如下语句取得CURRENT SCN
select dbms_flashback.get_system_change_number from dual; [/B]
为什么什么都不做每隔几秒中查询的SCN会发生变化?是检查点的原因吗? |
|