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
dbms_flashback查询的SCN >= X$KTUXE查询的SCN
对于上面这一点,结束事务 与 末结束事务做一个小结:
1) SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe;
SCN----------
1574212) 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基本一致(执行前后问题)这也验证了前面所说的 最近结束事务 与 末结束事务!!!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22664653/viewspace-660161/ ,如需转载,请注明出处,否则将追究法律责任。