如何获取SCN

简介: SCN(System Change Number) ,也就是通常我们所说的系统改变号,是数据库中非常重要的一个数据结构。 它定义数据库在某个确切时刻提交的版本。

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基本一致(执行前后问题)这也验证了前面所说的 最近结束事务 与 末结束事务!!!
目录
相关文章
|
Oracle 关系型数据库 数据库
关于获取oracle中数据变更的时间戳的探索(待更新)
近期要上一个BI的项目,需要对各个业务系统内的数据进行分析,那么问题就来了。现有的数据库中有新insert进来的数据,还会有对于已有的数据进行变更的操作。那么这些新增以及变化都要反应到BI系统中。 可以现有的生产数据库的table中没有可以识别变更的时间戳字段。
7413 0
|
存储 SQL 关系型数据库
redo日志和undo日志区别是什么?
redo日志和undo日志区别是什么?
|
缓存 监控 Oracle
Oracle检查点(Checkpoint)详解 (文档 ID 1526118.1)
Oracle检查点(Checkpoint)详解 1.检查点概念--chkpoint 检查点是一个数据库事件,存在的意义在于减少崩溃恢复crash recovery时间.检查点事件由后台进程CKPT触发,当检查点发生时,CKPT通知DBWR进程将脏数据库dirtybuffer写出到数据文件上,更新数据文件头及控制文件上的检查点信息。
2862 0