DUL is Life

系统情况如下:
1. Oracle版本是10.2.0.1,操作系统是Linux x86-64
2. 数据文件存储在OCFS2上
3. 需要恢复的表是普通表
4. 未知故障引起online日志文件损坏,使用隐含参数启动数据库之后,已经将大部分表通过exp导出到新库中,但是个别表无论是使用exp还是使用select都会报ORA-01555 snapshot too old错误,很明显回滚段数据存在不一致。

由于只有小部分数据无法导出,因此决定使用DUL直接从数据块中读取数据。

对于OCFS2文件系统无需特殊处理,在control.dul中按照路径写入系统表空间数据文件和故障表所处的用户表空间数据文件即可。

由于system表空间正常,数据字典都存在,因此unload table的过程很简单,bootstrap之后直接unload table即可。

这次unload出的表中最多记录数为580万多。

最后将生成的dat文件通过SQL Loader加载回新建的数据库中,对于中文的处理需要将操作系统NLS_LANG环境参数设置为跟数据库字符集相同。

本来这次想测试老熊的ODU执行效率,很可惜,在执行linux版本的odu时报无法找到某lib,因此作罢(由于时间充裕,在等待后续处理的过程中,将系统表空间文件和其中一个数据文件ftp到windows中,然后使用windows版本的odu测试了一下,unload table功能完全正常)。

5 thoughts on “DUL is Life

  1. 其实dul/aul 都该静态编译,程序大点又有何妨呢。否则恢复的时候,还要设置一大堆的LD_LIBRARY_PATH。

Leave a Reply

Your email address will not be published. Required fields are marked *