- Rongsen.Com.Cn 版权所有 2008-2010 京ICP备08007000号 京公海网安备11010802026356号 朝阳网安编号:110105199号
- 北京黑客防线网安工作室-黑客防线网安服务器维护基地为您提供专业的
服务器维护
,企业网站维护
,网站维护
服务 - (建议采用1024×768分辨率,以达到最佳视觉效果) Powered by 黑客防线网安 ©2009-2010 www.rongsen.com.cn
作者:黑客防线网安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
我要申请本站:N点 | 黑客防线官网 | |
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479 |