网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  用Oracle 10g新的行时间戳捕捉变化     
  文章作者:未知  文章来源:未知  
  查看:135次  录入:管理员--2007-04-11  
 

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

在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 selected.
SQL> UPDATE emp
  2  SETsal = 6000
  3  WHERE ename = 'KING';
1 row updated.
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 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, sal
  2  FROMemp AS OF SCN (653330)
  3  WHERE ename = 'KING';
ORA_ROWSCN ENAME             SAL               
---------- ---------- ----------  
    529426 KING             5000
 
 
上一篇: Oracle数据库字符集转换规律全面剖析    下一篇: Oracle中利用EXP/IMP工具实现数据迁移
  相关文档
可以实现故障预防 探测和恢复的maa结构 05-04
实例解析:怎样获得当前 数据库的scn值 11-15
深入讲解vb与oracle数据库的日期转换 02-29
用最简单的方法记录oracle语句的执行时间 03-24
数据库基础:oracle数据库中时间问题比较 09-11
如何查看"control file"中保存的内容 02-27
巧用dbms_rowid包获得rowid的详细信息 05-16
oracle 9.2.0.1版本函数编译的一个bug 03-20
“字符型”转换成“日期型”的实例脚本 01-31
oracle数据库buffer busy wait等待事件 (1) 04-17
教你手工创建数据库的全部脚本及说明 05-13
带你深入了解管理oracle实例的相关方法 (1) 04-23
脚本示例:查看数据库中有无多余的索引sql 07-01
循序渐进讲解oracle数据库管理员的职责 (1) 04-29
通过幸存的oracle文件修复oracle9i数据 03-17
深入研究Oracle数据库中空间管理的方法 06-10
Oracle数据库中利用ASSM改善分段存储 04-12
oracle数据库exp/imp版本的支持列表集合 05-28
细化解析:oracle 10g的统计信息工具awr 11-15
去掉数据库的初始化参数即可禁用xdb服务 03-05
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息