【oracle】oralce 恢复表数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xxxxxx91116/article/details/22410081

今天在做项目的时候,改错了oracle数据库表里面的一个字段,真的吓到了一下,要是恢复不过来就悲剧了,肯定要被批。。。
好在成功的恢复了回来,下面给出恢复方法。


情景:在Linux下,假设有一个表TABLE_A,里面有一个字段name,我们把name字段修改了,却发现改错了,想恢复到30分钟前的样子。


第一步:将30分钟前数据恢复到临时表QUICK_TABLE

执行:

CREATE TABLE QUICK_TABLE AS select * from TABLE_A  AS OF TIMESTAMP  (SYSTIMESTAMP - INTERVAL '30' MINUTE);

这个时候,就会产生一个表QUICK_TABLE,里面保存了30分钟前TABLE_A的数据。

这一步的来源是:http://blog.csdn.net/yongde1987/article/details/8285711


第二步:调整输出格式

执行

1.set head off
2.set linesize 160(根据自己sql insert语句长度调整)
3.set newpage none

上面3句是为了在终端显示的时候格式更好


第三步:将QUICK_TABLE里面的数据导出成为insert 语句

比如我的是:

1.spool /root/god_bless.log  (将insert语句写入到/root/god_bless.log这个文件)
2.select 'insert into TABLE_A (mag,name,seed,flag,length) ' || 'values('||''''|| mag ||''''|| ',''' || name ||''''|| ','''|| seed || ''''||',''' || flag ||''''|| ',''' || length || ''''||');' a  from  QUICK_TABLE;(生成insert语句)
3.spool off

这一步的来源是:

http://blog.csdn.net/striveman/article/details/1854327


第四步:将TABLE_A清空

delete from TABLE_A;


第五步:修改/root/god_bless.log文件

新打开一个终端,输入:vim /root/god_bless.log,将文件中非insert语句删除,因为spool会将执行的语句也记录下来,这里可能要删除第一行和最后几行的非insert语句


第六步:执行文件中的insert语句恢复到半小时前:

1.@/root/god_bless.log
2.commit;



ok!恢复到30分钟前了

猜你喜欢

转载自blog.csdn.net/xxxxxx91116/article/details/22410081