oracle 回收站

从Oracle 10g开始,引入了回收站(RecycleBin)概念,作为误删表的恢复机制,避免了复杂的数据库还原操作。回收站与表空间共用存储区域,对象在DROP后会存留于此,直到空间不足或被手动清理。通过闪回功能,可以直接恢复被删除的表,简化了数据库管理。

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

回收站概念

从ORACLE 10g开始,引入了一个叫回收站(Recycle Bin)的概念。它的全称叫Tablespace Recycle
Bin。回收站实际是一个逻辑容器(逻辑区域),原理有点类似于WINDOW系统的回收站。它以表空间中现有已经分配的空间为基础,而不是从表空间上物理划出一个固定区域用作回收站。这意味着回收站和表空间中的对象共用存储区域、系统没有给回收站预留空间。因此,当表被DROP后,如果可用空间充足,并且没有对回收站进行清理,那么被DROP掉的对象会一直存在回收站中,但是如果可用空间紧张的情况下,数据库会根据先进先出的顺序覆盖Recycle
Bin中的对象。所以回收站机制也不是百分百的保险机制。另外从原理上来说它就是一个数据字典表,放置用户Drop掉的数据库对象信息。用户进行Drop操作的对象并没有真正被数据库删除,仍然会占用空间。除非是由于用户手工进行Purge或者因为存储空间不够而被数据库清掉。数据库有了这样的功能,能够减少很多不必要的麻烦。当用户、开发人员、甚至DBA误操作删除了表,那么我们不必还原整个数据库或表空间,直接使用ORACLE
10g的闪回(FLASHBACK,闪回)功能来还原被删除的表。这样我们就能避免大量的人工误操作。这是一个对DBA相当有用的功能。

回收站这个特性主要的好处就是在误删除一个表时有一个恢复机制,不必通过数据库还原来实现。避免大量的人工误操作。以及数据库还原等复杂的操作。让数据库的管理、维护更加简单、方便。

管理回收站
开启、关闭回收站
首先你可以通过命令查看数据库是否开启了回收站机制, 如下所示 VALUE= ON表示开启了回收站机制。OFF则表示回收站机制关闭。

SHOW PARAMETER RECYCLEBIN;
SQL> SHOW PARAMETER RECYCLEBIN;

NAME              TYPE        VALUE
--------     ----------- ----------
recyclebin      string         ONSQL> SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='recyclebin';

NAME                      VALUE
----------------- --------------------
recyclebin                  on
可以通过设置初始化参数recyclebin启用或禁用回收站功能。当然也可以用命令关闭回收站
SQL> ALTER SYSTEM SET RECYCLEBIN=OFF;
System altered.
SQL> ALTER SESSION SET RECYCLEBIN=OFF;
Session altered.
SQL> SHOW PARAMETER RECYCLEBIN;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      OFF

可以用命令开启回收站
SQL> ALTER SYSTEM SET RECYCLEBIN=ON;
System altered.
SQL> ALTER SESSION SET RECYCLEBIN =ON;
Session altered.
SQL> SHOW PARAMETER RECYCLEBIN;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      ON

oracle10g,在pl/sql中选中删除后会出现类似:BIN$nJ5JuP9cQmqPaArFei384g==$0的表。
1.查看回收站
select * from user_recyclebin;

2.清空回收站
purge recyclebin;

3.清空回收站中的某个表
--如下方式删除会提示:SQL命令未正确结束。
purge table BIN$/UpBuh+LQ9yZGN95BFsk5Q==$0
--正确写法如下:
 ```sql
    purge table "BIN$/UpBuh+LQ9yZGN95BFsk5Q==$0";

–如下方式删除会提示:SQL命令未正确结束。

drop table BIN$/UpBuh+LQ9yZGN95BFsk5Q==$0
sql
--而如下这样写,则会提示:无法对回收站中的对象执行DDL/DML。
drop table "BIN$0iJ7/rWFQrSGdZexvGv3qQ==$0"

4.恢复回收站
FLASHBACK TABLE "BIN$0iJ7/rWFQrSGdZexvGv3qQ==$0" TO BEFORE DROP
这是10g 的新特性
在10g中,如果启用flash drop功能,在drop表时,数据库不会直接删除,而是将其放在回收站中,当空间出现短缺时,才会逐渐回收这部分空间。
bin$表示表放在了回收站,你想要的话还可以找回来
删除的话一个方法是直接删delete tanle bin$.....;
另一种方法就是使用 purge table table_name;
drop table时, 不产生他们,修改你的drop语句
写成 :
DROP TABLE TABLE_NAME PURGE ;

有几种方法可以手动控制回收站
1,。如果在删除名为 TEST 的特定表之后需要从回收站中清除它,可以执行
PURGE TABLE TABLE_NAME;
或者使用其回收站中的名称:
PURGE TABLE "BIN$04LhcpndanfgMAAAAAANPw==$0";

2,要从回收站中永久删除索引
PURGE INDEX IN_TEST1_O1
3,清除表空间 USERS 的回收站中的所有对象
PURGE TABLESPACE USERS;
4,只清除特定的用户
PURGE TABLESPACE USERS USER SCOTT;
5,要释放整个回收站占用的空间
PURGE RECYCLEBIN;

重要:
PURGE RECYCLEBIN只是清除当前用户回收站中的对象,DBA_RECYCLEBIN下的的对象并没有删除,如果你要清除当前数据库回收站的对象,必须使用下面命令(DBA权限) PURGE DBA_RECYCLEBIN

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值