用Oracle10g新的行时间戳捕捉变化

文章作者 100test 发表时间 2007:03:14 13:33:37
来源 100Test.Com百考试题网


数据仓库经常通过多种数据源系统填充,而每种系统都运行有自己的应用程序。所以为了能给数据仓库只提供新数据,确定哪些是最近更新的行是一件非常复杂的事。在处理一些其架构中不包括“上次更新时间”列的过时软件时,这尤其是一个难题。企业自然不情愿仅仅为了追踪变化而通过修改工作代码来添加列。

在Oracle 10g中,在行最后一次被更新的时候,每一行都有一个新的被称作ORA_ROWSCN的伪列。 ORA_ROWSCN 提供了一个“保守上边界(conservative upper bound)”系统改变数,用来记录最近被修改的行的事务。这就意味着系统改变数(SCN)是一个估计值,因为在Oracle中系统改变数只能默认在模块级被追踪。

例如在列表A中,ORA_ROWSCN 在处理一个小表格时被选中,一行被更新后,ORA_ROWSCN 再次被选中。

列表A



SQL> 

SQL> SELECT ora_rowscn, ename, sal

  2  FROM emp.



ORA_ROWSCN ENAME             SAL                                               

---------- ---------- ----------                                               

    529426 SMITH             800                                               

    529426 ALLEN            1600                                               

    529426 WARD             1250                                               

    529426 JONES            2975                                               

    529426 MARTIN           1250                                               

    529426 BLAKE            2850                                               

    529426 CLARK            2450                                               

    529426 SCOTT            3000                                               

    529426 KING             5000                                               

    529426 TURNER           1500                                               

    529426 ADAMS            1100                                               



ORA_ROWSCN ENAME            SAL                                               

---------- ---------- ----------                                               

    529426 JAMES             950                                               

    529426 FORD             3000                                               

    529426 MILLER           1300                                               



14 rows 0selected.



SQL> UPDATE emp

  2  SETsal = 6000

  3  WHERE ename = KING.



1 row 0updated.



SQL> commit.



Commit complete.



SQL> SELECT ora_rowscn, ename, sal

  2  FROM emp.



ORA_ROWSCN ENAME             SAL                                               

---------- ---------- ----------                                               

    653331 SMITH             800                                               

    653331 ALLEN            1600                                               

    653331 WARD             1250                                               

    653331 JONES            2975                                               

    653331 MARTIN           1250                                               

    653331 BLAKE            2850                                               

    653331 CLARK            2450                                               

    653331 SCOTT            3000                                               

    653331 KING             6000                                               

    653331 TURNER           1500                                               

    653331 ADAMS            1100                                               



ORA_ROWSCN ENAME             SAL                                               

---------- ---------- ----------                                               

    653331 JAMES             950                                               

    653331 FORD             3000                                               

    653331 MILLER           1300                                               



14 rows 0selected.



SQL> SELECT SCN_TO_TIMESTAMP(653331) FROM dual.



SCN_TO_TIMESTAMP(653331)                                                       

---------------------------------------------------------------------------    

20-JUN-06 11.03.59.000000000 PM


相关文章


将Oracle10g内置的安全特性用于PHP
用户如何有效地利用Oracle数据字典
Oracle中加速数据导入特性和技术研究
用Oracle10g新的行时间戳捕捉变化
在Oracle数据库10g中跟踪SQL
对比Oracle数据库中多种导入数据方法
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛