oracle 数据恢复(恢复表 或数据)
作为一个程序猿 , 对于任何数据的操作都要小心谨慎, 不可避免出现失误,测试环境还好,生产环境就要脑壳疼了 。
最怕菜鸟操作生产环境 出现这种问题 不过万幸 从oracle10 开始 默认打开了回收站 (recyclebin) 如果删除时间不长 或者说 回收站的空间 够用的情况下, 肯定可以找回
第一种方式:
对于误删表:
一般没有仇恨 ,使用PURGE永久删除选项, 都可以从recyclebin恢复回来
执行步骤:
1、从recyclebin里查询删除的动作
select * from recyclebin
2、执行表的恢复
flashback table 表名 to before drop;
对于表中误删数据,可以通过这种方式查找:
执行步骤:
1 查询是否存在删除数据
select * from OA_OT_DOCCHECKUSER_LOGS as of timestamp to_timestamp('2018-05-14 10:20:11','yyyy-mm-dd hh24:mi:ss');
2 如果存在数据 可以执行退回动作
flashback table OA_OT_DOCCHECKUSER_LOGS to timestamp to_timestamp('2018-05-14 10:20:11','yyyy-mm-dd hh24:mi:ss');
也可以通过plsql 自带的工具 导出sql, 按照需要添加
如果出现报错:
报错:ORA-08189:未启用行移动功能,不能闪回表;
需执行:
alter table 表名 enable row movement;
给oracle 重新分配rowid 的权限, 删除的数据的rowid 和恢复回来的rowid 不一致 。
1、手动查询当前数据库SCN号
select current_scn from v$database;
(不能执行的话,切换到sys用户或system用户查询)
也可以查询回收站 select * from recyclebin 查询出来的 dropscn 值
查询到的当前值为:200584097176
2、缩小SCN号查询被删除表数据
select * from 表名 as of scn 200584032146;
scn号 差距有点大,同时操作数据库的人太多,如果是在生产环境 差距可能更大。
3、恢复数据
flashback table OA_OT_DOCCHECKUSER_LOGS to scn 200584032146;
如果出现以下错误 未启用行移动功能,不能闪回表:
需要手动执行下:
alter table OA_OT_DOCCHECKUSER_LOGS enable row movement;
给oracle 重新分配rowid 的权限, 删除的数据的rowid 和恢复回来的rowid 不一致 。
文章来源:
Author:芸诺
link:http://yuuuo.com/?id=54
下一篇:fiddler IE下开发利器
上一篇:linux搭建svn版本管理