ODU的几种恢复场景

由于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
,
Trackback

24 comments untill now

  1. 非常好的总结!熊哥,306跟305比,有哪些改进的地方?

    [回复]

    老熊 回复:

    @cui hua, 一些非常小的改动,比如内部缓冲区的大小,以及其他一些细小的变化。功能上没有任何变化。

    [回复]

  2. 老熊,目前你odu的linux版本是32bit的是吗?还不支持x86-64?在x86-64平台下运行odu报错说找不到libiconv.so.2文件,实际上它在lib目录下。

    [回复]

    老熊 回复:

    @Kamus, 是32位的,但是在64位的linux应该是可以运行,不过我重新编译了一个静态链接的版本,不再需要那个库文件。http://www.laoxiong.net/odu下载最新的版本即可。

    [回复]

  3. 蔡华江 @ 2009-11-29 09:34

    老熊,如果是以下场景应当怎么回复呢?
    用户被drop cascade掉,并重新建立了一个同样的用户后发现备份数据丢失。
    这时
    # 扫描数据:scan extent
    # 搜索数据:unload object all sample
    查找出来的object_id全部都是system表空间的,用户表空间是空的。

    [回复]

    老熊 回复:

    @蔡华江,
    看看control.txt文件是否只包括了SYSTEM表空间?加我的QQ进行讨论吧,这里不合适于讨论具体的问题。

    [回复]

  4. 老熊,ODU能支持CLOB,BLOB,LOB等字段的恢复吗。

    [回复]

    老熊 回复:

    @随风, ODU支持LOB字段的恢复。

    [回复]

  5. 老熊的ODU帮俺恢复了一个10G的大表。感激直至!

    [回复]

  6. 而且俺那表还是个IOT表!

    [回复]

  7. 老熊让俺佩服死了!太专业了!太敬业了!

    [回复]

  8. 熊大师,ODU支持clob的恢复吗?我试了好几次,都只能恢复clob列的第一个字母,是我操作有误,还是现在的版本不支持?

    [回复]

    老熊 回复:

    @阿毛, 可以恢复CLOB列

    [回复]

  9. 请问老熊,odu可以恢复solaris sparc内核中的数据文件吗?

    [回复]

    老熊 回复:

    不明白你说的solaris sparc内核中的数据文件是什么,如果是指sparc平台solaris操作系统中的oracle数据库,那是可以的。

    [回复]

  10. sparc平台solaris操作系统中的oracle数据库,是将数据文件拷贝到windows系统中恢复吗

    [回复]

    老熊 回复:

    @mofan, 可以这样。

    [回复]

  11. lvlisong @ 2011-01-11 17:36

    无system 表空间,中文恢复出来是 E68891等这种类型,请问有什么办法
    处理呢,谢谢!

    [回复]

    老熊 回复:

    @lvlisong, 可能是你unload指定的列类型不对。

    [回复]

  12. lvlisong @ 2011-01-11 17:45

    已经可以了,是我的数据库UTF8,配置文件没改。
    多谢了,这个工具太强大了

    [回复]

    老熊 回复:

    @lvlisong, 能恢复就好。

    [回复]

  13. 前几天poc了一下,dmp方式速度低于aul与dul,txt方式处理lob时,如果lob文件太多则越来越慢,建议使用子目录解决,比如1000个lob建一个子目录!祝好!

    [回复]

  14. 老熊哥,求救,我写好的存储过程被我误将里面的代码删掉,成了空的,想问下有何办法找到历史记录,恢复到2个小时前的状态?拜托了!

    [回复]

    老熊 回复:

    @dong, 你可以试试在sys.source$表上进行闪回查询以查到以前的代码。

    [回复]

Add your comment now