Heim >Datenbank >MySQL-Tutorial >Oracle10g新特性:Recycle Bin回收站

Oracle10g新特性:Recycle Bin回收站

WBOY
WBOYOriginal
2016-06-07 15:12:391160Durchsuche

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 Oracle10g提供了类似操作系统中的回收站功能。当drop table的时候,实际上只是将其重命名,并将table以及相关联的对象如index,constraint等放到回收站(RecycleBin)中,后续如果发现drop错了table

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

    Oracle10g提供了类似操作系统中的回收站功能。当drop table的时候,实际上只是将其重命名,并将table以及相关联的对象如index,constraint等放到回收站(RecycleBin)中,后续如果发现drop错了table,可以使用flashback table命名将回收站中的table还原,这就是Oracle10g的Flashback Drop功能。

    1.什么是Recycle Bin

    实际上,Recycle Bin只是一个保存被drop的对象的一个数据字典表。所以,可以通过如下语句查询回收站中的信息:select * from recyclebin

    除非拥有sysdba权限,每个用户只能看到属于自己的对象。所以,对于用户来说,好像每个人都拥有自己的回收站。即使用户有删除其他schema对象的权限,也只能在recyclebin中看到属于自己的对象。

    做个小试验:SQL> conn ning/ning已连接。

    SQL> drop table test;

    表已删除。

    SQL> drop table test.test;

    表已删除。

    SQL> select object_name,original_name from recyclebin;

    OBJECT_NAME ORIGINAL_NAME

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

    BIN$xJlIkIFVR/yau1Qb8ocxxQ==$0 TEST

    SQL> conn test/test已连接。

    SQL> select object_name,original_name from recyclebin;

    OBJECT_NAME ORIGINAL_NAME

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

    BIN$1PKEiRExRN2g3tqEEWLfyw==$0 TEST

    以下几种drop不会将相关对象放进RecycleBin:

    * drop tablespace:会将RecycleBin中所有属于该tablespace的对象清除* drop user:会将RecycleBin中所有属于该用户的对象清除* drop cluster:会将RecycleBin中所有属于该cluster的成员对象清除* drop type:会将RecycleBin中所有依赖该type的对象清除

    RecycleBin中的对象会被系统自动按照规则重命名,这是为了防止命名冲突。命名格式为:BIN$unique_id$version

    其中unique_id是26个字符的对象唯一标识符,version则是对象在数据库中的版本号。

    SQL> create table t(id int);

    表已创建。

    SQL> drop table t;

    表已删除。

    SQL> select object_name,original_name from recyclebin;

    OBJECT_NAME ORIGINAL_NAME

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

    BIN$+7J5MgT2RbCX+tka+zjpgA==$0 T

    SQL> create table t(id int);

    表已创建。

    SQL> drop table t;

    表已删除。

    SQL> select object_name,original_name from recyclebin;

    OBJECT_NAME ORIGINAL_NAME

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

    BIN$+7J5MgT2RbCX+tka+zjpgA==$0 T BIN$pc+kkUM7QjuQeCDGtwlzgQ==$0 T

    可以看到,删除table t后,重建一个名为t的table,再次删除,其unique_id是不一样的。

    这时,做一个还原看看:

    SQL> select object_name,original_name from recyclebin;

    OBJECT_NAME ORIGINAL_NAME

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

    BIN$+7J5MgT2RbCX+tka+zjpgA==$0 T

    这里,Oracle选择了最后一次删除的T表还原。

    再次删除:SQL> drop table t;

    表已删除。

    SQL> select object_name,original_name from recyclebin;

    OBJECT_NAME ORIGINAL_NAME

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

    BIN$4bNgZiMGTA63iwA5xflh5A==$0 T BIN$+7J5MgT2RbCX+tka+zjpgA==$0 T

    可以看到unique_id又变了。所以,通过这种命名方式,避免了对于删除table后又重建了同名table的情况可能造成的命名冲突。

[1] [2] [3] [4] 

Oracle10g新特性:Recycle Bin回收站

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn