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); 

如果相隔时间过长的话,数据就回滚不了了,所以一旦数据出现问题,就要立即进行处理。

参考博客:

https://blog.csdn.net/w8827130/article/details/89303087

猜你喜欢

转载自www.cnblogs.com/nemowang1996/p/12668292.html