简介:打开数据库时提示系统表空间需要介质恢复,但恢复系统表空间文件后数据库仍然不能打开,最终通过修复控制文件恢复了数据库。

 

社保药店客户操作系统为windows XP,数据库为ORACLE 8.1.7企业版上运行着城镇医疗保险MIS系统。一日用户正在切换发电机供电与正常电时导致计算机突然断电,机器重新启动后业务系统不能运行,经过确认得知ORACLE数据库崩溃,需要修复。经过多次尝试,我终于恢复了数据,现将此次恢复过程总结如下:
一、我在DOS下运行ORACLE中的服务器管理命令SVRMGRL,先连接到ORACLE,通过查询视图V$DATABASE中字段namelog_modeopen_mode得知数据库只能打开到MOUNT(装载)状态,由于数据库已经损坏,为了防止恢复数据造成新的损坏,所以我首先对数据库进行冷备份;其次我对硬盘进行了检查确认硬盘没有坏道;再次我运行STARTUP命令打开数据库,系统提示:“ORA-01113ORA-011101:‘D:\ORACLE\ORADATA\WNYB\SYSTEM.DBF’”错误,初步判断因系统表空间文件损坏导致无法打开数据库。由于数据库能装载所以我执行命令RECOVER以恢复数据库,执行完系统提“示完成介质的恢复”,但在打开数据库时系统又提示ORA-03113错误,同时在wnybALRT.log日志文件中找到“ORA-00600: internal error code, arguments: [3705], [1], [1], [1], [0], [], [], [],”数据库依然没有打开;第一步详细诊断过程如下:
SVRMGRL>connect internal
连接成功
SVRMGRL>select name,log_mode,open_mode from v$database;
Name    log_mode         open_mode
-------    -----------          -------------
WNYB   NOARCHIVELOG  MOUNTED
SVRMGRL>shutdown immediate;
ORA-01109:数据库未打开
已卸下数据库
已关闭ORACLE 实例
SVRMGRL>startup 
已启动ORACLE实例。
系统全局区域合计有   87962676个字节
Fixed Size          75804个字节
Variable Size           55967744个字节
Database  Buffers      31842304个字节
Redo Buffers           77824个字节
已装入数据库
ORA-01113?? 1 ??????
ORA-011101:‘D:\ORACLE\ORADATA\WNYB\SYSTEM.DBF’
SVRMGRL>shutdown immediate;
ORA-01109:数据库未打开
已卸下数据库
已关闭ORACLE 实例
SVRMGRL>STARTUP MOUNT
已启动ORACLE实例。
系统全局区域合计有   87962676个字节
Fixed Size          75804个字节
Variable Size           55967744个字节
Database  Buffers      31842304个字节
Redo Buffers           77824个字节
已装入数据库
SVRMGRL>RECOVER DATABASE
完成介质的恢复。
SVRMGRL>ALTER DATABASE OPEN
系统提示:
ORA-3113   end-of-file on communication channel
SVRMGRL>
Oacle 断电数据库恢复
                     1ORA-600错误
Oacle 断电数据库恢复
             2:方案一恢复过程
二、通过查找资料得知系统出现ORA-600错误并且当第一个变量为[3705],则控制文件有损坏,于是我写了一个创建控制文件的脚本,把首次备份的数据库恢复后用执行该脚本,然后以重置日志的方法打开数据库,恢复了数据库,具体的步骤如下:
SVRMGRL>connect internal
SVRMGRL>shutdown immediate
SVRMGRL>startup mount
SVRMGRL>alter database backup controlfile to trace;
SVRMGRL>shutdown immediate;
SVRMGRL>startup nomount
SVRMGRL>@d:\c_ctrl.txt
SVRMGRL>shutdown immediate;
修改INIT.ORA文件增加_allow_resetlogs_corruption=TRUE一行
SVRMGRL>startup mount
SVRMGRL>alter database open resetlogs
注释INIT.ORA文件中_allow_resetlogs_corruption=TRUE一行。
脚本c_ctrl.txt内容如下:create controlfile reuse set database wnyb
datafile 'D:\oracle\oradata\wnyb\system01.dbf',
'D:\oracle\oradata\wnyb\temp01.dbf',
'D:\oracle\oradata\wnyb\rbs01.dbf',
'D:\oracle\oradata\wnyb\indx01.dbf',
'D:\oracle\oradata\wnyb\tools01.dbf',
'D:\oracle\oradata\wnyb\dr01.dbf',
'D:\oracle\oradata\wnyb\users01.dbf'
logfile 'D:\oracle\oradata\wnyb\redo01.log' size 1M,
'D:\oracle\oradata\wnyb\redo02.log' size 1M,
'D:\oracle\oradata\wnyb\redo03.log' size 1M resetlogs
Oacle 断电数据库恢复
            图三:方案二恢复过程
至此系统提示数据库恢复已经完成。