Oracle数据回滚
查看某个时间点的表的数据
1 select * from 表名 as of timestamp to_timestamp('2019-04-15 22:00:38', 'yyyy-mm-dd hh24:mi:ss');
查看删改操作修改的数据(DELETE、UPDATE操作)
1 SELECT * 2 FROM 表名 AS OF TIMESTAMP to_timestamp('2019-04-16 21:43:38', 'yyyy-mm-dd hh24:mi:ss') 3 MINUS 4 SELECT * 5 FROM 表名;
恢复删改操作的数据到某个时间点
1 MERGE INTO 表名 a 2 USING (SELECT * FROM 表名 AS OF TIMESTAMP to_timestamp('2019-04-16 21:43:38', 'yyyy-mm-dd hh24:mi:ss') 3 MINUS SELECT * FROM 表名) b 4 ON (a.id = b.id) 5 WHEN MATCHED THEN 6 UPDATE SET a.col = b.col, 7 WHEN NOT MATCHED THEN 8 INSERT VALUES (b.id, b.col);
查看添加操作修改的数据(INSERT)
1 SELECT * FROM 表名
2 MINUS
3 SELECT * FROM 表名 AS OF TIMESTAMP to_timestamp('2019-04-16 21:45:38', 'yyyy-mm-dd hh24:mi:ss');
恢复添加操作的数据到某个时间
1 DELETE FROM 表名 a 2 WHERE EXISTS ( 3 SELECT 1 FROM ( 4 SELECT * FROM 表名 5 MINUS 6 SELECT * FROM 表名 AS OF TIMESTAMP to_timestamp('2019-04-16 21:45:38', 'yyyy-mm-dd hh24:mi:ss')) b 7 WHERE a.id = b.id);
如果相隔时间过长的话,数据就回滚不了了,所以一旦数据出现问题,就要立即进行处理。
参考博客: