网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.解析MobiLink实现基于时间戳的分.
.关于部署安全Oracle要造结实的门.
.oracle中使用ANYDATA列对数据串行.
.ORA-00600 [2662]错误解决过程.
.Oracle Database 10 g : 为 DBA .
.Oracle现用数据库.
.使用Oracle 8.0数据库的几点经验.
.Oracle9i 数据库管理实务讲座(六.
.使用U盘,V盘,移动硬盘的终极方法.
.ORACLE公司倾情中国软件人才培训.
.中间件:Oracle首推插座式SOA套件.
.为什么Oracle不使用我的索引.
.Oracle--树的使用(Connect By).
.如何给Linux补洞.
.用一个实例讲解Oracle的自定义聚.
.从黑客角度检验oracle数据库.
.Oracle erp销售订单订单行状态不.
.ORACLE之常用FAQ V1.0 (5).
.ORACLE备份三(ORACLE BACKUP STR.
.面向对象的关系数据库设计.

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

发表日期:2008-2-9


数据仓库经常通过多种数据源系统填充,而每种系统都运行有自己的应用程序。所以为了能给数据仓库只提供新数据,确定哪些是最近更新的行是一件非常复杂的事。在处理一些其架构中不包括“上次更新时间”列的过时软件时,这尤其是一个难题。 企业自然不情愿仅仅为了追踪变化而通过修改工作代码来添加列。 在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 游标使用大全 人气:623
下一篇:解决Oracle中Exp/Imp大量数据处理问题 人气:772
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐