oracle 执行 delete user$ 误删所有用户信息后的数据恢复流程
起因:
在oracle测试过程中,不小心执行了delete user$ 命令,导致oracle当前实例所有的用户信息丢失,包括sys用户。
第一次使用DUL工具数据恢复:失败
下载ParnassusData_PRMForOracle 工具,使用方法参考http://jingyan.baidu.com/article/624e7459ad30ed34e8ba5a2a.html,有交互界面,需要安装java环境,选择oralce系统目录下的system01.dbf等文件和业务dbf文件,加载分析,该工具就能把该实例下所有用户的表读取出来。如果用户信息不是误删的情况下,这种恢复方式是比较方便的,但我的情况是所有用户都没了,所有表信息也无法读取。
第二次使用AUL工具数据恢复:失败
下载aul工具,使用方法参考http://blog.csdn.net/daxiang12092205/article/details/17994665,没有交互界面,根据用户使用说明要求加载文件分析后,会生成aulusr.txt, aulobj.txt,aultab.txt, aulcol.txt;
aulusr.txt:存的内容是所有的用户名信息
aulobj.txt:存的内容是所有表名信息 其中第2列意思是指 该表对应的用户id,跟aulusr.txt中的用户id对应。
aulcol.txt: 存的内容是所有表的表结构信息。
由于所有用户已经删除, aulusr.txt中的信息是空的,但是aulobj.txt中的表信息都是全的,我通过已知的某个表名名称,在aulobj.txt中进行查找,找到了对应的用户ID,然后根据这个用户ID在aulusr.txt中构建一条记录用户信息记录,然后执行还原表数据命令,数据还原出来了,但我需要的表的表字段存在NVARCHAR和CLOB字段,NVARCHAR字段会乱码,而CLOB字段压根就还原不出来。
第三次使用ODU工具数据恢复:成功
下载ODU工具,使用方法参考https://files.cnblogs.com/files/hewenhaotc/ODUUserGuide_cn.pdf,也可以查看http://www.oracleodu.com/cn/上的技术支持,没有交互界面,根据用户使用说明要求加载文件分析后,也会生成lob.odu、obj.odu、tab.odu、user.odu;文件代表的信息跟AUL工具类似,根据用户说明进行还原数据后,乱码问题解决了,CLOB的字段也导出来,但问题来了,COLB字段包含回车,导出的数据进行命令导入到数据库是,无法正常导入,使用sqlldr命令导入时,会把回车当做一条记录的结束。
查了资料后,发现该工具底下的config.txt文件中的“lob_storage”是可以控制CLOB字段作为单独的文本输出,字段说明参考:http://blog.163.com/scott_guo/blog/static/181026083201211105107102/。修改了配置,还原数据,再导入到数据库,成功,无乱码问题,无丢失字段问题!
以上三种工具的方法比较参考文章ORACLE恢复神器之ODU/AUL/DUL:http://www.cnblogs.com/oracle-dba/p/3873870.html