Oracle Recycle Bin 回收站详解:DROP TABLE 后还能找回吗?

一、先说结论

Oracle Recycle Bin 主要用于恢复 误执行 DROP TABLE 删除的表

它不是万能回收站,不能恢复所有对象。重点记住:

复制代码
DROP TABLE         看 Recycle Bin
DROP TABLE PURGE   看备份
DELETE / UPDATE    看 Undo
DROP VIEW          看脚本或备份

能不能恢复,不看过了几天,核心看:

复制代码
show recyclebin;
select * from user_recyclebin;
select * from dba_recyclebin;

里还在不在。

只要回收站里还能查到,并且:

复制代码
CAN_UNDROP = YES

一般就可以恢复。


二、回收站能恢复什么?

主要恢复的是:

复制代码
被 DROP 的表
表数据
表相关索引
LOB 段
LOB 索引
嵌套表
IOT 相关段

简单理解:表和表相关的存储对象可以进回收站。


三、回收站不能恢复什么?

以下对象通常不能靠 Recycle Bin 恢复:

复制代码
视图 VIEW
存储过程 PROCEDURE
函数 FUNCTION
包 PACKAGE
序列 SEQUENCE
同义词 SYNONYM
触发器 TRIGGER
TRUNCATE 清空的数据
DELETE / UPDATE 修改的数据
DROP TABLE PURGE 删除的表

特别注意:

复制代码
drop view 视图名;

普通视图不会进入回收站。视图误删后,一般只能从脚本、备份库、Data Pump、版本管理或 DDL 审计中找回定义。


四、查看回收站是否开启

复制代码
show parameter recyclebin;

本次测试环境中,GGMKBAK PDB 下已确认:

复制代码
recyclebin = on

说明回收站功能已开启。


五、普通删除和 purge 删除的区别

1. 普通删除:进入回收站,可恢复

复制代码
drop table 用户名.表名;

特点:

复制代码
进入回收站
表名变成 BIN$... 格式
仍占用原表空间
可以 flashback 恢复

恢复命令:

复制代码
flashback table 用户名.表名 to before drop;

2. purge 删除:彻底删除,不可恢复

复制代码
drop table 用户名.表名 purge;

特点:

复制代码
不进入回收站
直接释放空间
不能通过 flashback table 恢复
只能依赖备份恢复

六、怎么查看是否还能恢复?

DBA/SYS 查看全库回收站:

复制代码
select * from dba_recyclebin;

判断规则:

复制代码
查得到 + CAN_UNDROP = YES  → 可以尝试恢复
查不到                   → 不能靠回收站恢复

当前用户查看自己的回收站:

复制代码
show recyclebin;

或者:

复制代码
select * from user_recyclebin;

七、Recycle回收站保留规则

Oracle Recycle Bin 没有固定保留天数

不是:

复制代码
保留 7 天
保留 30 天
保留 90 天

而是取决于:

复制代码
是否手工 purge
表空间是否紧张
用户 quota 是否紧张
是否 drop table purge
是否 drop user cascade
是否 drop tablespace including contents

一句话:

回收站不是按时间保留,而是按空间和清理动作决定。能不能恢复,主要看 DBA_RECYCLEBIN 里对象还在不在。

可以理解为:**Oracle Recycle Bin 是自动管理的,但不是按固定时间自动清理。**回收站对象进入以后,Oracle 会先保留着;什么时候清掉,主要由空间压力、用户配额压力和人工清理动作决定。

Oracle 会在什么情况下自动清理?

  1. 表空间空间不够时

Oracle 为了给新对象分配空间,可能会自动清理回收站对象。

复制代码
表空间空间紧张
↓
Oracle 需要分配新空间
↓
自动 purge 回收站对象
↓
释放空间
  1. 用户 quota 不够时

如果这个用户后续建表空间不够,Oracle 也可能清理该用户回收站对象来释放 quota。

  1. 人工清理

八、回收站对象属于谁?

回收站按 对象所属 Schema 管理,不是按执行删除命令的人管理。

例如:

复制代码
drop table RB_TEST.RECYCLEBIN_TEST;

即使是 SYS 执行删除,回收站里显示的 owner 仍然是:

复制代码
RB_TEST

所以:

复制代码
show recyclebin;

只能看当前用户自己的回收站。

SYS/DBA 要看其他用户的回收站,要查:

复制代码
select * from dba_recyclebin;

九、常用清理命令---很少用

清理当前用户回收站:

复制代码
purge recyclebin;

清理指定表:

复制代码
purge table 表名;

清理指定表空间回收站对象:

复制代码
purge tablespace 表空间名;

清理全库回收站:

复制代码
purge dba_recyclebin;

生产环境不建议随便执行:

复制代码
purge dba_recyclebin;

因为这是全库级清理,清完后就不能通过回收站恢复了。


十、生产建议

建议保持:

复制代码
recyclebin = on

它可以防止误删表,是一个低成本保护机制。

但需要定期巡检回收站空间占用:

复制代码
select owner,
       ts_name,
       count(*) object_count,
       round(sum(space) * 8 / 1024, 2) space_mb
from dba_recyclebin
group by owner, ts_name
order by space_mb desc;

如果发现某个用户或表空间回收站占用过大,再确认后定向清理。


十一、最终总结

Oracle Recycle Bin 是 DROP TABLE 的临时保护机制,主要用于找回误删表及其相关存储对象。它不能恢复视图、过程、函数、序列等普通非表对象,也不能恢复 DELETE / UPDATE / TRUNCATE 操作。回收站没有固定保留时间,能否恢复不看过了几天,核心看 DBA_RECYCLEBIN 中对象是否仍存在,并且 CAN_UNDROP 是否为 YES。生产环境中,Recycle Bin 可以作为误删表的临时保险,但不能替代 RMAN、Data Pump 或存储备份。

相关推荐
数智化管理手记3 小时前
手工统计指标误差大、效率低?指标管理系统如何告别人工算数痛点?
大数据·运维·数据库·人工智能·云计算
Better Bench9 小时前
WSL2 Ubuntu 中 Claude CLI “command not found” 故障排查与修复
linux·ubuntu·claude·wsl·claudecode
ShiXZ2139 小时前
Redis 常用指令全集:redis-cli 实战速查手册
数据库·redis·缓存
晓子文集9 小时前
Tushare接口文档:期货日线行情(fut_daily)
大数据·数据库·金融数据·量化投资·tushare
实心儿儿9 小时前
Linux —— 进程间关系和守护进程
linux·运维·服务器
FII工业富联科技服务10 小时前
工业设备运维如何Agentic化?拆解Factory Brain的设备运维架构
大数据·运维·人工智能·架构·制造
WA内核拾荒者10 小时前
WhatsApp 账号异常检测的自动化告警系统设计
数据库·python·自动化
Dawn-bit11 小时前
Linux磁盘管理详解
linux·运维·服务器·计算机网络·云计算
RisunJan11 小时前
Linux命令-sftp(SSH 文件传输协议客户端)
linux·运维
极客先躯13 小时前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试