闪回删除例子

来源:互联网 发布:惠州惠阳区网络问政 编辑:程序博客网 时间:2024/04/30 15:45

闪回删除例子:
(1)用system用户连接到数据库
SQL> conn system/oracle
已连接。
(2)创建一个新用户
SQL> create user dropper identified by dropper;

用户已创建。

SQL> grant create session,resource to dropper;

授权成功。

SQL> conn dropper/dropper
已连接。
(3)创建一个带有索引和约束的表,并插入一行:
SQL> create table names(naem varchar2(10));

表已创建。

SQL> create index name_idx on names(naem);

索引已创建。

SQL> alter table names add constraint name_u unique(naem);

表已更改。

SQL> insert into names values('Jonn');

已创建 1 行。
(4)确认模式的内容
SQL> select object_name,object_type from user_objects;

OBJECT_NAME          OBJECT_TYPE
-------------------- -------------------
NAME_IDX             INDEX
NAMES                TABLE

SQL> select constraint_name,constraint_type,table_name from user_constraints;

CONSTRAINT_NAME      CONSTRAINT_TYPE      TABLE_NAME
-------------------- -------------------- ------------------------------
NAME_U               U                    NAMES
(5)删除该表
SQL> drop table names;

表已删除。
(6)重复步骤4中的查询。
SQL> select constraint_name,constraint_type,table_name from user_constraints;

CONSTRAINT_NAME      CONSTRAINT_TYPE      TABLE_NAME
-------------------- -------------------- ------------------------------
BIN$LFg1G52oR7y8Bnjd U                    BIN$iadCJZxxSsGOQYNH/ZPwNg==$0
JHyoeA==$0

SQL> select object_name,object_type from user_objects;

未选定行

结果显示:虽然从user_objects中删除了对象,但是仍然采用系统生成的名称的约束。
(7)查询回收站以查看原始的名称到回收站名称的映射。
SQL> select object_name,original_name,type from user_recyclebin;

OBJECT_NAME          ORIGINAL_NAME                    TYPE
-------------------- -------------------------------- ------------
BIN$43Vw0GYgTSe+1i9Q NAME_IDX                         INDEX
VPM5ZQ==$0

BIN$iadCJZxxSsGOQYNH NAMES                            TABLE
/ZPwNg==$0
回收站中的对象可以查询,但不可以对其进行DML操作。
(8)使用flashback drop恢复表
SQL> flashback table names to before drop;

闪回完成。
(9)重新运行一下步骤4和7中的查询。
SQL> select object_name,original_name,type from user_recyclebin;

未选定行
SQL> select object_name,object_type from user_objects;

OBJECT_NAME          OBJECT_TYPE
-------------------- -------------------
NAMES                TABLE
BIN$43Vw0GYgTSe+1i9Q INDEX
VPM5ZQ==$0
SQL> select constraint_name,constraint_type,table_name from user_constraints;

CONSTRAINT_NAME      CONSTRAINT_TYPE      TABLE_NAME
-------------------- -------------------- ------------------------------
BIN$LFg1G52oR7y8Bnjd U                    NAMES
JHyoeA==$0
注:索引和约束已保留了它们的回收站名称.
(11)将索引和约束重命名回原先的名称:
SQL> alter index "BIN$43Vw0GYgTSe+1i9QVPM5ZQ==$0" rename to name_idx;

索引已更改。
SQL> alter table names rename constraint "BIN$LFg1G52oR7y8BnjdJHyoeA==$0" to nam
e_u;

表已更改。
(12)再重新查询一下是否操作成功:
SQL> select object_name,object_type from user_objects;

OBJECT_NAME          OBJECT_TYPE
-------------------- -------------------
NAME_IDX             INDEX
NAMES                TABLE

SQL> select constraint_name,constraint_type,table_name from user_constraints;

CONSTRAINT_NAME      CONSTRAINT_TYPE      TABLE_NAME
-------------------- -------------------- ------------------------------
NAME_U               U                    NAMES
(13)使用system连接数据库,删除dropper模式
SQL> drop user dropper cascade;

用户已删除。
(14)查询dba_recyclebin视图来证实确定删除了用户dropper拥有的所有对象.
SQL>  select count(*) from dba_recyclebin where owner='DROPPER';

  COUNT(*)
----------
         0

原创粉丝点击