Oracle回收站(recyclebin)

本文介绍了Oracle数据库中的回收站功能,包括如何启动和关闭回收站、查看回收站内容、还原及清空回收站的方法,并提供了注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们都比较熟悉windows中的回收站,文件删除后放到回收站里还可以再复原.Oracle回收站的原理完全一样,只是实现的细节方面有些差异.另外回收站中只能回收表和相关的对象包括索引、约束、触发器、嵌套表、大的二进制对象(LOB)段和LOB索引段.从Orace 10g开始有回收站的功能.

 

1.回收站启动和关闭

 

回收站默认是开启的.不过我们可以通过参数recyclebin来关闭和开启.

如果只是针对每个session可以通过alter session set recyclebin=off; 和 alter session set recyclebin=on;来关闭和开启

如果是针对所有session可以通过修改系统参数recyclebin来实现,不过这里要注意10g和11g有点不一样,它们的参数类型不同

10g可以用:alter system set recyclebin=off; 和alter system set recyclebin=on;来关闭和开启

11g可以用:alter system set recyclebin=off deferred; 和alter system set recyclebin=on deferred;来关闭和开启

补充:我们来简单的了解下Oracle参数类型

Oracle参数信息可以通过视图v$parameter查看,其中有一列issys_modifiable表示参数类型,有immediate,false,deferred三种,其中false表示是静态参数,只要当instance重新启动时才会生效,其他两种是动态参数,immediate表示修改参数后立即生效,deferred表示修改后要等下一个session才能生效,修改时已经连接的session是不会生效的.在用alter修改参数时如果是false或immediate一般可以不写,如果是deferred则要写

10g: select   ISSYS_MODIFIABLE  from v$parameter where name = 'recyclebin';的结果是immediate

11g:  select   ISSYS_MODIFIABLE  from v$parameter where name = 'recyclebin';的结果是deferred

 

2.查看回收站内容

 

select * from user_recyclebin;或select * from recyclebin;查看当前用户所drop的对象(里面有对象之前的名字和drop之后的名字)

select * from dba_recyclebin;查看所有用户drop掉的对象

其实当一个对象drop后,并且开启了回收站功能.它并没有真正被删除,实际上只是修改了一下名字,我们用select * from user_objects where type= 'TABLE'还能查到.只是它的名字有点怪,例如BIN$qAUuckGyd3TgQKjAFAFTAg==$0,它的命名规范是BIN$unique_id$version  其中BIN代表RecycleBin, unique_id是数据库中该对象的唯一标志,26个字符长度 ,version表示该对象的版本号.

 

3.还原回收站内容

 

假如有表test被drop,drop后的object_name是BIN$qAUuckGyd3TgQKjAFAFTAg==$0

可以用flashback table "BIN$qAUuckGyd3TgQKjAFAFTAg==$0"  to before drop ;(记得名字加双引号)

或者flashback table test  to before drop ;来还原.不过假如drop掉一个表test,再新建一个表test,然后再drop.那么flashback table test  to before drop只能还原最后被drop掉的表test.最先drop掉的表还原时会出错,因为表名不能重名.所以必须改名flashback table test  to before drop rename to test2

 

4.清空回收站

 

如果一次只清空一个表,可以用PURGE table  test 或PURGE table "BIN$qAUuckGyd3TgQKjAFAFTAg==$0";

如果一次清空所有的可以用PURGE recyclebin 或者PURGE dba_recyclebin

还原时是只能一次还原一个表,不能像清空一样一次还原所有表

 

5,注意事项

 

如果表是在system表空间下面则不能使用回收站的功能,不知道为啥有这限制啊

如果表空间快满时系统会自动的去清空回收站中一部分内容,先清空最早drop的对象

 

<think>我们正在讨论Oracle回收站Recycle Bin)功能。根据引用,回收站Oracle10g引入的特性,用于存储被删除的对象(如表、索引等),这些对象以"BIN$"开头命名,并且仍然占用物理空间。回收站的主要目的是为了防止意外删除操作,允许用户恢复被删除的对象。用户现在想查询`USER_RECYCLEBIN`视图的内容并了解其作用。###步骤:1.**了解`USER_RECYCLEBIN`视图**:-根据引用[3],`USER_RECYCLEBIN`视图允许用户查看自己删除的对象(即当前用户拥有的被删除对象)。为了方便,还有一个同义词`RECYCLEBIN`,可以直接使用。-这个视图包含当前用户删除的对象信息,如对象名(系统生成的回收站名称)、原始名称、类型、删除时间等。2.**查询`USER_RECYCLEBIN`**:-使用简单的`SELECT`语句即可查询当前用户的回收站内容。-注意:只有被删除的对象才会出现在这里,而且这些对象在回收站中会一直保留直到被显式清除(`PURGE`)或者由于空间压力被自动清除。3.**回收站的作用**:-防止误操作:当用户删除表时,表并没有被立即删除,而是被重命名并放入回收站,这样用户就有机会恢复。-恢复对象:使用`FLASHBACKTABLE ...TO BEFOREDROP`命令可以恢复被删除的表。4.**注意事项**:-回收站功能默认是开启的(引用[1]中显示`recyclebin=on`)。-回收站中的对象仍然占用空间,因此需要定期清理或恢复。 ###查询示例:```sql--查询当前用户回收站中的所有对象SELECT* FROMUSER_RECYCLEBIN;--或者使用同义词SELECT* FROMRECYCLEBIN;--查询特定表(例如原始表名为EMPLOYEES)在回收站中的信息SELECT object_name,original_name, type, droptimeFROMUSER_RECYCLEBINWHERE original_name ='EMPLOYEES';``` ###关键列说明(常见列): -`OBJECT_NAME`:回收站中对象的系统生成名称(以BIN$开头)。- `ORIGINAL_NAME`:被删除对象的原始名称。- `TYPE`:对象类型(如TABLE,INDEX等)。 -`DROPTIME`:删除时间。-还有其他列如`TS_NAME`(表空间名)、`CREATETIME`(原始对象的创建时间)等。 ###回收站管理操作:1.**恢复表**:```sqlFLASHBACK TABLEoriginal_table_name TOBEFORE DROP;--或者使用回收站中的名称FLASHBACKTABLE "BIN$......" TOBEFORE DROP RENAME TOnew_table_name;```2.**清空回收站**:```sql--清空当前用户的整个回收站PURGERECYCLEBIN;--或者PURGE USER_RECYCLEBIN;--清除特定对象PURGE TABLEoriginal_table_name;--或者PURGE TABLE"BIN$... ...";``` ###引用说明: 根据引用[4],回收站在非归档模式下也能工作,并且可以用于恢复误删的表,即使没有备份(但前提是回收站中的对象还没有被清除)。###总结:- `USER_RECYCLEBIN`视图提供了当前用户被删除对象的信息,是恢复误删对象的重要工具。 -回收站功能为数据恢复提供了一层保障,但并不是永久保留,因此重要数据仍需备份。 ---§§相关问题§§1.如何恢复Oracle回收站中被删除的表? 2.如何彻底删除Oracle回收站中的对象以释放空间? 3. Oracle回收站中的对象占用空间吗?如何管理?4.Oracle回收站功能默认开启吗?如何关闭?</think>### Oracle 回收站USER_RECYCLEBIN)详解 #### 一、回收站核心功能 当执行 `DROP TABLE` 操作时,Oracle 不会立即删除表结构,而是将其重命名并移动到回收站(需满足条件): 1. **安全机制**:防止误删除操作导致数据永久丢失[^1] 2. **空间保留**:被删除对象仍占用原始表空间,直到被永久清除[^2] 3. **对象保留范围**:支持表、索引、约束等关联对象[^2] #### 二、USER_RECYCLEBIN 视图关键字段 ```sql SELECT object_name, -- 回收站中的系统命名(BIN$开头) original_name, -- 原始对象名 type, -- 对象类型(TABLE/INDEX等) droptime, -- 删除时间戳 ts_name, -- 所属表空间 can_undrop -- 是否可恢复 FROM user_recyclebin; ``` #### 三、关键操作示例 1. **查看所有可恢复对象**: ```sql SELECT original_name AS "被删表名", droptime AS "删除时间" FROM user_recyclebin WHERE type = 'TABLE'; ``` 2. **恢复特定表**: ```sql FLASHBACK TABLE 原始表名 TO BEFORE DROP; -- 或使用回收站名称 FLASHBACK TABLE "BIN$zAbc123...==$0" TO BEFORE DROP RENAME TO 新表名; ``` 3. **永久删除回收站对象**: ```sql PURGE TABLE 原始表名; -- 清除特定表 PURGE RECYCLEBIN; -- 清空当前用户回收站 ``` #### 四、回收站启用条件 1. 参数必须为 `ON`(默认开启): ```sql SHOW PARAMETER RECYCLEBIN; -- 输出:recyclebin string ON ``` 2. 表空间需满足: - 非 SYSTEM 表空间 - 表空间未启用 `RECYCLEBIN=OFF`[^1][^2] #### 五、典型应用场景 1. **误删表恢复**(如引用[4]案例): - 发现误删后立即查询 `USER_RECYCLEBIN` - 使用 `FLASHBACK TABLE` 恢复 2. **空间回收管理**: ```sql -- 检查回收站占用空间 SELECT ts_name, SUM(space) / 1024 / 1024 AS "占用空间(MB)" FROM user_recyclebin GROUP BY ts_name; ``` > ⚠️ **注意**: > - 回收站对象在表空间不足时会被自动清除 > - `DROP USER ... CASCADE` 会绕过回收站直接删除 > - 索引恢复后自动关联原表[^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值