一、基于undo的表恢复
1、被恢复的表必须启用row movement
用于控制是否允许修改列值所造成的记录移动
enable/disable
SQL> selectrow_movement from dba_tables where table_name='FLASH_TBL';
ROW_MOVE
--------
ENABLED
2、注意DDL的影响。
修改并提交过数据后,对表做了DDL操作,如:
Drop/modify 列。
move表
drop分区
Truncatetable/partition
这些操作会令undo表空间的撤销数据失效,对于执行过这些操作的表应用flashback query会触发ORA-01466错误,另外一些表结构修改语句,虽然可能不会影响到undo表空间的撤销记录,但有可能出现因表结构修改,导致UNDO中重做记录无法应用的情况。
如:对操作的表增加了新的约束,而flashback query查询出来的undo 记录已经不符合新建的约束条件,这个时候直接恢复显然不可能成功,最好先disable约束或逻辑修改数据,然后执行恢复。
3、flashback table实际上也是dml操作(从该操作在被操作的表上加dml锁可以确定),因此需要注意triggers对其的影响。默认执行时会disable与其表相关的triggers,如果希望期间可用,需要flashback table时附加enable triggers
4、索引会自动维护,但是统计信息不回恢复到指定的时间点。
5、不支持:聚簇表、物化视图、高级队列表,系统表,远程表,对象表,嵌套表,表分区或子分区。
二、基于recycle bin的表恢复
1、flashback drop 不能恢复参照完整性。主外键约束等需要手工处理。
2、操作的表必须是存在本地管理的表空间中。不能恢复数据字典管理的表空间中删除的表。
3、索引、约束等关联对象名称不回自动恢复成删除前的名称,而是系统自动生成的名称。需要手工改名。位图索引不能被恢复,因为删除表时位图索引不会放入recycle bin中。
4、删除表时,依赖它的物化视图会同时删除,但是物化视图不放入recycle bin中,因此执行
Flashback table to before drop时,也不能恢复依赖其的物化视图,需要dba手工创建。
5、数据文件空间不足时,oracle会首先清理被删除表的索引,所以flashback table to
Before drop后发现恢复出来的数据缺少索引可能是正常的,说明显然错过了最佳的回复时机。
6、flashback drop支持多个表,用逗号隔开,但是记住单个flashback table 是在同一个事务中,因此这些表恢复时要么都成功,要么都失败。
7、flashback drop只能恢复drop删除的表,如果通过truncate命令清空表中的数据,不过是flashback table还是 flashback query都无能为力。唯一恢复truncate的flashback特性是flashbackdatabase。