#回收站对象闪回
数据库回收站类似于操作系统回收站的机制,用于暂时存储被删除的表、索引等数据库对象。基于回收站,可以在删除数据库对象时避免永久丢失数据,在回收站被清理前随时可以快速高效地恢复误删除对象。
回收站依附于表空间,回收站开启后,在不指定PURGE关键字删除某些对象时,系统会将其放入当前表空间的回收站中(对象名称被修改为BIN开头的系统生成字符串)。
# 支持的对象
回收站仅适用于HEAP表,删除TAC表、LSC表以及外部表则始终表现为彻底删除,回收站所支持的对象及其删除表现如下表所示。
| 目标对象 | 操作 | 表现 |
|---|---|---|
| SYSTEM表空间中的HEAP表 | - | 目标表及其子对象始终不进入回收站(表现为彻底删除)。 |
| 其他表空间中未创建全文索引的HEAP表 | DROP TABLE(未指定PURGE) | 目标表及其分区、索引、基于该表的触发器均进入回收站。 |
| TRUNCATE TABLE | 目标表及其分区、索引、基于该表的触发器均进入回收站。 | |
| ALTER TABLE TRUNCATE PARTITION | - 若目标分区位于SYSTEM表空间,不进入回收站。 - 若目标分区位于其他表空间,进入回收站。 | |
| 其他表空间中创建了全文索引的HEAP表 | - | 目标表及其子对象始终不进入回收站(表现为彻底删除)。 |
Note:
使用DROP语句删除某个HEAP表的子对象(例如索引、触发器等),该子对象不会进入回收站。
若执行上述操作时,表空间已满或临近满容量,目标对象及其数据即使进入回收站,也可能很快就会被清理。
# 回收站对象恢复规则
闪回恢复回收站对象时,规则如下:
若待恢复对象为被DROP的表,需确认原表名是否被占用,若被占用则需在闪回的同时进行重命名,否则会报错。
若待恢复对象已执行过多次DROP操作,每一次FLASHBACK只会逆序恢复一次DROP的数据,即首次FLASHBACK只恢复最后1次DROP操作。若前1次FLASHBACK恢复时未重命名(占用原表名),则后续FLASHBACK时则无法再继续使用原名称恢复。
若待恢复对象已执行过多次TRUNCATE操作,每一次FLASHBACK只会逆序恢复一次TRUNCATE的数据,即首次FLASHBACK只恢复最后1次TRUNCATE操作。
若TRUNCATE后表/分区中已插入新数据,闪回后该类新数据将会被放入回收站中。
各类对象始终遵循从属关系:
无法单独恢复通过TRUNCATE整个表进入回收站的分区,无法单独恢复通过TRUNCATE一级分区进入回收站的二级分区。
无法单独恢复子对象(索引、触发器等),在恢复表/分区时,会自动恢复未被清理的相关子对象。

