用Oracle 10g数据库g新地行时间戳捕捉ORA_ROWSCN变化_Oracle数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

用Oracle 10g新地行时间戳捕捉ORA_ROWSCN变化

作者:黑客防线网安Oracle维护基地 来源:黑客防线网安Oracle维护基地 浏览次数:0

黑客防线网安网讯:数据仓库经常通过多种数据源系统填充,而每种系统都运行有自己的应用程序。所以为了能给数据仓库只提供新数据,确定哪些是最近更新的行是一件非常复杂的事。在处理一些其架构中不包括“上次...

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

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 800529426 ALLEN 1600529426 WARD 1250529426 JONES 2975529426 MARTIN 1250529426 BLAKE 2850529426 CLARK 2450529426 SCOTT 3000529426 KING 5000529426 TURNER 1500529426 ADAMS 1100ORA_ROWSCN ENAMESAL---------- ---------- ----------529426 JAMES 950529426 FORD 3000529426 MILLER 130014 rows selected.SQL> UPDATE emp2 SETsal = 60003 WHERE ename = 'KING';1 row updated.SQL> commit;Commit complete.SQL> SELECT ora_rowscn, ename, sal2 FROM emp;ORA_ROWSCN ENAME SAL---------- ---------- ----------653331 SMITH 800653331 ALLEN 1600653331 WARD 1250653331 JONES 2975653331 MARTIN 1250653331 BLAKE 2850653331 CLARK 2450653331 SCOTT 3000653331 KING 6000653331 TURNER 1500653331 ADAMS 1100ORA_ROWSCN ENAME SAL---------- ---------- ----------653331 JAMES 950653331 FORD 3000653331 MILLER 130014 rows selected.SQL> SELECT SCN_TO_TIMESTAMP(653331) FROM dual;SCN_TO_TIMESTAMP(653331)---------------------------------------------------20-JUN-06 11.03.59.000000000 PM
 

即使只有一行被改动了,剩下的也会显示一个新的系统改变数(SCN)。(更准确地说,你可以在一个表第一次被创建时,使用行级系统改变数追踪。但遗憾的是,你不能够更改该表格,以便在以后加入该特性。)所以如果被更新的块数比表中的块数要少,这也可以成为一种发现变化的方法,而不用涉及太多额外的行。

如果你需要与事务有关的日期和时间应该怎么办呢?SCN_TO_TIMESTAMP函数可以将ORA_ROWSCN 转换成为一个时间戳,利用它你可以进行查询,或者把它用作一个WHERE 子句的谓语。但是,这个时间戳仍然是一个估计值。

ORA_ROWSCN 也是将系统改变值(SCN)用作闪回查询捷径(尽管RA_ROWSCN 本身在闪回中并不能被选中)的一种很方便的方法,不然就要用闪回形式查询,选中VERSIONS_STARTSCN 和VERSIONS_ENDSCN 伪列。

列表B是一次闪回查询,它用一个小于当前值的系统改变值来获得一个数据行原来的值。我们发现King的工资回到了5000,而ORA_ROWSCN的值则是最初的系统改变值。

列表B

SQL> SELECT ora_rowscn, ename, sal2 FROMemp AS OF SCN (653330)3 WHERE ename = 'KING';ORA_ROWSCN ENAME SAL---------- ---------- ----------529426 KING 5000
 

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-12709-1.html
网站维护教程更新时间:2012-03-23 00:45:06  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer