单位数据库出现故障,只能mount,不能open,想尽一切办法也没能启动。我判断数据文件并没有损坏,出错的可能是系统文件,非归档模式没有任何备份!因此想起最后一招:Dul。在网上寻找很长时间才找到这个Oracle内部密不外传的工具,全部希望都寄托在她身上了。dul工具仅仅就是一个不到200k的可执行文件,我的数据库是8.1.7,Dul也需要是对应8版本的dul8.exe 。下面简要的记录一下恢复过程:
1. 首先建配置文件init.dul
osd_big_endian_flag=false
osd_dba_file_bits=10
osd_c_struct_alignment=32
osd_file_leader_size=1
osd_word_size = 32
dc_columns=2000000
dc_tables=10000
dc_objects=1000000
dc_users=400
dc_segments=100000
control_file = control.txt
db_block_size=8192
export_mode=true
compatible=8
file = dump
2. 建立控制文件Control.txt,方法如下:
> connect internal
> spool control.txt
> select ts#, rfile#, name from v$datafile ;
> spool off
删除RBS、TEMP所属的Datafile。
如果SYSTEM 所属的Datafile坏了,也将它删除。
如果档案超过2G,必须要分割,使其小于2G。
将control_orcl.dul內容要改成:
5 6 bigdatafile.dbf startblock 1 endblock=1000000
5 6 bigdatafile.dbf startblock=1000001 endblock=2000000
5 6 bigdatafile.dbf startlock=2000001 endblock=2550000
3. 生成数据字典dict.ddl
运行dul
>scan database; # build segment map and locate compatibility segment
restart dul # load the just generated files
bootstrap; # find location of bootstrap$ in comp segment and unload
restart dul # load the just generated files
bootstrap generate; # generate dict.ddl for first four tables
@dict.ddl # unload the first four tables
restart dul # load the just generated files
bootstrap generate; #generate dict.ddl for all tables
@dict.ddl # unload all dictionary tables
restart dul # now your ready to go
4. 读取数据
dul dict.ddl
>unload database
完成。
幸好有DUL这样的工具,感谢帮助过我的人们,最后提醒大家备份是最重要的!!!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/18966/viewspace-1004617/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/18966/viewspace-1004617/