如何查询oracle数据对象被修改的记录

发布网友 发布时间:2022-04-19 23:39

我来回答

6个回答

懂视网 时间:2022-04-08 01:16

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 下午                            I
         5 孙书祯 男    30-11月-11 04.02.28 下午                            I
         1 宋春风 男    30-11月-11 04.02.28 下午                            I
         3 白冰   男    30-11月-11 04.02.28 下午                            I
         2 叶民   男    30-11月-11 04.02.28 下午                            I
         4 方巍森 男    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 下午                            U
         5 孙书祯 女    30-11月-11 04.14.31 下午                            U
         4 方巍森 男    30-11月-11 04.02.28 下午                            I
         3 白冰   男    30-11月-11 04.02.28 下午                            I
         2 叶民   男    30-11月-11 04.02.28 下午                            I
         1 宋春风 男    30-11月-11 04.02.28 下午                            I
         6 史波   男    30-11月-11 04.02.28 下午  30-11月-11 04.15.07 下午  I
         5 孙书祯 男    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 下午                            D
         6 史波   男    30-11月-11 04.26.02 下午                            D
         6 史波   女    30-11月-11 04.15.07 下午  30-11月-11 04.19.08 下午  U
         5 孙书祯 女    30-11月-11 04.14.31 下午  30-11月-11 04.19.08 下午  U
         2 叶民   男    30-11月-11 04.02.28 下午                            I
         3 白冰   男    30-11月-11 04.02.28 下午                            I
         4 方巍森 男    30-11月-11 04.02.28 下午                            I
         5 孙书祯 男    30-11月-11 04.02.28 下午  30-11月-11 04.14.31 下午  I
         1 宋春风 男    30-11月-11 04.02.28 下午                            I
         6 史波   男    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)。

ORACLE查询表最近更改的数据

标签:

热心网友 时间:2022-04-07 22:24

1、打开PL/SQL Developer,输入正常的用户名密码后,选择数据库,然后正常连接。如下图。

2、正常登录后,在PL/SQL Developer中打开一个sql执行窗口,操作如下图1中标红的位置,选择"SQL Window"。

3、在新出现的空白窗口中输入正确的sql语句,如下图。

2、在出现数据结果集后,点击上图2中标红的按钮,出现新的对话框。这是要将数据结果集导出成各个不同的格式。

3、选择第一个"CSV file",这样导出的就是excel格式的数据集。

4、打开指定的文件夹,就可以看到刚刚导出的文件,双击该文件就可以正常打开,结果和数据库中查询完出来的结果是一致的。

热心网友 时间:2022-04-07 23:42

工具/材料:Management Studio。 

1、首先在桌面上,点击“Management Studio”快捷方式。 

2、之后在Management Studio窗口上,点击左上角“新建查询”选项。 

3、接着在Management Studio窗口上,输入查询oracle数据对象被修改的记录的sql语句“select  * from sys.objects order by modify_date desc”。 

4、然后在Management Studio窗口上,点击左上方“执行”图标。 

5、最后在Management Studio窗口上,显示查询数据对象被修改的记录成功。

热心网友 时间:2022-04-08 01:16

可以通过sql语句跟踪oracle数据库中的操作状态:
(1)select * from v$sqlarea;
可以跟踪sql语句的执行过程,如果想跟踪某个时间点前后的语句,可以通过first_load_time时间进行控制。

select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00';
这个方法查询结果每条记录显示一条查询语句,且只能查询sql_text小于1000字符的,多余的会被截断。

(2)select * from v$sqltext;

跟踪时,将把整个查询语句都记录到数据库中,记录中包括地址、分片等,可以通过结合(1),获取到要跟踪的sql语句的起始部分,然后通过这条语句,获取到整个地址中的完整的sql语句。

select * from v$sqltext where sqltext like '%单元名称%';

获取到包含的所有记录,找到自己想跟踪的那条sql语句的起点,记录下address字段的值,以备下面使用。

select * from v$sqltext where address = '上面查记录的地址字段';

这样就获得了整条sql语句在v$sqltext中的片段,拼接一下就可以得到跟踪的完整的sql语句了。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ocean_helen/archive/2010/11/27/6038782.aspx

热心网友 时间:2022-04-08 03:08

再拿个 SELECTED,或者那个 DELETEED 这两个临时表里面可以看到,求采纳,不明白可以加我

热心网友 时间:2022-04-08 05:16

兄弟说在百ˉˊ度搜,『双面事˙务所』°可以咨询===============================Love to wordless, is the end, no matter how beautiful the story, there will be an end day, the result is unpredictable, but we have this90、教育!科学!学会读书,便是点燃火炬;每个字的每个音节都发射火星。——雨果
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com