用Oracle10g的回溯版本查询追踪行变化

故障检查最棘手的问题之一是访问同一数据的应用程序间的交互作用。虽然从本质上来说,每个应用程序都循规蹈矩,但是各个应用程序可能会对数据做出不同的假定。因此,行就可能出现,发生变化,并在你最不期望它的时候消失。

过去,解决这类问题的方法是在运行两个程序以追踪所发生的事情时,将数据丢弃。Log Miner的出现使执行这一任务变得更为容易,但它使用起来较为麻烦。现在,在Oracle 10g中,有一个与Log Miner同样功能的工具,但执行起来更为方便。

这个工具称之为回溯版本查询,它依靠自动撤消管理特性与撤消表空间自始至终提供行图像。位于“FROM表名”之后,表别名之前,回溯版本查询语法通过指示哪些行版本要包括在SELECT内,从而证明表名的资格。其语法为:

VERSIONS BETWEEN { SCN | TIMESTAMP}

{exp | MINVALUE} AND {exp | MAXVALUE}

因为它证明了表的资格,查询中的每个对象可在不同的时间点呈现。但是,你最远只能返回指定的UNDO_RETENTION参数,或最近的DDL命令(CREATE/ALTER/DROP),不管哪个在前面。

假设两个员工正在就PARTS表的一个部分描述打“编辑战”。每个人认为他或她的改变没有被数据库保存。实际上,每个人正将值改“回”到他们认为适当的地方。你可以通过提取那个行的版本历史来了解发生的内容。列表A显示了查询及其结果。

几个新的伪列为你提供影响行的事务信息。VERSIONS_STARTTIME和VERSIONS_STARTSCN让你了解历史记录的第一行内容。还有一个VERSIONS_XID列(未显示)指明事务ID;你可以应用它来研究其它行——甚至是在其它表中的其它行——所同时发生的变化。

由于发生了多次更新,你可查询数据库找出行的唯一ROWID。然后你可以使用一个相关的特性——回溯事务查询——来了解哪些用户做出过改变,他们以何种顺序提交数据。列表B显示了该查询及其结果。

这里要注意的是ROW_ID列,它与ROWID伪列不同(见下划线部分)。它只是FLASHBACK_TRANSACTION_QUERY视图中一个简单的列。

现在你可以告诉这两个用户停止修改双方的工作。

Bob Watkins(OCP, MCDBA, MCSE, MCT)是一个有着25年经验的计算机专业人士,曾做过技术培训师、顾问与数据库管理员。访问Bob的网站。

时间: 2024-09-25 02:30:31

用Oracle10g的回溯版本查询追踪行变化的相关文章

Oracle Database 10g:闪回版本查询

oracle 不需要设置,立即识别对行的所有更改 在 Oracle9i Database 中,我们看到它推出了以闪回查询形式表示的"时间机器".该特性允许 DBA 看到特定时间的列值,只要在还原段中提供该数据块此前镜像的拷贝即可.但是,闪回查询只提供某时刻数据的固定快照,而不是在两个时间点之间被更改数据的运行状态表示.某些应用程序,如涉及到外币管理的应用程序,可能需要了解一段时期内数值数据的变化,而不仅仅是两个时间点的数值.由于闪回版本查询特性,Oracle Database 10g

闪回的用途与实战(闪回表,闪回删除,闪回重名删除,闪回版本查询)

闪回可以做的操作有如下几种类型:1.当数据错误删除,并且提交时(flashback table)2.当错误删除了一张表drop table(flashback drop)3.通过闪回获取表的历史记录(flashback version query)4.当错误地执行了一个事务,并且提交了(flashback transaction query)5.将整个数据库进行恢复. 使用闪回条件:1.切换到管理员上. 假设开始登录的用户名和密码是MISPS 如果是连接远程的,连接sqlplus的方式是: sq

azure-Azure 表服务 如何查询一组行健

问题描述 Azure 表服务 如何查询一组行健 如何在Azure的表服务中 在一个分区中根据行健来取出一组数据 解决方案 不知道喔,,,,,,,,,,,,,,,,,,,,,,,,,,, 解决方案二: 不知道喔,,,,,,,没学过这个啊 解决方案三: 您好, 只要知道您的rowkey 和patitionkey,您可以轻松的从Azure table storage中获取出来,请看下面这段代码: TableQuery.CombineFilters( TableQuery.GenerateFilterC

IOS使用FMDB,实现查询某行数据并显示在UITextfiled控件上

问题描述 IOS使用FMDB,实现查询某行数据并显示在UITextfiled控件上 在登录后,如何凭登录的ID在FMDB中找到对应行数据,并依次显示在个人界面的UITextfiled控件上.新手求指教,最好有个实例,感谢. 解决方案 fmdb就是用来到数据库中查询数据,你把ID作为查询条件,构建sql语句,然后根据返回的数据,填充到对应的控件 解决方案二: IOS关于uitextfiled的使用攻略iOS--UITextFiled的使用方法

SQL查询语句行转列横向显示实例解析_MsSql

本文分享了两个有关SQL查询语句行转列横向显示的示例,供大家参考,具体内容如下 示例1: 在SQL查询语句行转列横向显示中access中没有CASE,要用IIF代替 select  iif(sex= '1 ', '男 ', '女 ')  from  tablename select country, sum(case when type='A' then money end) as A, sum(case when type='B' then money end) as B, sum(case

mysql查询语句通过limit来限制查询的行数_Mysql

mysql查询语句,通过limit来限制查询的行数. 例如: select name from usertb where age > 20 limit 0, 1; //限制从第一条开始,显示1条 select name from usertb where age > 20 limit 1; //同上面的一个效果 select name from usertb where age > 20 limit 4, 1; //显示从第五条开始,显示1条

SQL查询语句行转列横向显示实例解析

本文分享了两个有关SQL查询语句行转列横向显示的示例,供大家参考,具体内容如下 示例1: 在SQL查询语句行转列横向显示中access中没有CASE,要用IIF代替 select  iif(sex= '1 ', '男 ', '女 ')  from  tablename select country, sum(case when type='A' then money end) as A, sum(case when type='B' then money end) as B, sum(case

[20170703]11g增加字段与查询条件的变化

[20170703]11g增加字段与查询条件的变化.txt --//前几天给别人介绍12c新特性遇到一些问题,一直没空测试看看.有空测试看看. --//办公环境没有12c,使用11g应该也能说明问题. 1.环境: SCOTT@book> @ ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -------------------------

sql server 2000 版本查询

  确定已安装的 SQL Server 2000 Database Components 版本 使用 isql.osql 或查询分析器,对数据库引擎实例执行以下查询之一. SELECT SERVERPROPERTY('ProductLevel') SELECT @@VERSION SELECT SERVERPROPERTY('ProductVersion') 利用下表确定您的 Database Components 版本. SQL Server 2000 版本和级别/@@VERSION/产品级别