今天早上来了之后被通知部署同事昨天晚上发版本时误操作,在没有备份成功之前删除了三个表的三个分区,本来版本是要对这三个表的分区增加分区,结果这三个分区的数据全丢了。
我来之后开始恢复,恢复方案是恢复删除之前的一个备份,把数据导出来,然后导入到生产库中
用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/
1万+

被折叠的 条评论
为什么被折叠?



