Oacle 断电数据库恢复

简介:打开 数据库时提示系统表空间需要介质恢复,但恢复系统表空间文件后数据库仍然不能打开,最终通过修复控制文件恢复了数据库。
 
社保药店客户操作系统为 windows XP ,数据库为 ORACLE 8.1.7 企业版上运行着城镇医疗保险 MIS 系统。一日用户正在切换发电机供电与正常电时导致计算机突然断电,机器重新启动后业务系统不能运行,经过确认得知 ORACLE 数据库崩溃,需要修复。经过多次尝试,我终于恢复了数据,现将此次恢复过程总结如下:
一、我在 DOS 下运行 ORACLE 中的服务器管理命令 SVRMGRL ,先连接到 ORACLE ,通过查询视图 V$DATABASE 中字段 name log_mode open_mode 得知数据库只能打开到 MOUNT (装载)状态,由于数据库已经损坏,为了防止恢复数据造成新的损坏,所以我首先对数据库进行冷备份;其次我对硬盘进行了检查确认硬盘没有坏道;再次我运行 STARTUP 命令打开数据库,系统提示:“ ORA-01113 ORA-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-01110 1 :‘ 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>
                     1 ORA-600 错误
             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,断电)