欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

oracle闪回技术恢复误操作数据

程序员文章站 2022-06-09 19:29:14
...

操作数据库时,有时会不小心误操作,比如执行了一些有问题的sql,导致破坏了数据,需要恢复;或者有时场景需要,要把整个表恢复到某个时间段。Oracle中可以用闪回技术实现。 1.原数据表的数据 SELECT * FROM jf_test2; 2. 做增删改操作 查询当前时间: SELEC

操作数据库时,有时会不小心误操作,比如执行了一些有问题的sql,导致破坏了数据,需要恢复;或者有时场景需要,要把整个表恢复到某个时间段。Oracle中可以用闪回技术实现。

1.原数据表的数据

SELECT * FROM jf_test2;

oracle闪回技术恢复误操作数据

2.做增删改操作

查询当前时间:SELECTSYSDATEFROM dual;

oracle闪回技术恢复误操作数据

对jf_test2表做增删改后:SELECT * FROM jf_test2;

oracle闪回技术恢复误操作数据

3.确定误操作的大致时间点,取出该时间点jf_test2的数据

CREATETABLE jf_test2Temp AS

SELECT * FROM jf_test2 ASOFTIMESTAMP(to_date('2014-04-01 15:03:00', 'yyyy-mm-dd hh24:mi:ss'));

查询jf_test2Temp

SELECT * FROM jf_test2Temp;

oracle闪回技术恢复误操作数据

4.恢复数据

--恢复误update

UPDATE jf_test2 t

SET t.name = (SELECT tt.name FROM jf_test2temp tt WHERE tt.code = t.code)

WHEREEXISTS(SELECT * FROM jf_test2temp ttt WHERE ttt.code = t.code);

--恢复误delete

INSERTINTO jf_test2(CODE,NAME)

SELECT tt.code,tt.name

FROM jf_test2temp tt

WHERENOTEXISTS(SELECT * FROM jf_test2 t WHERE t.code = tt.code);

--恢复误insert

DELETEFROM jf_test2 t

WHERENOTEXISTS(SELECT * FROM jf_test2temp tt WHERE tt.code = t.code);

再次查询jf_test2看看:SELECT * FROM jf_test2;

oracle闪回技术恢复误操作数据