案例:部门有一个数据库因为机器无故重启,无法启动,初步判断是系统表空间出问题了。尝试过各种不同手段,均无法修复。后来发现上面只有一个用户的数据,遂想到直接通过AUL工具从数据文件中抽取出整个库。

准备工作:从官网上下载AUL,我用的版本是aul5  http://www.anysql.net/
开始:
aul是收费的,不过单个文件在512M之内的是免费的。我看了一下我的文件,虽然表空间有2G多,但实际数据只有30M左右,所以完全在免费的范围之内。
首先把下载的aul包直接解压,新建一个文本文件,我们配置成recovery.cfg,命名无所谓,主要是里面的内容:
 1          0 D:\oracle\oradata\bak\SYSTEM01.DBF
 1          0 D:\oracle\oradata\bak\USSD.ORA
 每行一个数据文件 FILE# RFILE# FILENAME.
 FILE#, RFILE#不要求很准确,AUL能帮助我们搞定的;FILENAME一定要准确
SYSTEM01.DBF就是损坏的文件,里面存放着数据库的用户等信息
USSD.ORA就是我们要提取的用户数据信息
运行aul,先贴个设置参数的注释
      //oracle 数据块的大小, 可以从参数文件及 show parameter block_size 查看
      SET BLOCK_SIZE    {2048 | 4096 | 8192 | 16384 | 32768} 
      //oracle 数据文件所处平台字节设置, windows 下设置 LITTLE
      SET BYTE_ORDER    {BIG | LITTLE}
      //设置恢复的数据文件中列间隔付,采用默认即可
      SET FIELD_TAG     field_tag
      //设置恢复的数据文件中行结束符,采用默认即可
      SET RECORD_TAG    record_tag
      //恢复的数据文件是文本方式的还是DMP格式的
      SET OUTPUT_STYLE  {TXT | DMP}
      //设置字符集,需要和oracle数据库保持一致,中文下为852
      SET CHARSET       charsetid
      //设置字符集,需要和oracle数据库保持一致,中文下为852
      SET NLSCHARSET    charsetid
      //是否进行块检验,建议0 最大限度的恢复数据
      SET BLOCK_CHECK   {0 | 1}
      //CLOB的字节顺序10g以前需要和机器一致windows(LITTLE),10g以后BIG
      SET CLOB_EDIAN    {BIG | LITTLE}
      //LOB中的编码 如果存储中文则需要设置 1 GBK
      SET LOB_CONVERT   {0:NONE | 1:GBK | 2:UTF8}
      //LOB中数据存储位置采用默认0 即可
      SET LOB_STORAGE   {0:INLINE | 1:FILE | 2:NONE}
首先设置几个参数:
AUL> set charset 852
  Current CHARSET is : 0x0354
AUL> set nlscharset 852
  Current NLSCHARSET is : 0x0354
AUL> set lob_convert 1
  Current LOB_CONVERT is : 1-GBK
AUL> set lob_storage 1
  Current LOB_STORAGE is : 1-FILE
前面两项852表示是GBK编码
特别是最后两项,lob_convert 1 表示clob或者blob里面的中文用gbk表示,这个要看数据库自身的编码来选择,不然lob字段会出现乱码
lob_storage 1 表示用文件来存储lob信息,否则它会写到后续步骤的txt文件里面去,本人这个案例中就没法把clob字段正常导入到库中去了
 
然后在命令窗口使用命令 open recovery.cfg
AUL> open recovery.cfg
*  ts#  fno  rfn ver bsize     blocks filename
- ---- ---- ---- --- ----- ---------- -----------------------------------
Y    0    1    1 02   8192      51200 D:\oracle\oradata\bak\SYSTEM01.DBF
Y   13   12   12 02   8192      65536 D:\oracle\oradata\bak\USSD.ORA
出现上述显示,特别是第一行的Y,表示能够正常读取,N就是有问题了
 
接下来就是生成所需要的恢复脚本了
AUL> UNLOAD TABLE USER$;
2013-10-09 16:29:57
2013-10-09 16:29:57
AUL> UNLOAD TABLE OBJ$;
2013-10-09 16:30:11
2013-10-09 16:30:11
AUL> UNLOAD TABLE TAB$;
2013-10-09 16:30:21
2013-10-09 16:30:21
AUL> UNLOAD TABLE COL$;
2013-10-09 16:30:33
2013-10-09 16:30:33
 
以上命令会生成基本的用户结构信息
接下来 ussd是数据库用户名
AUL> list table ussd
 UNLOAD TABLE ussd.AA TO AA.txt;
 UNLOAD TABLE ussd.BB TO BB.txt;
 UNLOAD TABLE ussd.CC TO CC.txt;
 UNLOAD TABLE ussd.DD TO DD.txt;
 UNLOAD TABLE ussd.EE TO EE.txt;
新建一个文本,命名为recovery.txt 把上述显示出来的复制到里面去
然后在命令窗口执行:
AUL> @recovery.txt
等候执行完,看aul里面的文件,是不是多了很多呢。接下来我们就要离开aul了,使用sqlload导入到新建的数据库中去
其中 _sqlldr.ctl结尾的是sqlload的控制文件,_syntax.sql结尾的是建表语句,其他的就是数据文件了,注意出现很多文件夹的那些是clob或者blob的数据文件。
 
先把表创建好,然后打开cmd窗口,进入到aul目录下,然后敲入命令:
D:\aul>sqlldr ussd/ussd@test control=d:\aul\AA_sqlldr.ctl
这样数据就会导入了,比较不方便的是要一个表一个表建,要是很多表的话就很麻烦了
 
这样整个数据恢复过程就完成了,aul工具还是很好的,d.c.b.a 确实厉害。

AUL使用初记的更多相关文章

  1. ORACLE恢复神器之ODU/AUL/DUL

    分享ORACLE数据库恢复神器之ODU.DUL和AUL工具. ODU:ORACLE DATABASE UNLOADER DUL:DATA UNLOADER AUL:也称MyDUL 关于三种工具说明: ...

  2. aul 学习测试(测量)

    -------------------aul5 ----------test0------------------------- select file#,rfile#,name from v$dat ...

  3. Oracle DUL/AUL/ODU 工具说明

    转自 http://blog.csdn.net/launch_225/article/details/7523195 假设我们的数据库遇到以下情况: 第一, 没有备份; 第二, 常规方法无法恢复; 第 ...

  4. AUL恢复truncate删除的表

    背景 接到用户申告,新毕业的兄弟不小心把数据库中的3个关键表给truncate了,由于这个业务还在测试阶段,系统没有任何形式的备份. 客户的OS平台是windows平台,数据库是Oracle9207 ...

  5. Oracle终极数据恢复,孰弱孰强(DUL vs AUL)

    这几天在帮朋友作数据恢复,由于已经到了无可救药的地步,只能使用终极手段进行恢复,直接从文件中读取数据进行恢复. 在恢复过程中反复对比了DUL和dcba的AUL,感觉到了两者的不同. DUL在处理文件损 ...

  6. tomcat&servlet初记

    tomcat&servlet初记 1. web相关概念 2. web服务器软件的学习:tomcat 3. servlet入门学习 web相关概念 1,软件架构 1,cs架构:客户端/服务器端 ...

  7. Linux初记

    ctrl+u可以在shell下删除行,如果此键不起作用,就试试ctrl+x ctrl+z可以将程序挂起,不会终止程序,但可以将程序挂起. 通过fg命令可再把此作业切换到前台 cp命令的目标文件如果是一 ...

  8. Adobe Flex初记

    公司项目要用Flex,之前没有接触过,菜鸟只好白手起家,把项目拉下来的同时配置下Flex的环境,以下是一篇参考: http://blog.sina.com.cn/s/blog_4c4a24db0100 ...

  9. Python初记

    ------Python是一个优雅的大姐姐 我是通过<老男孩Python>学习Python,根据我手上的资源学习Python,资料不齐,但是这个是最好的,边学习边寻找有没有相同的类型. 在 ...

随机推荐

  1. LESS使用方法简介(装逼神器)

    LESS 做为 CSS 的一种形式的扩展,它并没有阉割 CSS 的功能,而是在现有的 CSS 语法上,添加了很多额外的功能,所以学习 LESS 是一件轻而易举的事情,果断学习之! 变量 很容易理解: ...

  2. MVC View基础(转)

    View主要用于呈现数据.由于Controller和相关的Service已经处理完业务逻辑并将结果打包成model实体,View只需要怎么去获得model并将其转为Html 1选择需要渲染的视图 在上 ...

  3. 优化:代码移动code motion

    代码移动code motion-一种常见的优化-这种优化是把(一种需要执行多次但计算结果不会改变)的计算移到前面-这种优化一般需要程序员自行移动代码,不能依靠编译器(编译器担心会有副作用) 看看代码就 ...

  4. Reading source code

    software is a system built up of many parts rebuild that decomposition see the patterns in codes is ...

  5. Servlet开发(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  6. 存储过程使用表变量或临时表代替游标Fetch实例,访问远程数据库

    定义表变量是可以直接操作在内存中的数据,比较快.临时表在大数据量时会比游标使用的资源少.还是要看具体情况了.也有可能在实际优化过程中相互替换呢. 留作记忆的代码如下: if object_id('te ...

  7. c++基础五个题(一)

    一.深拷贝和浅拷贝? 浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(仅仅是名称不同),对其中任何一个对象的改动都会影响另外一个对象,例如:一个人叫小王,后来改名小李,结果不管是小王死了 ...

  8. C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用演示

    本文演示了C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用. 这几个预定义符的名称就没必要再介绍了,顾名思义嘛. // ...

  9. Qt之HTTP上传/下载(继承QNetworkAccessManager,包括使用了authenticationRequired认证信号)

    效果 QNetworkAccessManager DownloadNetworkManager::DownloadNetworkManager(QObject *parent) : QNetworkA ...

  10. codecomb 2092【课程选择】

    题目描述 大学选课总是烦恼着很多人.现在X同学选出了很多备选课,但是有的课程之间是有时间冲突的.X不会分身,自然无法在同一个时间上不同的课.每个课可能有很多备选时间,但是每个课只需要选一个时间上就可以 ...