Welcome 微信登录

首页 / 数据库 / MySQL / 浅谈Oracle闪回删除表限制

Oracle 10g开始提供了类似windows系统的回收站功能,用户在删除表的时候会不是直接删除,而是移动到回收站中,如果需要从回收站中取回原来的表,可以使用闪回删除表的特性,迅速的找回被删除的表,而不需要从备份中导入原有的表!但这个回收站功能也是有前提的,不是在任何情况下都可以使用闪回删除表特性,总结下,在10g中,下面几种场景表不能flashback删除,至于11g是否有改进,感兴趣的朋友可以参照本文的方法进行测试下!顺带说下,回收站采取fifo,先进先出的机制!例如在回收站有两张同样名称的表,闪回删除的时候根据删除时间的先后顺序来觉得先闪回哪张表,因而闪回删除表命令提供了rename to选项;1:回收站功能未开启(这个就不用测试了)
2:表的存储表空间不能为system
3: 表被删除的时候不能带purge参数
4:存在空间压力的时候
5:表上面启用了细粒度审计
6:表启用了VPD一:测试表空间存储为system的闪回删除
1.1 创建测试用户,并赋予相应的权限,开启数据库的回收站功能
  1. [oracle@dg53 ~]$ sqlplus /nolog  
  2. SQL*Plus: Release 10.2.0.1.0 - Production on Thu Feb 16 16:48:44 2012  
  3. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  4.  
  5. SQL> conn /as sysdba  
  6. Connected.  
  7.  
  8. SQL> create user test identified by "123456" default tablespace users account unlock;  
  9. User created.  
  10.  
  11. SQL> grant resource,connect to test;  
  12. Grant succeeded.  
  13.  
  14. SQL> show parameter recyclebin;  
  15.  
  16. NAME                                 TYPE        VALUE  
  17. ------------------------------------ ----------- ------------------------------  
  18. recyclebin                           string      on 
1.2 使用test用户新建2张表,一张存储在system表空间
  1. Connected.  
  2. SQL> create table drop_1 (a number) tablespace system;  
  3. Table created.  
  4.  
  5. SQL> insert into drop_1 values (1);  
  6. 1 row created.  
  7.  
  8. SQL> commit;  
  9. Commit complete.  
  10.  
  11. SQL> create table drop_2 as select * from drop_1;  
  12. Table created.  
  13.  
  14. SQL> select * from tab;  
  15.  
  16. TNAME                          TABTYPE  CLUSTERID  
  17. ------------------------------ ------- ----------  
  18. DROP_1                         TABLE 
  19. DROP_2                         TABLE 
1.3 分别删除2张表,不带purge参数,查看回收站只存在drop_2表,该表的存储表空间为users,由此证明表空间存储为system的表是不可以被闪回删除的
  1. SQL> drop table drop_1;  
  2. Table dropped.  
  3.  
  4. SQL> drop table drop_2;  
  5. Table dropped.  
  6.  
  7. SQL> show recyclebin;  
  8. ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME 
  9. ---------------- ------------------------------ ------------ -------------------  
  10. DROP_2           BIN$uRD2vL3ZVNjgQKjANQEaNg==$0 TABLE        2012-02-16:16:53:36  
  11.  
  12. SQL> select object_name,original_name from user_recyclebin;  
  13.  
  14. OBJECT_NAME                    ORIGINAL_NAME  
  15. ------------------------------ --------------------------------  
  16. BIN$uRD2vL3ZVNjgQKjANQEaNg==$0 DROP_2  
  17.  
  18. SQL> flashback table drop_2 to before drop;  
  19. Flashback complete. 
1.4 测试使用sys用户删除drop_2表,是否可以成功闪回删除
  1. SQL> conn /as sysdba  
  2. Connected.  
  3. SQL> show user;  
  4. USER is "SYS" 
  5. SQL> drop table test.drop_2;  
  6. Table dropped.  
  7.  
  8. SQL> conn test/123456  
  9. Connected.  
  10. SQL> select * from tab;  
  11.  
  12. TNAME                          TABTYPE  CLUSTERID  
  13. ------------------------------ ------- ----------  
  14. BIN$uRImQA9UYD7gQKjANQEdrg==$0 TABLE 
  15.  
  16. SQL> show recyclebin;  
  17. ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME 
  18. ---------------- ------------------------------ ------------ -------------------  
  19. DROP_2           BIN$uRImQA9UYD7gQKjANQEdrg==$0 TABLE        2012-02-16:17:06:54  
  20.  
  21. SQL> flashback table drop_2 to before drop;  
  22. Flashback complete 
  • 1
  • 2
  • 3
  • 下一页
浅谈Oracle分区表之范围分区RHEL5.3跑MySQL 5.5时出现系统崩溃相关资讯      oracle数据库教程 
  • Oracle raw数据类型介绍  (01/29/2013 10:05:53)
  • 监听器注册与ORA-12514 错误分析  (11/13/2012 14:30:08)
  • Oracle SQL的cursor理解  (11/13/2012 14:16:17)
  • Oracle 如何强制刷新Buffer Cache  (01/29/2013 10:02:46)
  • dblink致Oracle库的SCN变成两库的  (11/13/2012 14:24:41)
  • Linux操作系统下完全删除Oracle数  (11/13/2012 08:25:52)
本文评论 查看全部评论 (0)
表情: 姓名: 字数