recyclebin空间管理(ZT)

本文介绍了Oracle 10g中回收站的功能及其维护方法。回收站能够保存被删除的对象,便于恢复误删的数据。但长期积累可能导致空间占用过多,文中详细说明了如何手动清理回收站,包括删除特定对象、清空整个表空间以及禁用回收站等功能。

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

 

How to maintain Oracle10g Recyclebin?

作者:eygle | English Version 【转载时请以超链接形式标明文章和作者信息及本声明
链接:     

从Oracle10g开始,Oracle引入了flashback drop的新特性,这个新特性,允许你从当前数据库中恢复一个被drop了的对象。在执行drop操作时,现在Oracle不是真正删除它,而是将该对象自动将放入回收站。对于一个对象的删除,其实仅仅就是简单的重令名操作。


所谓的回收站,是一个虚拟的容器,用于存放所有被删除的对象。在回收站中,被删除的对象将占用创建时的同样的空间,你甚至还可以对已经删除的表查询,也可以利用flashback功能来恢复它, 这个就是flashback drop功能。

这个功能虽然可以极大的简化误drop导致的恢复操作,但是长时间的积累可能会导致大量的空间占用(虽然Oracle具有自己的清理机制),很多时候我们需要手工介入去清理回收站。本文主要介绍清理回收站的几种方法.

 1.大量累计的空间占用

Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 
Connected as SYS

SQL> col owner for a12
SQL> select owner,object_name,CREATETIME,DROPTIME from dba_recyclebin
  2  order by droptime
  3  /
OWNER        OBJECT_NAME                    CREATETIME          DROPTIME
------------ ------------------------------ ------------------- -------------------
COMMON       BIN$AHsQ+pi+Kb/gRAADumkBdQ==$0 2005-08-29:16:42:19 2005-09-11:15:36:17
COMMON       BIN$AHsQ+pi9Kb/gRAADumkBdQ==$0 2005-08-29:16:42:19 2005-09-11:15:36:17
PDA          BIN$AdEb4zqqUcTgRAADumkBdQ==$0 2005-09-05:10:31:01 2005-09-28:15:40:39
......
BJLAIS_RUN   BIN$BtkGRT0dSwfgRAADumkBdQ==$0 2005-11-30:10:54:07 2005-12-01:16:13:17
BJLAIS_RUN   BIN$BtkGRT0cSwfgRAADumkBdQ==$0 2005-11-30:10:54:07 2005-12-01:16:13:17
750 rows selected
SQL> 

2.不同用户在回收站的对象

SQL> select owner,count(*) from dba_recyclebin group by owner;   
OWNER                  COUNT(*)
-------------------- ----------
BJLAIS_RUN                   44
COMMON                        8
MMSBLOG                     618
MMSHAWA_RUN                   2
PDA                           8
RING_RUN                     70
6 rows selected.

3.我们可以指定删除某些特定对象

SQL> purge table common.T_SERVICE_CODE_INFO;

Table purged.

4.指定清除某个表空间的所有回收站对象

SQL> purge tablespace common;
Tablespace purged.
SQL> select owner,count(*) from dba_recyclebin group by owner;   
OWNER                  COUNT(*)
-------------------- ----------
BJLAIS_RUN                   44
MMSBLOG                     618
MMSHAWA_RUN                   2
PDA                           8
RING_RUN                     70

5.以SYSDBA身份可以清除所有回收站对象

SQL> purge dba_recyclebin;

DBA Recyclebin purged.

SQL> select owner,count(*) from dba_recyclebin group by owner;  

no rows selected

6.禁用recyclebin

 

如果我们不希望使用Oracle的recyclebin,可以通过参数禁用这个特性。

在Oracle10gR1中,通过修改一个隐含参数:_recyclebin 为False可以禁用这个特性:

SQL> set linesize 132
SQL> column name format a30
SQL> column value format a25
SQL> select
  2    x.ksppinm  name,
  y.ksppstvl  value,
  3    y.ksppstdf  isdefault,
  4    5    decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE')  ismod,
  6    decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE')  isadj
  7  from
  8    sys.x$ksppi x,
  9    sys.x$ksppcv y
 10  where
 11    x.inst_id = userenv('Instance') and
 12    y.inst_id = userenv('Instance') and
 13    x.indx = y.indx and
 14    x.ksppinm like '%&par%'
 15  order by
 16    translate(x.ksppinm, ' _', ' ')
 17  /
Enter value for par: recyclebin
old  14:   x.ksppinm like '%&par%'
new  14:   x.ksppinm like '%recyclebin%'
NAME                           VALUE                     ISDEFAULT ISMOD      ISADJ
------------------------------ ------------------------- --------- ---------- -----
_recyclebin                    TRUE                      TRUE      FALSE      FALSE
1 row selected.

在Oracle10gR2中,recyclebin变成了一个常规参数,可以在session/system级动态修改:

[oracle@danaly ~]$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Dec 12 15:34:56 2005
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
SQL> show parameter recyclebin 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      on
SQL> alter session set recyclebin=off;
Session altered.
SQL> alter session set recyclebin=on
  2  /
Session altered.
SQL> alter system set recyclebin=off;
System altered.
SQL> alter system set recyclebin=on;
System altered.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/228190/viewspace-1056/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/228190/viewspace-1056/

<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、付费专栏及课程。

余额充值