时间:2021-07-01 10:21:17 帮助过:17人阅读
操作数据库时,有时会不小心误操作,比如执行了一些有问题的sql,导致破坏了数据,需要恢复;或者有时场景需要,要把整个表恢复到某个时间段。Oracle中可以用闪回技术实现。 1.原数据表的数据 SELECT * FROM jf_test2; 2. 做增删改操作 查询当前时间: SELEC
操作数据库时,有时会不小心误操作,比如执行了一些有问题的sql,导致破坏了数据,需要恢复;或者有时场景需要,要把整个表恢复到某个时间段。Oracle中可以用闪回技术实现。
1.原数据表的数据
SELECT * FROM jf_test2;
2.做增删改操作
查询当前时间:SELECTSYSDATEFROM dual;
对jf_test2表做增删改后:SELECT * FROM jf_test2;
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;
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;