六
26
由于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
非常好的总结!熊哥,306跟305比,有哪些改进的地方?
[回复]
老熊 回复:
6月 26th, 2009 at 11:08 下午
@cui hua, 一些非常小的改动,比如内部缓冲区的大小,以及其他一些细小的变化。功能上没有任何变化。
[回复]
老熊,目前你odu的linux版本是32bit的是吗?还不支持x86-64?在x86-64平台下运行odu报错说找不到libiconv.so.2文件,实际上它在lib目录下。
[回复]
老熊 回复:
7月 11th, 2009 at 9:19 下午
@Kamus, 是32位的,但是在64位的linux应该是可以运行,不过我重新编译了一个静态链接的版本,不再需要那个库文件。http://www.laoxiong.net/odu下载最新的版本即可。
[回复]
老熊,如果是以下场景应当怎么回复呢?
用户被drop cascade掉,并重新建立了一个同样的用户后发现备份数据丢失。
这时
# 扫描数据:scan extent
# 搜索数据:unload object all sample
查找出来的object_id全部都是system表空间的,用户表空间是空的。
[回复]
老熊 回复:
11月 29th, 2009 at 12:43 下午
@蔡华江,
看看control.txt文件是否只包括了SYSTEM表空间?加我的QQ进行讨论吧,这里不合适于讨论具体的问题。
[回复]
老熊,ODU能支持CLOB,BLOB,LOB等字段的恢复吗。
[回复]
老熊 回复:
12月 16th, 2009 at 12:46 下午
@随风, ODU支持LOB字段的恢复。
[回复]
老熊的ODU帮俺恢复了一个10G的大表。感激直至!
[回复]
而且俺那表还是个IOT表!
[回复]
老熊让俺佩服死了!太专业了!太敬业了!
[回复]
熊大师,ODU支持clob的恢复吗?我试了好几次,都只能恢复clob列的第一个字母,是我操作有误,还是现在的版本不支持?
[回复]
老熊 回复:
6月 2nd, 2010 at 11:54 上午
@阿毛, 可以恢复CLOB列
[回复]
请问老熊,odu可以恢复solaris sparc内核中的数据文件吗?
[回复]
老熊 回复:
9月 20th, 2010 at 9:04 下午
不明白你说的solaris sparc内核中的数据文件是什么,如果是指sparc平台solaris操作系统中的oracle数据库,那是可以的。
[回复]
sparc平台solaris操作系统中的oracle数据库,是将数据文件拷贝到windows系统中恢复吗
[回复]
老熊 回复:
9月 25th, 2010 at 12:47 下午
@mofan, 可以这样。
[回复]
无system 表空间,中文恢复出来是 E68891等这种类型,请问有什么办法
处理呢,谢谢!
[回复]
老熊 回复:
1月 11th, 2011 at 5:38 下午
@lvlisong, 可能是你unload指定的列类型不对。
[回复]
已经可以了,是我的数据库UTF8,配置文件没改。
多谢了,这个工具太强大了
[回复]
老熊 回复:
1月 11th, 2011 at 5:49 下午
@lvlisong, 能恢复就好。
[回复]
前几天poc了一下,dmp方式速度低于aul与dul,txt方式处理lob时,如果lob文件太多则越来越慢,建议使用子目录解决,比如1000个lob建一个子目录!祝好!
[回复]
老熊哥,求救,我写好的存储过程被我误将里面的代码删掉,成了空的,想问下有何办法找到历史记录,恢复到2个小时前的状态?拜托了!
[回复]
老熊 回复:
3月 8th, 2011 at 9:47 上午
@dong, 你可以试试在sys.source$表上进行闪回查询以查到以前的代码。
[回复]