免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1077 | 回复: 0

Oracle 回收站 [复制链接]

论坛徽章:
0
发表于 2011-12-20 09:48 |显示全部楼层

一:概念

 回收站,从原理上来说就是一个数据字典表,放置用户Drop掉的数据库对象信息。用户进行Drop操作的对象并没有被数据库删除,仍然会占用空间.除非是由于用户手工进行Purge或者因为存储空间不够而被数据库清掉。数据库有了这样的功能,能够减少很多不必要的麻烦.例如 :开发人员误把表删除。所以做一下几个小实验验证

Oracle回收站的功能。

二:实验内容

一):drop掉数据表,再从recyclebin中把他恢复出来。

  1.sqlplus scott/123 进入scott用户下创建teamsun表。

         SQL> create table teamsun as ( select ename,empno,hiredate from emp);

     2.验证该表是否创建成功。 

SQL> select * from teamsun;          

  

 ENAME           EMPNO HIREDATE           

----------            ----------     --------------     

SMITH            7369 17-12-80         

ALLEN            7499 20-2月 -81         

WARD             7521 22-2月 -81         

JONES            7566 02-4月 -81         

MARTIN           7654 28-9月 -81         

BLAKE            7698 01-5月 -81         

 ************               

 SQL> select tname,tabtype from tab;    

TNAME                          TABTYPE 

------------------------------ ------- 

BONUS                          TABLE   

DEPT                           TABLE   

EMP                            TABLE   

SALGRADE                       TABLE   

T1                             TABLE   

T2                             TABLE   

T3                             TABLE   

T4                             TABLE   

TEAMSUN                        TABLE                       

3. 删除TEAMSUN 

      SQL> drop table teamsun;                

         表已删除。

4. 验证表是否已经删除

     SQL> select tname,tabtype from tab;     

                                        

TNAME                          TABTYPE  

------------------------------ -------  

BIN$FtW/NFeBSryZtFD/lwCddQ==$0 TABLE    

BONUS                          TABLE    

DEPT                           TABLE    

EMP                            TABLE    

SALGRADE                       TABLE    

T1                             TABLE    

T2                             TABLE    

T3                             TABLE    

T4                             TABLE    

              

 证明 teamsun表并没有从表空间中删除,只是换了一个名字而已。

   

  5.查看回收站

     SQL> show  recyclebin                                                         

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME          ---------------- ------------------------------ ------------ -------------------  

TEAMSUN          BIN$FtW/NFeBSryZtFD/lwCddQ==$0 TABLE        2011-03-15:16:45:14  

   6.从回收站中恢复表teamsun

     SQL> flashback table teamsun to before drop 

       闪回完成。

  7.验证teasun表恢复

      SQL> select tname,tabtype from tab;                        

TNAME                          TABTYPE  

------------------------------ -------  

BONUS                          TABLE    

DEPT                           TABLE    

EMP                            TABLE    

SALGRADE                       TABLE    

T1                             TABLE    

T2                             TABLE    

T3                             TABLE    

T4                             TABLE    

TEAMSUN                        TABLE                         

已选择9行。                             

                                        

SQL> select * from teamsun ;                                         

ENAME           EMPNO HIREDATE          

---------- ---------- --------------    

SMITH            7369 17-12-80        

ALLEN            7499 20-2月 -81        

WARD             7521 22-2月 -81        

JONES            7566 02-4月 -81        

MARTIN           7654 28-9月 -81        

BLAKE            7698 01-5月 -81        

CLARK            7782 09-6月 -81        

SCOTT            7788 19-4月 -87        

KING             7839 17-11-81        

TURNER           7844 08-9月 -81        

ADAMS            7876 23-5月 -87        

JAMES            7900 03-12-81        

FORD             7902 03-12-81        

MILLER           7934 23-1月 -82        

yang_zqi          111                   

   8. SQL> show recyclebin 回收站已经没有数据。

   9. table闪回的操作中同时可以为数据表重命名:

  SQL> drop table teamsun;                                    

 表已删除。                                             

   SQL> flashback table teamsun to before drop rename to teamsun_kumin

    闪回完成。                                                  

   SQL> select tname,tabtype from tab;                            

TNAME                          TABTYPE                  

 ------------------------------ -------                             

BONUS                          TABLE                     

DEPT                           TABLE                     

EMP                            TABLE                                    

ALGRADE                        TABLE                      

T1                             TABLE                      

T2                             TABLE                      

T3                             TABLE                      

T4                             TABLE                      

TEAMSUN_KUMING                 TABLE                                

  (二):Recyclebin中的对象会被系统自动按照规则重命名,这就防止了命名冲突,命名规则为 BIN$unique_id$version,其中unique_id26个字符的对象唯一标识,version 是对象在数据库忠的版本号。

--------在删除多个同一命名的table之后,闪回的是最近一张。

      SQL> rename teamsun_kuming to teamsun;

      SQL> drop table teamsun

      SQL> create table teamsun as (select * from emp);

      SQL> show recyclebin;

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME         

---------------- ------------------------------ ------------ -------------------

TEAMSUN          BIN$7SA9KTaxQpG4qZSvRRXq7g==$0 TABLE        2011-03-15:16:51:31 

     SQL> drop table teamsun;

     SQL> show recyclebin;

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME         

---------------- ------------------------------ ------------ -------------------

TEAMSUN          BIN$PxtOEloWRum2uDLPR04wgA==$0 TABLE        2011-03-15:16:52:50

TEAMSUN          BIN$7SA9KTaxQpG4qZSvRRXq7g==$0 TABLE        2011-03-15:16:51:31

      SQL> flashback table teamsun to before drop;

      SQL> show recyclebin;

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME          ---------------- ------------------------------ ------------ -------------------

TEAMSUN          BIN$7SA9KTaxQpG4qZSvRRXq7g==$0 TABLE        2011-03-15:16:51:31

   验证完成,如果回收站中存在多张相同 ORIGINAL NAME 的表,也就是drop之前两张表名字相同,在flashback table的时候闪回的是最近的一张表。由待完成的实验1.较早前drop掉的同original name的表能否恢复,如何恢复?

  (三):更改系统设置

        在默认情况下recyclebin 功能是打开的,可以通过以下语句来设置recyclebin的开启和关闭。

      SQL> alter session set recyclebin=off;

      SQL> drop table t3;

      SQL> show recyclebin;

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME         

---------------- ------------------------------ ------------ -------------------

TEAMSUN          BIN$7SA9KTaxQpG4qZSvRRXq7g==$0 TABLE        2011-03-15:16:51:31

---------t3被直接删除了------------

   SQL> alter session set recyclebin=on;

      会话已更改。

 SQL> drop table t4;

表已删除。

SQL> show recyclebin;

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME         --------------- ------------------------------ ------------ -------------------

T4               BIN$CAOHsjD8TWaTPSSHO89nEw==$0 TABLE        2011-03-15:16:56:01

TEAMSUN          BIN$7SA9KTaxQpG4qZSvRRXq7g==$0 TABLE        2011-03-15:16:51:31

-----------但是在11g的版本中不能修改系统参数----

  SQL> alter system set recyclebin =off;

     alter system set recyclebin =off                          *

第 行出现错误

ORA-02096: 此选项的指定初始化参数不可修改 

  (四): 实现彻底删除

     -----在以上的实验中闪回相同的表名的表时,闪回的是最近的一张表,在用purge删除的时候删除的是最早的一张表,证明在oracle中采用的先进先出的原则。-----

     SQL> show recyclebin;                                     ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME         

---------------- ------------------------------ ------------ ------------------- 

T2               BIN$hw6R4Zv3R9WGgXwa93PpWA==$0 TABLE        2011-03-15:20:14:29 

T2               BIN$Eea6sFHsQtaytIWPg26/Uw==$0 TABLE        2011-03-15:20:13:59 

    SQL> purge table t2;                                           

    表已清除。                                                          

     SQL> show recyclebin           

       ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME         ---------------- ------------------------------ ------------ -------------------

T2               BIN$hw6R4Zv3R9WGgXwa93PpWA==$0 TABLE        2011-03-15:20:14:29

-------也可以一次性删除回收站里的对象--------------

       SQL> show recyclebin;                                                            

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME           

---------------- ------------------------------ ------------ ------------------- 

T1               BIN$TodKk83bRDK4kDN5XaevvA==$0 TABLE        2011-03-15:16:57:27 

TEAMSUN          BIN$7SA9KTaxQpG4qZSvRRXq7g==$0 TABLE        2011-03-15:16:51:31 

     SQL> purge recyclebin

     回收站已清空

     SQL> show recyclebin; 

     SQL>                                                            ----------------

     2.drop后带purge参数实现彻底删除

           Drop table tablename purge;

 

     (五):总结

         通过实验对10g之后oracle所提供的用于数据恢复的功能有了个简单的了解。该功能减少了因误删除带来的麻烦,但在drop掉用户对象的时候,数据并没有真正删除,空间没有得到释放,所以DBA日常中应关注这部分空间的管理。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP