`

oracle10g recyclebin 详解

阅读更多
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 hr/hr
已连接。
SQL> drop table test;
表已删除。
SQL> conn test/test
已连接。
SQL> drop table test;
表已删除。
SQL> select object_name,original_name from recyclebin;

OBJECT_NAME                    ORIGINAL_NAME
------------------------------ --------------------------------
BIN$a5ZBzpZWTQ2TNYt7SOzUFQ==$0 TEST
SQL> conn hr/hr
已连接。
SQL> select object_name,original_name from recyclebin;

OBJECT_NAME                    ORIGINAL_NAME
------------------------------ --------------------------------
BIN$HX/8VbJARoea6Eckpactvg==$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> conn test/test
已连接。
SQL> create table t(id int);
表已创建。
SQL> drop table t;
表已删除。
SQL> select object_name,original_name from recyclebin;

OBJECT_NAME                    ORIGINAL_NAME
------------------------------ -------------------------------
BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 T
BIN$a5ZBzpZWTQ2TNYt7SOzUFQ==$0 TEST

SQL> create table t(id int);
表已创建。
SQL> drop table t;
表已删除。
SQL> select object_name,original_name from recyclebin;

OBJECT_NAME                    ORIGINAL_NAME
------------------------------ -------------------------------
BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 T
BIN$a5ZBzpZWTQ2TNYt7SOzUFQ==$0 TEST
BIN$to91fMaiSSCcj2eI36eDyQ==$0 T
   可以看到,删除table t后,重建一个名为t的table,再次删除,其unique_id是不一样的。
  
   这时,做一个还原看看:

SQL> flashback table t to before drop rename to t;
闪回完成。
SQL> select object_name,original_name from recyclebin;

OBJECT_NAME                    ORIGINAL_NAME
------------------------------ -------------------------------
BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 T

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

再次删除
SQL> drop table t;
表已删除。
SQL> select object_name,original_name from recyclebin;

OBJECT_NAME                    ORIGINAL_NAME
------------------------------ --------------------------------
BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 T
BIN$aafxCq9gTbGMvrqnLMP69A==$0 T
    可以看到unique_id又变了。所以,通过这种命名方式,避免了对于删除table后又重建了同名table的情况可能造成的命名冲突。

2.如何启用/禁用RecycleBin

可以通过参数禁用或启用recyclebin这个特性
在Oracle 10gR1中,通过修改一个隐含_recyclebin为False可以禁
用这个特性,

在Oracle 10gR2中,recyclebin变成了一个常规参数,可以在session/system级动态修改 :
SQL> show parameter recyclebin
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------
recyclebin                           string      on
SQL> alter session set recyclebin=off;
会话已更改。
SQL> alter session set recyclebin=on;
会话已更改。
SQL> alter system set recyclebin=off;
系统已更改。
SQL> alter system set recyclebin=on;
系统已更改。

3.如何查看RecycleBin中的信息
    前面已经提到,用户可以通过查询recyclebin来查看属于自己的被drop的对象。

SQL> select object_name,object_type from dba_objects where object_name='RECYCLEBIN';

OBJECT_NAME
--------------------------------------------------------------------------------
OBJECT_TYPE
-------------------
RECYCLEBIN
SYNONYM


SQL> select owner,synonym_name,table_owner,table_name from dba_synonyms where synonym_name='RECYCLEBIN';

OWNER                          SYNONYM_NAME
------------------------------ ------------------------------
TABLE_OWNER                    TABLE_NAME
------------------------------ ------------------------------
PUBLIC                         RECYCLEBIN
SYS                            USER_RECYCLEBIN

可以发现,实际上recyclebin是user_recyclebin的一个公共同义词。还可以通过dba_recyclebin查看系统中所有被drop的对象,但这里没有all_recyclebin视图。
另外,Sqlplus也提供了一个专门的命令
SQL> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T                BIN$aafxCq9gTbGMvrqnLMP69A==$0 TABLE        2008-09-27:16:02:03
T                BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 TABLE        2008-09-27:15:48:13

    但该命令只能看到被drop的table,该table对应的index等只能通过查询获取。
SQL> create table t(id int);
表已创建。
SQL> create index ix_t on t(id);
索引已创建。
SQL> alter table t add constraint con_t_pk primary key(id) using index ix_t;
表已更改。
SQL> drop table t;
表已删除。
SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T                BIN$Lw6h3tI8SjirrzY38PbKZA==$0 TABLE        2008-09-27:16:41:51
T                BIN$aafxCq9gTbGMvrqnLMP69A==$0 TABLE        2008-09-27:16:02:03
T                BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 TABLE        2008-09-27:15:48:13

4.如何清除RecycleBin中的对象
    回收站中的东西多了,自然要清除。Oracle10g增加了一个新的关键字purge来执行清除recyclebin的功能。
    purge table table_name可以清除指定的table,这里的table_name既可以是table原来的名字,也可以是回收站中按规则自动命名的名字。
SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T                BIN$Lw6h3tI8SjirrzY38PbKZA==$0 TABLE        2008-09-27:16:41:51
T                BIN$aafxCq9gTbGMvrqnLMP69A==$0 TABLE        2008-09-27:16:02:03
T                BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 TABLE        2008-09-27:15:48:13

1)SQL> purge table test;
    表已清除。
2)SQL> purge table "BIN$Lw6h3tI8SjirrzY38PbKZA==$0";
表已清除。
SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T                BIN$aafxCq9gTbGMvrqnLMP69A==$0 TABLE        2008-09-27:16:02:03
T                BIN$2YtUFN8ZTIqKDKXAPE7HgQ==$0 TABLE        2008-09-27:15:48:13
3) SQL> purge tablespace users;
表空间已清除。
4) SQL> purge tablespace users user hr;
表空间已清除。
Purge recyclebin可以清除执行该命令的用户所能看到的所有recyclebin对象。也就是普通用户能清除属于自己的对象,而sysdba用户则能清除所有recyclebin中的对象。
5)purge index可以清除index对象。
SQL> create table t1(id int);
表已创建。
SQL> create index ix_t1 on t1(id);
索引已创建。
SQL> drop table t1;
表已删除。
SQL> select object_name,original_name,type from recyclebin;
OBJECT_NAME                    ORIGINAL_NAME
------------------------------ --------------------------------
TYPE
-------------------------
BIN$lTA1iH/bTzqqe4/qmpBeJw==$0 T
TABLE

BIN$6G08DJvESIyFDrYA9nO24Q==$0 IX_T1
INDEX

BIN$El5FGgr8RF6MY6HiHlnoRw==$0 T1
TABLE
SQL> purge index ix_t1;

索引已清除。

SQL> select object_name,original_name,type from recyclebin;

OBJECT_NAME                    ORIGINAL_NAME
------------------------------ --------------------------------
TYPE
-------------------------
BIN$lTA1iH/bTzqqe4/qmpBeJw==$0 T
TABLE

BIN$El5FGgr8RF6MY6HiHlnoRw==$0 T1
TABLE
SQL>
5.如何还原RecycleBin中的对象
    前面的试验中已经使用Flashback table来还原过被删除的table.
SQL> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T                BIN$lTA1iH/bTzqqe4/qmpBeJw==$0 TABLE        2008-09-27:17:02:16
T1               BIN$El5FGgr8RF6MY6HiHlnoRw==$0 TABLE        2008-09-27:17:03:25
SQL> flashback table t to before drop rename to t;

闪回完成。

SQL>
 SQL> desc test名称 是否为空? 类型
----------------------------------------- -------- ----------------------------

    ID NUMBER(38)
    如果多次删除同名的table,则使用上面的语句还原的是最后一个被删除的test表,这里也可以使用RecycleBin给table的名字来做还原。
SQL> flashback table "BIN$GoZUqZ6GS222JZdcCtFlHQ==$0" to before drop rename to test
    闪回完成。

分享到:
评论

相关推荐

    oracle 10G 实验手册

    《Oracle 10G 实验手册》:深入解析Oracle闪回功能 Oracle 10G引入了一系列创新功能,其中最为显著的是闪回技术(Flashback)。这一特性在Oracle 9i的基础上进行了重大改进,极大地简化了数据库管理员(DBA)的工作...

    oracle10g新特性

    Oracle 10g 新特性详解 Oracle 10g 是 Oracle 数据库的一个重要版本,它引入了许多创新特性,显著提升了数据库的性能、可用性和管理效率。以下是对这些新特性的详细解析: 1. 回收站(Recyclebin): 在 Oracle 10...

    用oracle10g的flashback闪回功能快速恢复oracle中被删除的表

    ### 使用Oracle 10g的Flashback闪回功能快速恢复被删除的表 #### Oracle 10g Flashback 特性概述 Oracle Database 10g 引入了一项非常强大的特性——Flashback,该特性使得数据库管理员(DBA)能够轻松地恢复误删除...

    Oracle 闪回技术详解

    ### Oracle 闪回技术详解 #### 一、概述 Oracle闪回技术是Oracle数据库中一项非常重要的特性,它主要用于逻辑错误的恢复,而非物理损坏的修复。这项技术可以帮助数据库管理员在遇到逻辑错误的情况下,比如误删数据...

    Linux+Oracle11g+ogg11单向复制

    - 解压另一个软件包: `tar –xvf bo_ggs_Linux_x64_ora10g_64bit.tar` 3. **修改 TNS 文件**: - 在源端和目标端修改 TNS 文件以确保正确连接。 4. **修改 host 文件**: - 更新源端和目标端的主机名解析配置。 ...

    oracle新手入门指导之六—ORACLE回收站详解.txt

    1. **默认设置**:自Oracle 10g版本起,默认情况下Recycle Bin功能是开启的。 2. **对象存储**:删除的表或其他对象不会立即从数据库中永久删除,而是被移动到Recycle Bin中。 3. **访问权限**:只有具有SYSDBA权限...

    oracle 误删除表恢复

    Oracle自10g版本起引入了回收站(Recycle Bin)的概念,这一特性允许用户恢复已删除的对象,包括表、索引等。通过回收站机制,即使一个表被意外删除,也可以轻松将其恢复到删除前的状态。 #### 回收站的工作原理 当...

    基于Oracle闪回详解(必看篇)

    Oracle 9i 开始支持闪回,Oracle10g开始全面支持闪回功能,Oracle11g有所完善,为大家快速的恢复数据,查询历史数据提供了很大的便捷方法。 本文主要对Oracle常用闪回使用做些详细介绍,其中对于不常用的事务和版本...

    SQLSERVER到ORACLE的数据库迁移

    ### SQL Server到Oracle数据库迁移详解 #### 一、引言 随着企业的发展和技术的更新换代,企业常常需要对原有的数据库系统进行迁移或升级。本文将详细介绍如何使用Java语言实现从SQL Server到Oracle数据库的数据...

    oracle快速数据恢复技术研究.pdf

    在Oracle 10g及更高版本中,Flashback Drop功能引入了Recyclebin的概念。Recyclebin就像是一个垃圾桶,保存了被删除的对象,包括表、视图等。当删除一个表时,它并不会立即释放空间,而是将表移到Recyclebin中,...

    oracel闪回机制

    ### Oracle 10g 闪回机制详解 #### 一、引言 在数据库管理过程中,数据的安全性和准确性至关重要。然而,在实际操作中难免会出现误操作的情况,比如错误地更新了数据或不小心删除了重要的表格。传统的事务处理机制...

    oracle goldengate 安装配置手册

    本示例中,SourceDB 运行在 WIN2008 环境下,Oracle 版本为 10g 10.2.0.5.0;TargetDB 同样运行在 WIN2008 下,Oracle 版本为 10g 10.2.0.4.0。 - **2.1.1 设置源库为归档模式** - **目的**:为了支持 OGG 的复制...

    oracle数据库基础

    ### Oracle数据库基础知识详解 Oracle数据库作为一款广泛应用于企业级数据管理的强大工具,其功能之丰富、性能之稳定受到众多企业和开发者的青睐。本文将围绕“Oracle数据库基础”这一主题进行详细解析,旨在为初学...

    oracle 王二暖视频 学习笔记

    #### Oracle 11g网络配置简介 - **TNSNames.ora**:位于客户端,用于定义客户端如何连接到服务器。 - **Listener.ora**:位于服务器端,用于定义监听器的配置,包括监听的地址和端口等信息。 #### 超级管理员登录与...

    oracle数据恢复

    Oracle 10g及更高版本引入了回收站的概念,它可以保存被删除的对象,为用户提供了一种简便的方式来恢复误删除的数据。 ##### 4.1 查看回收站中的对象 ```sql SELECT * FROM user_recyclebin; SELECT * FROM dba_...

    oracle中误删除表后恢复语句(FLASHBACK)

    您可能感兴趣的文章:Oracle误删除表数据后的数据恢复详解Oracle7.X 回滚表空间数据文件误删除处理方法Oracle7.X 回滚表空间数据文件误删除处理方法Oracle7.X 回滚表空间数据文件误删除处理方法误删除$ORACLE_HOME/...

Global site tag (gtag.js) - Google Analytics