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;本次测试环境中GGMKBAKPDB 下已确认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 回收站对象 ↓ 释放空间2. 用户 quota 不够时如果这个用户后续建表空间不够Oracle 也可能清理该用户回收站对象来释放 quota。3. 人工清理八、回收站对象属于谁回收站按对象所属 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 或存储备份。