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

