日期:2014-05-16 浏览次数:20499 次
朋友那32位的windows 2003平台,跑了2年的oracle 10g数据库。因为操作系统中毒,系统异常关闭后启动蓝屏。
没办法,重装操作系统,重装oracle软件,挂载数据文件后,启动报错:SYSTEM01.DBF需要恢复。
查看数据库配置,非归档运行,也没有可用的数据库备份。
尝试了_allow_resetlogs_corruption,_offline_rollback_segments,_corrupt_rollback_segments,set 10513 event等多种方法,始终不能打开数据库。
设置了_allow_resetlogs_corruption后,数据库启动关键日志如下:
alert_tjserver.log
Wed Mar 20 17:21:53 2013 Errors in file d:\oracle\admin\tjserver\udump\tjserver_ora_1614.trc: ORA-00600: internal error code, arguments: [4000], [7], [], [], [], [], [], []
常规恢复都没起作用,ORA-00600 [4000],[7]在没有可用备份的情况下,一般考虑用BBED工具做修复。
整个恢复流程,基本思路如下:
1、将数据文件、控制文件、参数文件,复制到linux或Unix平台上,我这顺手就用了64位的Solaris。
2、在Solaris平台上安装同版本的Oracle软件。
3、用RMAN做数据文件的跨平台转换。
4、修改参数文件,启动实例,重建控制文件。
5、在Solaris平台上编译BBED工具,并修改数据文件。
6、修正其他错误,尝试open数据库。
7、做全库的exp导出,然后恢复到新的数据库中。
需要用的工作技能主要包括:Solaris操作系统使用、Oracle在Solaris上的安装、RMAN跨平台转换数据库、Oracle基本灾备技能、BBED工具使用、exp工具使用
第一、二步网上有很多文档,就不介绍了。
这里直接从第三步RMAN跨平台转换开始
RMAN> conn target / RMAN>run{ convert datafile '/opt/oracle/tjserver/SYSTEM01.DBF' to platform='Solaris[tm] OE (64-bit)' format='/opt/oracle/tjserver/SYSTEM01.DBF.NEW'; convert datafile '/opt/oracle/tjserver/UNDOTBS01.DBF' to platform='Solaris[tm] OE (64-bit)' format='/opt/oracle/tjserver/UNDOTBS01.DBF.NEW'; convert datafile '/opt/oracle/tjserver/SYSAUX01.DBF' to platform='Solaris[tm] OE (64-bit)' format='/opt/oracle/tjserver/SYSAUX01.DBF.NEW'; convert datafile '/opt/oracle/tjserver/USERS01.DBF' to platform='Solaris[tm] OE (64-bit)' format='/opt/oracle/tjserver/USERS01.DBF.NEW'; convert datafile '/opt/oracle/tjserver/INDEX01.DBF' to platform='Solaris[tm] OE (64-bit)' format='/opt/oracle/tjserver/INDEX01.DBF.NEW'; }
逐一转换所有文件。
第四步 修改参数文件,重建控制文件
1)修改参数文件中的*_dest路径,从原来的windows 指向新的Solaris路径
tjserver.__db_cache_size=75497472 tjserver.__java_pool_size=4194304 tjserver.__large_pool_size=4194304 tjserver.__shared_pool_size=79691776 tjserver.__streams_pool_size=0 *.audit_file_dest='/opt/oracle/admin/tjserver/adump' *.background_dump_dest='/opt/oracle/admin/tjserver/bdump' *.compatible='10.2.0.1.0' *.control_files='/opt/oracle/oradata/tjserver/control01.ctl','/opt/oracle/oradata/tjserver/control02.ctl','/opt/oracle/oradata/tjserver/control03.ctl' *.core_dump_dest='/opt/oracle/admin/tjserver/cdump' *.db_block_size=8192 *.db_domain='' *.db_file_multiblock_read_count=16 *.db_name='tjserver' *.dispatchers='(PROTOCOL=TCP) (SERVICE=tjserverXDB)' *.job_queue_processes=10 *.open_cursors=300 *.pga_aggregate_target=52428800 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=167772160 *.undo_management='AUTO' *.undo_tablespace='UNDOTBS1' *.user_dump_dest='/opt/oracle/admin/tjserver/udump'
重建控制文件:
sql>startup mount;
sql>alter database backup controlfile to trace;
到udump目录下,找到trace文件,根据文件脚本,重建控制文件:
SQL> CREATE CONTROLFILE REUSE DATABASE "TJSERVER" RESETLOGS MAXLOGFILES 16 MAXLOGMEMBERS 5 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 (