Maison >base de données >tutoriel mysql >oracle闪回技术恢复误操作数据

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

WBOY
WBOYoriginal
2016-06-07 15:25:29888parcourir

操作数据库时,有时会不小心误操作,比如执行了一些有问题的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闪回技术恢复误操作数据

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn