用Oracle 10g新的行时间戳ORA_ROWSCN捕捉变化
2013-12-20 17:25
369 查看
http://database.51cto.com/art/200701/37935.htm
数据仓库经常通过多种数据源系统填充,而每种系统都运行有自己的应用程序。在Oracle 10g中,在行最后一次被更新的时候,每一行都有一个新的被称作ORA_ROWSCN的伪列。本文介绍如何用Oracle 10g新的行时间戳捕捉变化。
数据仓库经常通过多种数据源系统填充,而每种系统都运行有自己的应用程序。所以为了能给数据仓库只提供新数据,确定哪些是最近更新的行是一件非常复杂的事。在处理一些其架构中不包括“上次更新时间”列的过时软件时,这尤其是一个难题。企业自然不情愿仅仅为了追踪变化而通过修改工作代码来添加列。
在Oracle 10g中,在行最后一次被更新的时候,每一行都有一个新的被称作ORA_ROWSCN的伪列。 ORA_ROWSCN 提供了一个“保守上边界(conservative upper bound)”系统改变数,用来记录最近被修改的行的事务。这就意味着系统改变数(SCN)是一个估计值,因为在Oracle中系统改变数只能默认在模块级被追踪。
例如在列表A中,ORA_ROWSCN 在处理一个小表格时被选中,一行被更新后,ORA_ROWSCN 再次被选中。
列表A
即使只有一行被改动了,剩下的也会显示一个新的系统改变数(SCN)。(更准确地说,你可以在一个表第一次被创建时,使用行级系统改变数追踪。但遗憾的是,你不能够更改该表格,以便在以后加入该特性。)所以如果被更新的块数比表中的块数要少,这也可以成为一种发现变化的方法,而不用涉及太多额外的行。
如果你需要与事务有关的日期和时间应该怎么办呢?SCN_TO_TIMESTAMP函数可以将ORA_ROWSCN 转换成为一个时间戳,利用它你可以进行查询,或者把它用作一个WHERE 子句的谓语。但是,这个时间戳仍然是一个估计值。
ORA_ROWSCN 也是将系统改变值(SCN)用作闪回查询捷径(尽管RA_ROWSCN 本身在闪回中并不能被选中)的一种很方便的方法,不然就要用闪回形式查询,选中VERSIONS_STARTSCN 和VERSIONS_ENDSCN 伪列。
列表B是一次闪回查询,它用一个小于当前值的系统改变值来获得一个数据行原来的值。我们发现King的工资回到了5000,而ORA_ROWSCN的值则是最初的系统改变值。
列表B
用Oracle 10g新的行时间戳捕捉变化
2007-01-12 10:17 Bob Watkins Builder 我要评论(0) 字号:T | T数据仓库经常通过多种数据源系统填充,而每种系统都运行有自己的应用程序。在Oracle 10g中,在行最后一次被更新的时候,每一行都有一个新的被称作ORA_ROWSCN的伪列。本文介绍如何用Oracle 10g新的行时间戳捕捉变化。
数据仓库经常通过多种数据源系统填充,而每种系统都运行有自己的应用程序。所以为了能给数据仓库只提供新数据,确定哪些是最近更新的行是一件非常复杂的事。在处理一些其架构中不包括“上次更新时间”列的过时软件时,这尤其是一个难题。企业自然不情愿仅仅为了追踪变化而通过修改工作代码来添加列。
在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 ENAMESAL ---------- ---------- ---------- 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_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
相关文章推荐
- IP地址变化后Oracle 10g引起的“ORA-12541:TNS:无监听程序”错误解决方法
- oracle 记录每一条数据最后更新的时间(ora_rowscn)
- 用sql语句查看oracle表每条记录的创建时间(ora_rowscn)
- Oracle 10g 异常:ORA-01092: ORACLE 实例终止。强制断开连接 解决方案
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决! _转载
- ORA-00600 [2662]在10g中的变化
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified
- ORACLE 函数ORA_ROWSCN
- Oracle 10g 安装出现错误“ORA-00988: 口令缺失或无效”
- Oracle 10g RAC过段时间会出现如下ALTER.LOG,什么原因
- Oracle 10g之ORA-32004问题
- Oracle 10g逻辑备份---ORA-39002、ORA-39070……
- Oracle 10g 数据库导入工具impdp使用Windows的网络驱动器 ORA-31640
- Oracle 10G数据库中"ORA-12541: TNS:no listener"报错解决办法
- Oracle ORA_ROWSCN 伪列 说明
- oracle 10g 中 portlist.ora存在吗
- 解决oracle 10g sql *plus 用dbms_output.put_line()输出时的长度限制问题 ORA-20000: ORU-10028: line le
- Oracle 10g ORA-12537之吓了一身汗!!
- 连接Oracle 10g时ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME 错误的解决
- Oracle 10g 异常:ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 解决方案