oracle数据库闪回查询和闪回表测试

来源:互联网 发布:淘宝上代购是真的吗 编辑:程序博客网 时间:2024/06/05 07:34


闪回版本查询测试

实现步骤:

1. 使用SQLPLUS连接Oracle数据库

2. 构建简单SQL语句

3. 闪回版本查询测试

实验操作如下:

1.  以SYS用户通过SQLPLUS连接上Oracle数据库


2.  启动PDB :pdb_jxc,并切换到pdb下。

3.  新建一张表test,并进行一系列的插入,删除,更新操作。并在每次操作后执行commit命令立即提交数据。

a) SQL>create table test (id number);创建一个表

b) SQL>insert into test values(111);

c) SQL>commit;

d) SQL>insert into test values(222);

e) SQL>commit;

f) SQL>update test set id=333 where id=222;

g) SQL>commit;

h) SQL>delete from test where id=111;

i) SQL>commit;

j) 对表进行一系列的修改

k) SQL>select * from test;

4.闪回查询版本测试

SQL>selectversions_startscn,versions_endscn,versions_xid,versions_operation,id from testversions between timestamp minvalue and maxvalue;

 

4.  继续执行一些插入、更新删除操作,但是不立即commit提交。

然后在进行闪回版本测试。

发现在不提交的情况下,闪回版本查询的结果和第一次是一样的。

5.  执行commit命令,再次进行闪回版本查询操作。

发现commit后查询结果多出两行,即为新增的两次操作的记录。说明闪回版本查询只能查询到所有commit后的操作,对于还处于undo阶段的语句是查询不到的。

 


 

闪回表查询测试

实现步骤

使用SQLPLUS连接Oracle数据库

构建简单SQL语句

闪回表查询测试

实验操作如下:

1. 以SYS用户通过SQLPLUS连接上Oracle数据库

与前面一样,暂不截图。

2. 构建简单SQL语句:

a) SQL>create table test1(id number);创建一个表

b) SQL>insert into test1 values(111);

c) SQL>commit;

d) 对表test1进行插入数据操作

3. 查询现阶段表test1中的内容以及当前的asn号

a) SQL>select * from test1;

b) SQL>select current_scn from v$database;

4. 对表test1继续进行操作

a) SQL>insert into test1 values(222);

b) SQL>commit;

c) SQL>update test1 set id=333 where id=222;

d) SQL>commit;

e) SQL>delete from test1 where id=111;

f) SQL>commit;

5.查询当前表test1中的内容

SQL>select* from test1;

6.进行闪回表查询测试

SQL>select* from test1 as of scn 1636845;

发现闪回表的查询结果和第一次的查询结果是一样的,说明闪回查询的结果是正确的。

需要注意的是闪回查询是不修改表的,而只是查询历史记录。通过下面的截图可以看出,在进行一次select查询的结果和闪回表查询前的结果是一样的。说明表中数据没有被修改。

1 0
原创粉丝点击