watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

         题目         部分

在Oracle中,DELETE了一条数据并且提交了,该如何找回?


     
         答案部分          



在Oracle中可以通过闪回技术来找回已经删除并且提交了的数据。当然,除了闪回技术外还可以采用LogMiner(使用该工具可以轻松获得Redo日志文件包含归档日志文件中的具体内容)进行日志挖掘,找出其撤销SQL并执行就可以找回DELETE语句删除的数据。

下面的示例是基于闪回原理找回数据:

 1SQL> SET TIMING ON;
 2SQL> SET SERVEROUTPUT ON;
 3SQL> SET SQLBLANKLINES ON;
 4SQL> SET LINESIZE 800
 5SQL> SET TIME ON;
 611:40:54 SQL> SELECT * FROM OLD_T;
 7        ID NAME
 8---------- --------------------
 9         1 LI
10已用时间:  00: 00: 00.02
1111:41:05 SQL> UPDATE OLD_T SET NAME='LIH' WHERE ID=1;
12已更新 1 行。
13已用时间:  00: 00: 00.01
1411:41:16 SQL> commit;
15提交完成。
16已用时间:  00: 00: 00.03
1711:41:20 SQL> UPDATE OLD_T SET NAME='LIHU' WHERE ID=1;
18已更新 1 行。
19已用时间:  00: 00: 00.01
2011:41:31 SQL> commit;
21提交完成。
22已用时间:  00: 00: 00.01
2311:41:34 SQL> UPDATE OLD_T SET NAME='LIHUA' WHERE ID=1;
24已更新 1 行。
25已用时间:  00: 00: 00.01
2611:41:39 SQL> COMMIT;
27提交完成。
28已用时间:  00: 00: 00.01
2911:41:43 SQL> UPDATE OLD_T SET NAME='LIHUAR' WHERE ID=1;
30已更新 1 行。
31已用时间:  00: 00: 00.02
3211:42:24 SQL> COMMIT;
33提交完成。
34已用时间:  00: 00: 00.01
3511:42:26 SQL> SELECT * FROM OLD_T;
36        ID NAME
37---------- --------------------
38         1 LIHUAR
39已用时间:  00: 00: 00.02
40------查询5分钟之前的数据
4111:45:53 SQL> SELECT * FROM OLD_T AS  OF TIMESTAMP SYSDATE-5/24/60 WHERE ID=1;
42        ID NAME
43---------- --------------------
44         1 LI
45已用时间:  00: 00: 00.02
46------查询第一个事务提交,第二个事务还没有提交时的数据
4711:55:13 SQL> SELECT * FROM OLD_T AS  OF TIMESTAMP TO_TIMESTAMP('2016-04-14 11:41:22','YYYY-MM-DD HH24:MI:SS') WHERE ID=1;
48        ID NAME
49---------- --------------------
50         1 LIH
51已用时间:  00: 00: 00.02
52------查询第二个事务提交,第三个事务还没有提交时的数据
5312:23:33 SQL> SELECT * FROM OLD_T AS  OF TIMESTAMP TO_TIMESTAMP('2016-04-14 11:41:38','YYYY-MM-DD HH24:MI:SS') WHERE ID=1;
54        ID NAME
55---------- --------------------
56         1 LIHU
57已用时间:  00: 00: 00.01
     

可以看到提交了的数据,利用闪回仍然可以查到之前的数据,从而来恢复到之前的数据状态。当然,除了闪回技术外还可以采用LogMiner(使用该工具可以轻松获得Redo日志文件包含归档日志文件中的具体内容。)进行日志挖掘找出其撤销的SQL语句执行就可以找回DELETE并且提交了的数据。