简介:打开
数据库时提示系统表空间需要介质恢复,但恢复系统表空间文件后数据库仍然不能打开,最终通过修复控制文件恢复了数据库。
社保药店客户操作系统为
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
图三:方案二恢复过程
至此系统提示数据库恢复已经完成。