grant dba to fbdauser> (4)授予用户操作归档的必要权限:
grant flashback archive on fla1 tofbdauser;
(5)作为fbdauser进行连接。创建一个表并为此表启用闪回数据归档:
conn fbdauser/fbdauser
create table t1 as select * from all_users;
alter table t1 flashback archive fla1;
(6)运行这些查询来确定归档创建的对象。可能必须等待几分钟,因为对象不是立即创建的。
select object_name,object_type from user_objects;
select segment_name,segment_type from dba_segments wheretablespace_name='FDA';
(7)对保护的表执行一些DML:
delete from t1;
commit;
(8)使用标准的闪回查询语法对保护的表执行闪回查询,然后查询归档中的历史表。
select count(*) from t1;
select count(*) from t1 as of timestamp(sysdate-20/1440);
select ENDSCN,USER_ID,CREATED from SYS_FBA_HIST_75307;
(9)尝试对保护的表执行一些DDL命令:
alter table t1 drop column created;
truncate table t1;
drop table t1;
作为SYSDBA连接,并尝试执行如下命令:
drop user fbdauser cascade;
drop tablespace fda including contents and datafiles;
注意,这些命令将会生成与归档和保护的表的存在有关的错误。
(10)删除表的除归档保护:
alter table fdbauser.t1 no flashbackarchive;
(11)删除闪回数据归档
drop flashback archive fla1;
(12)重新运行步骤(9)中的所有命令。 7、闪回查询实验
(1)记录时间
SCOTT@orcl>select sysdate from dual;
SYSDATE
-------------------
2015-10-06 18:46:43
(2)从表中删除一些行,并提交更改。
SCOTT@orcl>delete from regions where region_name like 'A%';
2 rows deleted.
SCOTT@orcl>commit;
Commit complete.
(3)查询确认表中只有两行。
SCOTT@orcl>select * from regions;
REGION_ID REGION_NAME
---------- --------------------------------------------------
1 Europe
4 Middle East and Africa
(4)查询针对以前某个时间的表
SCOTT@orcl>select * from regions as of timestampto_timestamp('2015-10-06 18:46:43','yyyy-mm-dd hh24:mi:ss');
REGION_ID REGION_NAME
---------- --------------------------------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
SCOTT@orcl>select * from regions as of timestampto_timestamp('2015-10-06 18:46:43','yyyy-mm-dd hh24:mi:ss') minus select * fromregions;
REGION_ID REGION_NAME
---------- --------------------------------------------------
2 Americas
3 Asia 8、通过SQL*Plus使用闪回删除
在本练习中创建一个新的模式并在该模式内创建一个表,然后使用flashback drop恢复它
(1)作为用户SYSTEM使用SQL*Plus连接数据库
(2)创建一个用户
SYS@orcl>create user dropper> SYS@orcl>grant create session,resource to dropper;
SYS@orcl>conn dropper/dropper
(3)创建一个带有索引和约束的表,并插入一行:
DROPPER@orcl>create table names (name varchar2(10));
DROPPER@orcl>create index name_idx on names(name);
DROPPER@orcl>alter table names add (constraint name_uunique(name));
DROPPER@orcl>insert into names values('John');
DROPPER@orcl>commit;
(4)确认模式的内容
DROPPER@orcl>select object_name,object_type from user_objects;
DROPPER@orcl>select constraint_name,constraint_type,table_namefrom user_constraints;
(5)删除该表:
DROPPER@orcl>drop table names;
(6)重新运行步骤(4)中的查询。注意,已从user_objects中删除了对象,但是仍存在采用系统生成的约束。
(7)查询回收站以查看原始的名称到回收站名称的映射:
DROPPER@orcl>select object_name,original_name,type fromuser_recyclebin;
注意,该视图并没有显示约束
(8)这表明可以查询回收站但是无法对它执行DML。
DROPPER@orcl>select * from"BIN$IVfJDb9uy+zgVQAAAAAAAQ==$0";
NAME
----------
John
(9)使用flashback drop恢复表:
DROPPER@orcl>flashback table names to before drop;