ODU的几种恢复场景
ODUmanual ODU6月 26th, 2009由于ODU命令比较多,特别是关键的unload命令比较复杂,本文将简单介绍几种场景下使用ODU进行数据恢复时,使用的命令序列。本文不会详细介绍每个命令的使用,详细的命令请参考本网站ODU页面下的链接。
场景1. 数据库不能启动,但是SYSTEM表空间中的数据字典是完整的。
- 生成数据字典:unload dict
- 列出用户: list user
- 列出用户下的所有表: list table username
- 恢复表: unload table username.tablename
- 也可以按用户恢复: unload user username
场景2. 表被TRUNCATE。
- OFFLINE表所在的表空间
- 生成数据字典:unload dict
- 显示表的段头:desc username.tablename
- 找到实际的data object id: dump datafile file# block block#
- 扫描数据:scan extent
- 恢复表:unload table username.tablename object object_id
UPDATE:
从3.0.7版本开始,恢复Truncate表更方便,只需要执行下面的步骤:
- OFFLINE表所在的表空间
- 生成数据字典:unload dict
- 扫描数据:scan extent
- 恢复表:unload table username.tablename object auto
场景3. 表被DROP。
- OFFLINE表所在的表空间
- 使用logminer从日志里面挖掘被drop掉的表其data object id,如果不能挖掘,按下面的场景4进行恢复。
- 扫描数据:scan extent
- 如果没有表结构信息,需要自动来判断:unload object data_object_id sample
- 恢复表:unload object data_object_id column coltype coltype…
场景4. 系统表空间损坏。
- 扫描数据:scan extent
- 搜索数据:unload object all sample
- 从结果文件sample.txt查找需要的数据
- 恢复需要的表:unload object data_object_id column coltype coltype…
场景5. 表中数据被DELETE。
- 将参数unload_deleted设置为YES
- 生成数据字典:unload dict
- 恢复表: unload table username.tablename

6月 26th, 2009 at 10:30 下午
非常好的总结!熊哥,306跟305比,有哪些改进的地方?
老熊 Reply:
6月 26th, 2009 at 11:08 下午
@cui hua, 一些非常小的改动,比如内部缓冲区的大小,以及其他一些细小的变化。功能上没有任何变化。
7月 11th, 2009 at 8:32 下午
老熊,目前你odu的linux版本是32bit的是吗?还不支持x86-64?在x86-64平台下运行odu报错说找不到libiconv.so.2文件,实际上它在lib目录下。
老熊 Reply:
7月 11th, 2009 at 9:19 下午
@Kamus, 是32位的,但是在64位的linux应该是可以运行,不过我重新编译了一个静态链接的版本,不再需要那个库文件。http://www.laoxiong.net/odu下载最新的版本即可。
11月 29th, 2009 at 9:34 上午
老熊,如果是以下场景应当怎么回复呢?
用户被drop cascade掉,并重新建立了一个同样的用户后发现备份数据丢失。
这时
# 扫描数据:scan extent
# 搜索数据:unload object all sample
查找出来的object_id全部都是system表空间的,用户表空间是空的。
老熊 Reply:
11月 29th, 2009 at 12:43 下午
@蔡华江,
看看control.txt文件是否只包括了SYSTEM表空间?加我的QQ进行讨论吧,这里不合适于讨论具体的问题。
12月 16th, 2009 at 11:35 上午
老熊,ODU能支持CLOB,BLOB,LOB等字段的恢复吗。
老熊 Reply:
12月 16th, 2009 at 12:46 下午
@随风, ODU支持LOB字段的恢复。