Chinaunix首页 | 论坛 | 博客
  • 博客访问: 669834
  • 博文数量: 759
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 4845
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-27 13:51
文章分类

全部博文(759)

文章存档

2011年(1)

2008年(758)

我的朋友

分类:

2008-10-27 13:58:13

        删除表的恢复

        如果某个用户不小心删除了一个十分重要的表,后果将非常严重。在9i中提供的闪回特性只能恢复DML语句造成的影响,而无法恢复DDL语句的影响。DBA只能通过重建一张表,然后从备份数据中导入。

        利用 10G中的闪回表的特性,DBA可以轻松完成这项工作,并将影响降到最小。下面就举一个例子说明:

        创建表:

         SQL> create table abc (f number(9));

        表已创建。
         SQL> create index idx_test on abc(f);

        索引已创建。

         SQL> insert into abc values(1);

        已创建 1 行。

         SQL> insert into abc values(2);

        已创建 1 行。

         SQL> insert into abc values(3);

        已创建 1 行。

        删除表:

         SQL> drop table abc;

        表已删除。
         SQL> select * from tab;
        TNAME TABTYPE CLUSTERID
        ------------------ -------------- ----------
        BIN$XXUGsbYvSqa8Mrd6GstP+g==$0 TABLE

        请注意,在原表abc被删除后,abc没有了,却出现了一张新表BIN$XXUGsbYvSqa8Mrd6GstP+g==$0。这就是 10G中对删除表的处理,原表实际上并没有完全删除掉,而是被系统重新命名成了一个系统定的新表。它还存在于原先的表空间,并且保持了原有的结构。

        依赖于原表的过程都失效了。而建在表上的索引和触发器也会被重新命名。

         SQL> select index_name, index_type, table_name from ind;
        INDEX_NAME INDEX_TYPE TABLE_NAME
        ------------------- ------------------- ----------------------
        BIN$1++ilvsQQ7mfPh2pvont5A==$0 NORMAL BIN$XXUGsbYvSqa8Mrd6GstP+g==$0

        被删除的表及其相关对象都会被放置在一个称为recyclebin的逻辑容器中:

         SQL> show recyclebin
        ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
        ---------------- ---------------------------- ------------ ---------------
        ABC BIN$XXUGsbYvSqa8Mrd6GstP+g==$0 TABLE 2005-08-29:18:03:10

        显示了被删除对象的原有名字,删除后的名字,对象类型以及删除时间。

        通过使用flashback table语句就可以恢复表!

        闪回完成。

         SQL> select * from tab;
        TNAME TABTYPE CLUSTERID
        ------------------ -------------- ----------
        ABC TABLE

        这样就轻松的将对象恢复了!

        注意,对象被恢复后,它在recyclebin中占用的空间并不会被释放。必须使用PURGERECYCLEBIN来清空占用的空间。

         SQL> PURGE RECYCLEBIN;

        回收站已清空。

        当然,如果想要彻底删除一个对象,让它不占用回收站的空间,可以用以下语句实现:

         SQL> DROP TABLE ABC PURGE;

[1]    

【责编:michael】

--------------------next---------------------

阅读(398) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~