ITPub博客

首页 > 数据库 > Oracle > 记一次数据恢复

记一次数据恢复

原创 Oracle 作者:regonly1 时间:2016-10-20 16:36:31 0 删除 编辑

记一次数据恢复

同事不小心把生产的一个表truncate了,匆忙来找我想解决办法。
一开始想到了用helldba站点的兄弟写的truncate恢复办法,但之前实际操作过,太复杂,要建表空间,还要很多权限。
手忙脚乱了一下后,冷静下来一想,还有个老耿写的gdul工具,有恢复truncate的数据的选项。于是赶紧上传工具,然后安装。

安装过程需要sys密码。

下面是操作过程:
1、先bootstrap初始化
2、看下表数据所在的表空间的ts#:info
3、扫描表表空间:scan tablespace [ts#]
4、同事说这个表被truncate过几次,所以用下面这个命令无法直接恢复:untrunc table [user].[table_name]
5、改用drop表的恢复方式:先对表空间采样:sample segment all;然后unload表:unload table [user].[table_name] object_id [data_object_id]
   但是在找data_object_id上发生了问题----这个表空间下有几百个表,
   也就是sample出来的文件有几百个,如何能找到那个文件呢?如何快速的定位到我们要恢复的那个表的data_object_id呢?
   我把所有dict文件cat到一个文件中,然后用字段类型为date来筛选,结果发现大部分表都有这个date类型,无法高效的筛选出想要的表。
   然后,想到用date类型结合字段数来匹配查,发现还是太多,找起来太慢。在找的过程中,突然灵光一现,何不用col0032(这个表的字段数)来匹配,
   因为字段名命名都有规律,都是按COL+4位数字(不足左侧0补足)来编号的,所以。。。。。就很快找到了。
4、然后unload table [user].[table_name] object_id 12345
5、按照导出的dmp文件,导入到库中,数据恢复完成。

对于这次恢复,非常感谢老耿写的这个工具,可操作性和使用性非常好。
另外,对这个工具,我也有一些建议。当恢复的时效性要求非常高时,对于表空间中数据对象比较多的情况下,
如何“快速”的定位到所要恢复的数据对象id非常重要。我觉得可以提供一个命令,列出所有数据对象的id和字段数(同我分析文件的过程一样),以便查看。

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

请登录后发表评论 登录
全部评论

注册时间:2008-05-10

  • 博文量
    257
  • 访问量
    1025120