场景:假设想闪回scott.emp1表,因为用户错误地更新了数据。
|
--1. 连接SQL*Plus到目标数据库并识别当前的SCN. -- 不能回滚FLASHBACK TABLE的操作,但可以执行另一个FLASHBACK语句,指定时间刚好在当前时间之前。 SELECT CURRENT_SCN FROM V$DATABASE; --2. 识别你想还原表到的时间、SCN、还原点. 如果已经创建了还原点,则可以查看可用的还原点 SELECT NAME, SCN, TIME FROM V$RESTORE_POINT; --3. 确定有足够的undo数据存在,来回退表到特定的目标时间.如果undo_retention初始化参数被设置了,并且undo保留期保证被开启 -- 可以通过下面的查询来确定有多少undo数据被保留了 SELECT NAME, VALUE/60 MINUTES_RETAINED FROM V$PARAMETER WHERE NAME = 'undo_retention'; --4. 对于打算使用FLASHBACK TABLE回退的所有的对象开启行移动 ALTER TABLE table ENABLE ROW MOVEMENT; --5. 确定你打算闪回的表是否对其它表有依赖,如果依赖存在,则要决定是否也闪回这些表. SELECT t2.owner, t2.table_name FROM all_constraints t1, all_constraints t2 WHERE t1.r_owner = t2.owner AND t1.r_constraint_name = t2.constraint_name AND t1.owner = schema_name AND t1.table_name = table_name AND t1.constraint_type='R';
--6. 对要闪回的对象执行FLASHBACK TABLE操作 --6.1 闪回到还原点 FLASHBACK TABLE hr.temp_employees TO RESTORE POINT temp_employees_update; --6.2 闪回到指定的SCN FLASHBACK TABLE hr.temp_employees TO SCN 123456; --6.3 闪回到指定的时间戳.注意时间戳到SCN的映射不问题精确的.使用时间戳来执行FLASHBACK TABLE语句,闪回到的时间最多会有3秒钟的差异. -- 如果需要精确的时间点,则使用SCN而不是时间。 FLASHBACK TABLE hr.temp_employees TO TIMESTAMP TO_TIMESTAMP('2007-10-17 09:30:00', 'YYYY-MM-DD HH:MI:SS'); --7. 查询表检查数据 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1095800/ ,如需转载,请注明出处,否则将追究法律责任。