单表记录回滚到指定时间,在进行数据回滚前,也可以通过命令查看回滚时间点前的数据情况,语句如下:
select * from 表名 as of timestamp to_timestamp('2019-11-26 15:02:00', 'yyyy-mm-dd hh24:mi:ss');
接下来就是进行数据回滚操作了。
(1)开启闪回,如果不开启无法进行闪回
alter table 表名 enable row movement;
(2)闪回表数据到某个时间点
flashback table 表名 to timestamp TO_TIMESTAMP('2019-11-26 15:02:00', 'yyyy-mm-dd hh24:mi:ss');
(3)关闭闪回
alter table 表名 disable row movement;
此外还可使用一下语句恢复数据,但存在一些不足地方,当表结构修改了以后,在表修改之前的数据不可恢复
语句如下:
MERGE INTO B_MERGE A USING (SELECT * FROM B_MERGE AS OF TIMESTAMP to_timestamp('2019-11-26 14:39:59', 'yyyy-mm-dd hh24:mi:ss') MINUS SELECT * FROM B_MERGE) C ON (A.id=C.id)
WHEN MATCHED THEN
UPDATE SET A.YEAR=C.YEAR
WHEN NOT MATCHED THEN
INSERT(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR);
commit;
‘’“查询语句A” MINUS “查询语句B”‘ :表示得到的是查询语句A查到的记录但不存在于查询语句B的记录(查询的是同一个表),当“ON (A.id=C.id)”条件满足则执行更新,不满足就执行插入。