1.未提交 直接 rollback
2.已提交
步骤 查询指定时间内修改前数据库数据:
-- 查询误操作前的数据(例如 10 分钟前)
SELECT * FROM 表名
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE)
WHERE 条件;
-- 将数据恢复(需确保有足够权限)
FLASHBACK TABLE 表名
TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);
但是如果出现问题请 直接允许行移动
-- 启用表的行移动功能(需有 ALTER TABLE 权限)
ALTER TABLE 表名 ENABLE ROW MOVEMENT;
-- 闪回到指定时间点(例如 10 分钟前)
FLASHBACK TABLE 表名
TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);
-- 或闪回到特定 SCN(系统变更号)
FLASHBACK TABLE 表名 TO SCN <scn_number>;
完整示例:
-- 1. 检查当前行移动状态
SELECT table_name, row_movement
FROM user_tables
WHERE table_name = 'YOUR_TABLE';
-- 2. 启用行移动
ALTER TABLE your_table ENABLE ROW MOVEMENT;
-- 3. 执行闪回(例如恢复到 15 分钟前)
FLASHBACK TABLE your_table
TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '15' MINUTE);
-- 4. 验证数据是否恢复
SELECT * FROM your_table WHERE ...;
-- 5. 可选:禁用行移动
ALTER TABLE your_table DISABLE ROW MOVEMENT;