\
闪回版本查询测试
实现步骤:
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 查询的结果和闪回表查询前的结果是一样的。说明表中数据没有被修改。