表被误删的恢复

今天早上来了之后被通知部署同事昨天晚上发版本时误操作,在没有备份成功之前删除了三个表的三个分区,本来版本是要对这三个表的分区增加分区,结果这三个分区的数据全丢了。

我来之后开始恢复,恢复方案是恢复删除之前的一个备份,把数据导出来,然后导入到生产库中

用rman恢复最近的一个全备,然后追归档日志,因为部署同事知道操作时间是昨晚21:05左右操作的,到数据库中查下该recover到哪里。

SQL> select to_char(first_time,'yyyy-mm-dd hh24:mi:ss'),a.SEQUENCE#,a.FIRST_CHANGE#,a.NEXT_CHANGE#
  2    from v$log_history a
  3   where first_time between to_date('2010-10-19 21:05', 'yyyy-mm-dd hh24:mi') and
  4         to_date('2010-10-19 21:10', 'yyyy-mm-dd hh24:mi');

TO_CHAR(FIRST_TIME,'YYYY-MM-DD  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#
------------------------------ ---------- ------------- ------------
2010-10-19 21:05:41                146814 8427770718141 842777166381
2010-10-19 21:09:48                146815 8427771663814 842777175198

从上面可以看到如果超过了146815 号归档日志那恢复的数据库就没有用了,因为这时分区已经被删掉了。而且必须要在recover 完146815号日志前把数据库open起来, 所以使用ALTER DATABASE RECOVER  database until change 8427771663814 using backup controlfile;此时数据库已恢复到一致的状态,可以open了。

导出三个分区

userid='/ as sysdba '
file=exp.dmp
tables=ARCHDATA.IMS_TO_ARCHIVE_DOCUMENT_POLICY:PT_IMS_TO_ARCH_POL_MAX,ARCHDATA.ims_to_arch_document_service:P
T_IMS_TO_ARCH_SER_MAX,ARCHDATA.ims_to_archive_document_case:PT_IMS_TO_ARCH_CASE_MAX
log=exp.log
direct=y

导入的时候不用指定分区了,oracle会自动选择合适的分区导入。

userid='/ as sysdba '
file=exp.dmp
fromuser=ARCHDATA,ARCHDATA,ARCHDATA
touser=ARCHDATA,ARCHDATA,ARCHDATA
tables=IMS_TO_ARCHIVE_DOCUMENT_POLICY,ims_to_arch_document_service,ims_to_archive_document_case
log=imp.log
ignore=y
buffer=100000000
commit=y
导入完成后,应用验证ok,搞定!


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15779287/viewspace-676509/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15779287/viewspace-676509/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值