ORACLE查询表最近更改的数据

,今天开发人员问我如何快速并方便的查出一张表最近被更改的记录,这个需求很简单,由于是查最近被更改的数据,查回滚段就可以,下面是我做的小实验。

SQL> create table test(id number,name varchar2(10),gender varchar2(5));
表已创建。
SQL> insert into test values(1,'宋春风','男');
已创建 1 行。
SQL> insert into test values(2,'叶民','男');
已创建 1 行。
SQL> insert into test values(3,'白冰','男');
已创建 1 行。
SQL> insert into test values(4,'方巍森','男');
已创建 1 行。
SQL> insert into test values(5,'孙书祯','男');
已创建 1 行。
SQL> insert into test values(6,'史波','男');
已创建 1 行。
SQL> commit;
提交完成。

利用下面的SQL就可以查处最近更改的数据。

SQL> SELECT ID,NAME,VERSIONS_STARTTIME,VERSIONS_ENDTIME,VERSIONS_OPERATION 
FROM TEST VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE WHERE 
VERSIONS_STARTTIME IS NOT NULL ORDER BY VERSIONS_STARTTIME DESC;ID NAME   GENDE VERSIONS_STARTTIME        VERSIONS_ENDTIME          V
---------- ------ ----- ------------------------- ------------------------- -6 史波   男    30-11月-11 04.02.28 下午                            I5 孙书祯 男    30-11月-11 04.02.28 下午                            I1 宋春风 男    30-11月-11 04.02.28 下午                            I3 白冰   男    30-11月-11 04.02.28 下午                            I2 叶民   男    30-11月-11 04.02.28 下午                            I4 方巍森 男    30-11月-11 04.02.28 下午                            I
已选择6行。

修改几条数据和接下来的查询做对比。

SQL> UPDATE TEST SET GENDER='女' WHERE NAME='孙书祯';
已更新 1 行。
SQL> COMMIT;
提交完成。
SQL> UPDATE TEST SET GENDER='女' WHERE NAME='史波';
已更新 1 行。
SQL> COMMIT;
提交完成。

再次查询,被修改的数据就可以看到被修改和修改前的数据。

SQL> SELECT ID,NAME,GENDER,VERSIONS_STARTTIME,VERSIONS_ENDTIME,
VERSIONS_OPERATION FROM TEST VERSIONS BETWEEN TIMESTAMP MINVALUE AND 
MAXVALUE WHERE VERSIONS_STARTTIME IS NOT NULL ORDER BY 
VERSIONS_STARTTIME DESC;ID NAME   GENDE VERSIONS_STARTTIME        VERSIONS_ENDTIME          V
---------- ------ ----- ------------------------- ------------------------- -6 史波   女    30-11月-11 04.15.07 下午                            U5 孙书祯 女    30-11月-11 04.14.31 下午                            U4 方巍森 男    30-11月-11 04.02.28 下午                            I3 白冰   男    30-11月-11 04.02.28 下午                            I2 叶民   男    30-11月-11 04.02.28 下午                            I1 宋春风 男    30-11月-11 04.02.28 下午                            I6 史波   男    30-11月-11 04.02.28 下午  30-11月-11 04.15.07 下午  I5 孙书祯 男    30-11月-11 04.02.28 下午  30-11月-11 04.14.31 下午  I
已选择8行。

再修改几条数据后后查询。

SQL> delete from test WHERE NAME='史波';
已删除 1 行。
SQL> delete from test WHERE NAME='孙书祯';
已删除 1 行。
SQL> commit;
提交完成。
SQL> SELECT ID,NAME,GENDER,VERSIONS_STARTTIME,VERSIONS_ENDTIME,
VERSIONS_OPERATION FROM TEST VERSIONS BETWEEN TIMESTAMP MINVALUE AND 
MAXVALUE WHERE VERSIONS_STARTTIME IS NOT NULL ORDER BY 
VERSIONS_STARTTIME DESC;ID NAME   GENDE VERSIONS_STARTTIME        VERSIONS_ENDTIME          V
---------- ------ ----- ------------------------- ------------------------- -5 孙书祯 男    30-11月-11 04.26.02 下午                            D6 史波   男    30-11月-11 04.26.02 下午                            D6 史波   女    30-11月-11 04.15.07 下午  30-11月-11 04.19.08 下午  U5 孙书祯 女    30-11月-11 04.14.31 下午  30-11月-11 04.19.08 下午  U2 叶民   男    30-11月-11 04.02.28 下午                            I3 白冰   男    30-11月-11 04.02.28 下午                            I4 方巍森 男    30-11月-11 04.02.28 下午                            I5 孙书祯 男    30-11月-11 04.02.28 下午  30-11月-11 04.14.31 下午  I1 宋春风 男    30-11月-11 04.02.28 下午                            I6 史波   男    30-11月-11 04.02.28 下午  30-11月-11 04.15.07 下午  I
已选择10行。

通过以上小实验可以看出,VERSIONS_STARTTIME是数据被修改的起始时间,VERSIONS_ENDTIME是数据被修改后新数据的有效时间,也就是VERSIONS_STARTTIME和VERSIONS_ENDTIME时间段内,这条数据再没被修改过,如果VERSIONS_ENDTIME为空,就说明这天记录从VERSIONS_STARTTIME时间起再没被修改过。VERSIONS_OPERATION是修改状态,I代表INSERT,U代表UPDATE,D代表DELETE。此时如果想回滚INSERT的数据,只需要DELETE反向操作即可,如果想回滚UPDATE操作,将数据反向UPDATE回去即可,比如本实验已经可以看到进行UPDATE操作的是NAME为史波和孙书祯的两条记录,而且也可以看到进行UPDATE之前的数据他们的性别是男,所以只需要在做个反向UPDATE,将性别该为男即可实现回退,如果要回滚DELETE操作,同样做个INSERT操作,将删除的数据在插回去即可。
注:此SQL只能查询到回滚段内的信息,超出回滚段范围这个SQL就无能为力了,需要借助LOGMGR工具挖掘日志了(详见http://www.dbdream.org/?p=149)。

转载于:https://www.cnblogs.com/wzmenjoy/archive/2012/01/17/2367636.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学滑冰

为什么80%的码农都做不了架构师?>>> http://www.cnr.cn/wcm/zhuanti/harb/bxyd/t20041230_163420.html 学滑冰(一) 到冰场上穿冰刀奔驰豪情一番,真是今人激情万千,你会滑冰吗?如果你还不会滑冰…

锡安赞歌 mp3下载

《锡安赞歌》mp3下载地址:http://pan.baidu.com/s/1i3nJLml

Java-Redis 热部署问题

项目请求时报错:java.lang.ClassCastException: cn.xingaohbd.seckil.model.User cannot be cast to cn.xingaohbd.seckil.model.User at cn.xingaohbd.seckil.service.impl.UserServiceImpl.getUser(UserServiceImpl.java:33) ~[classes/:na] at cn.xingaohbd.seck…

dp之二维背包poj1837(天平问题 推荐)

题意&#xff1a;给你c&#xff08;2<c<20&#xff09;个挂钩&#xff0c;g&#xff08;2<g<20&#xff09;个砝码&#xff0c;求在将所有砝码&#xff08;砝码重1~~25&#xff09;挂到天平(天平长 -15~~15)上&#xff0c;并使得天平平衡的方法数....... 思路&…

Gridview SummaryItem 格式化数字

DisplayFomrat{0:#.##}转载于:https://www.cnblogs.com/gaoshoubuduo/archive/2012/02/01/2334533.html

js注释

介绍 作用 合作分享&#xff1a;方便他人阅读&#xff0c;便于分享 沉淀总结&#xff1a;容易忘记代码&#xff0c;自己总结沉淀 形式 1.// 双斜杠 2&#xff0e;/**/斜杠星号 常用标签 标签 描述 module 标明当前文件模块&#xff0c;在这个文件中的所有成员将被默认为属于…

谁获得了最高奖学金

谁获得了最高奖学金http://acm.nyist.net/JudgeOnline/problem.php?pid60 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;2描述某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种&#xff0c;获取的条件各自不同&#xff…

vs2013编译boost1.55.0 32/64位

在使用vs2013编译boost-1.55.0之前&#xff0c;先要给boost做下修改&#xff1a; boost_1_55_0\boost\intrusive\detail\has_member_function_callable_with.hpp line:222 template<class U> static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION…

简评知乎的优点与不足

首先说知乎好在什么地方&#xff1f; 1、我认为知道好在知乎的真实性。 因为真实&#xff0c;大家在问问题和回答问题的时候就比较负责。这一点很关键。如果没有了这一点&#xff0c;那就成了类似百度知道的东西&#xff0c;也就没必要存在了。 2、页面简洁友好。 没有广告&…

ICE简单介绍及使用示例

1、ICE是什么&#xff1f; ICE是ZEROC的开源通信协议产品&#xff0c;它的全称是&#xff1a;The Internet Communications Engine&#xff0c;翻译为中文是互联网通信引擎&#xff0c;是一个面向对象的中间件&#xff0c;使我们能够以最小的代价构建分布式应用程序。ICE使我们…

AtCoder Grand Contest 017

AtCoder Grand Contest 017 A - Biscuits 有\(n\)个数&#xff0c;问有多少个集合的数的和模\(2\)余\(P\)。 随便\(dp\)一下就好了。 #include<iostream> #include<cstdio> using namespace std; #define ll long long inline int read() {int x0;bool tfalse;char…

PowerDesigner 把Comment写到name中 和把name写到Comment中 pd7以后版本可用

在使用PowerDesigner对数据库进行概念模型和物理模型设计时&#xff0c;一般在NAME或Comment中写中文&#xff0c;在Code中写英文。Name用来显 示&#xff0c;Code在代码中使用&#xff0c;但Comment中的文字会保存到数据库Table或Column的Comment中&#xff0c;当Name已经存在…

CentOS 6.2 安装教程

一、CentOS简介 CentOS是Linux的发行版之一&#xff0c;它安全、稳定、高效&#xff0c;是我最喜欢的Linux发行版之一。CentOS根据Red Hat Enterprise Linux开放源代码编译而成&#xff0c;与RedHat Linux并没有什么本质上的差别。但Red Hat Enterprise Linux是商业软件&#x…

python-day2

7.字符串操作 capitalize&#xff1a;首字母大写 upper&#xff1a;全大写 lower&#xff1a;全小写 swapcase&#xff1a;大小写翻转 center&#xff1a;居中&#xff0c;空白填充 8.列表的操作 增删改查 增&#xff1a;append\extend 删&#xff1a;pop默认删除最后一位&…

浅入ICE组件编程

转载网页&#xff1a;http://blog.csdn.net/liuxuezong/article/details/26745041 一、ICE介绍 ICE是ZeroC公司开发的一款高效的开源中间件平台&#xff0c;全称是Internet Communications Engine。 它的主要设计目标是&#xff1a; • 提供适用于异种环境的面向对象中间件平台…

好久没有写了,今天就谈谈微信吧!

微信&#xff0c;也算是13年内比较火的东西了&#xff0c;就功能性而言&#xff0c;它的确是一个颠覆性的产品&#xff0c;大家可以想想看&#xff0c;如果你把微信一直运行在手机后台&#xff0c;有人给你语音留言&#xff0c;收到后是一段提醒铃声&#xff0c;这个不是带打电…

去哪儿对垒携程 在线旅游静悄悄的革命

出处&#xff1a;21世纪经济报道 时间&#xff1a;2011-05-11 10:38【 字体&#xff1a; 大 中 小 】 【打印此页】 【关闭】 颠覆与被颠覆的游戏&#xff0c;正于在线旅游市场悄然演绎。 5月10日&#xff0c;携程收报48.3美元&#xff0c;市值71.42亿美元&#xff0c;在赴美上…

Mybatis一级缓存和二级缓存 Redis缓存

一级缓存 Mybatis的一级缓存存放在SqlSession的生命周期&#xff0c;在同一个SqlSession中查询时&#xff0c;Mybatis会把执行的方法和参数通过算法生成缓存的键值&#xff0c;将键值和查询结果存入一个Map对象中。如果同一个SqlSession中执行的方法和参数完全一致&#xff0c;…

关于数据库查询优化的思考

举一个例子&#xff0c;我现在有一些新闻信息&#xff0c;它包括这些字段&#xff1b;新闻ID&#xff0c;新闻Name&#xff0c;新闻ShortIntro&#xff0c;新闻Detail&#xff0c;新闻PublishTime。我现在要把它存放在数据库中&#xff0c;然后从数据库中将其取出来放在GridVie…

mysql添加远程登陆权限及mysql远程连接命令

mysql添加远程登陆权限及mysql远程连接命令 1、mysql使用本身环境下面mysql数据库中的user表来管理用户及权限 mysql> use mysql;Database changedmysql> select user,host from user;-----------------| user | host |-----------------| root | 127.0.0.1 || …