------------------------------ -----------------
DEPT TABLE
EMP TABLE
BONUS TABLE
SALGRADE TABLE
TEST1234 TABLE
SYS_TEMP_FBT TABLE
TEST123 TABLE
已选择7行。
SQL> select * from test123;
TID
----------
1
2
SQL> select * from test1234;
TID TNAME
---------- --------------------
1 Tom
SQL> host cls
闪回 删除: 需要考虑的事情
l闪回删除对下列表无效:
在SYSTEM 表空间内的表
属于字典管理的表空间
由于空间不足已经被手动或自动删除的表
l以下依赖不被保护:
位图索引
表之前删掉的索引
lFLASHBACK TABLE命令作为单一的事务执行,会得到一个单一的DML锁
表的统计数据不会被闪回
当前的索引和从属的对象会被维持
l闪回表操作:
系统表不能被闪回
不能跨越DDL操作
会被写入警告日志
产生撤销和重做的数据
SQL> --闪回版本查询
SQL> creat table versions_table
SP2-0734: 未知的命令开头 "creat tabl..."- 忽略了剩余的行。
SQL> create table versions_table
2 (vid number,
3 vname varchar(20));
表已创建。
SQL> insert into versions_tableva lues(1,'Tom');
已创建 1 行。
SQL> commit;
提交完成。
SQL> insert into versions_tableva lues(2,'Mary');
已创建 1 行。
SQL> commit;
提交完成。
SQL> insert into versions_tableva lues(3,'Mike');
已创建 1 行。
SQL> commit;
提交完成。
SQL> update versions_table setvname='Mary123' where vid=2;
已更新 1 行。
SQL> commit;
提交完成。
SQL> select * from versions_table;
VID VNAME
1 Tom
2 Mary123
3 Mike
SQL> /*
SQL> 问题:1
SQL> 1. 如何获取前面三个版本?
SQL> 2. 如何获取该表过去的一个时间
SQL> */
闪回版本查询
闪回版本查询,提供了一个审计行改变的查询功能,通过它可以查找到所有已经提交了的行记录。其语法格式如下:
selectcolumn_name[,column_name,...]
from table_name
versionsbetween [SCN|TIMESTAMP] [expr|MINVALUE]
and [epxr|MAXVALUE] as of [SCN|TIMESTAMP]expr;
备注:
其中:column_name列名;table_name表名;between...and时间段;SCN系统改变号;TIMESTAMP时间戳;ASOF表示恢复单个版本;MAXVALUE最大值;MINVALUE最小值;expr指定一个值或者表达式。
SQL> --执行闪回版本查询,获取所有的版本信息
SQL> selectvid,vname,versions_operation,versions_starttime,versions_endtime
2 from versions_table
3 versions between timestampminvalue and maxvalue
4 order by 1,4;
SQL> col VERSIONS_STARTTIME for a20
SQL> col VERSIONS_ENDTIME for a20
SQL> /