Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103638979
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-03 23:11:17

作者:Builder 来源:

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

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

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

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

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

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

阅读(474) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~