SCN(System Change Number) ,也就是通常我们所说的系统改变号,是数据库中非常重要的一个数据结构。
它定义数据库在某个确切时刻提交的版本。在事物提交时,它被赋予一个唯一的标示事物的 SCN 。 SCN 提供 Oracle 的内部时钟机制,
可被看作逻辑时钟,这对于恢复操作是至关重要的 ( Oracle 仅根据 SCN 执行恢复)。
9i之前:
select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe;x$ktuxe中查询出来的是当前结束事物最大SCN值,并不完全是系统当前SCN
9i之后:
select dbms_flashback.get_system_change_number from dual;dbms_flashback查询出来的是系统当前的SCN值,可能是当前末结束事务所产生的SCN
对于上面这一点,结束事务 与 末结束事务做一个小结:
1) SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe;
SCN
----------
157421
2) SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe;
SCN
----------
157421
3)SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
157441
4) SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
157443
5) SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
157444
6) SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe;
SCN
----------
157421
通过上面简单查询可以发现:
1. dbms_flashback.get_system_change_number得出的SCN值一直在变化
2 x$ktuxe查询出来的scn值基本不变动
1) SQL> create table t as select *from all_objects;
表已创建。
2)SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe;
SCN
----------
157511
3) SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
157513
经历一次事务之后,再次查询发现,x$ktuxe增加了,与dbms_flashback得到的scn基本一致(执行前后问题)这也验证了前面所说的 最近结束事务 与 末结束事务!!!