日期:2014-05-16  浏览次数:20484 次

无归档日志?无备份?windows32位平台?数据库宕机不能open咋搞?

朋友那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 (