操作系统: WIN 2003 SERVER SP1 数 据 库: Ora 8i
软件版本: 软件模块:
问题描述:
oracle816 正在使用时断电,不完全恢复案例记录
产生原因: oracle816服务器断电
解决方法:
一、状况描述:
Oracle 816,非归档模式,客户的真实oracle服务器,下午2点左右,正是业务的高峰,突入Oracle816服务器意外断电。重新启动机器后,oracle816服务启动不了,查看oracle 的错误日志,有如下的错误:
Errors in file D:\Oracle\admin\finance2\bdump\ORA02416.TRC:
ORA-00600: internal error code, arguments: [723], [26388], [26388], [memory leak], [], [], [], []
二、解决过程:
C:\Documents and Settings\Administrator>SVRMGRL
Oracle Server Manager Release 3.1.6.0.0 – Production
Copyright (c) 1997, 1999, Oracle Corporation. All Rights Reserved.
Oracle8i Enterprise Edition Release 8.1.6.0.0 – Production
With the Partitioning option
JServer Release 8.1.6.0.0 – Production
SVRMGR> STARTUP NOMOUNT;
已启动 ORACLE 实例。
系统全局区域合计有 237008140个字节
Fixed Size 70924个字节
Variable Size 79572992个字节
Database Buffers 157286400个字节
Redo Buffers 77824个字节
SVRMGR> alter database mount;
ORA-00214: controlfile ‘D:\ORACLE\ORADATA\FINANCE2\CONTROL01.CTL’ version 12905 inconsistent with file ‘D:\ORACLE\ORADATA\FINANCE2\CONTROL02.CTL’ version 12898
小类注释 开始:
这2个控制文件的版本不一致了。于是,我就将CONTROL02.CTL 和CONTROL01.CTL 这个2个文件分别重命名(新的文件名随意),然后,将CONTROL03.CTL复制2个出来,分别命名为CONTROL01.CTL 和CONTROL02.CTL 。
小类注释 结束:
C:\Documents and Settings\Administrator>set nls_lang=american_america.zhs16gbk
小类注释 开始:此set的作用是设置字符集。以便让下边系统返回的提示,都是英文的。
C:\Documents and Settings\Administrator>SVRMGRL
Oracle Server Manager Release 3.1.6.0.0 – Production
Copyright (c) 1997, 1999, Oracle Corporation. All Rights Reserved.
Oracle8i Enterprise Edition Release 8.1.6.0.0 – Production
With the Partitioning option
JServer Release 8.1.6.0.0 – Production
SVRMGR> STARTUP NOMOUNT;
ORA-01031: insufficient privileges
SVRMGR> SPOOL C:\ZHONGWH.TXT
SVRMGR> CONNECT INTERNAL/ORACLE
Connected.
SVRMGR> STARTUP NOMOUNT;
ORACLE instance started.
Total System Global Area 237008140 bytes
Fixed Size 70924 bytes
Variable Size 79572992 bytes
Database Buffers 157286400 bytes
Redo Buffers 77824 bytes
SVRMGR> ALTER DATABASE MOUNT;
Statement processed.
小类注释 开始:
请注意:在上一个注释中,执行 ALTER DATABASE MOUNT; 是报错的。
此时再执行ALTER DATABASE MOUNT; 就不报错了。
SVRMGR> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: ‘D:\ORACLE\ORADATA\FINANCE2\SYSTEM01.DBF’
ORA-01207: file is more recent than controlfile – old controlfile
SVRMGR> alter database backup controlfile to trace
2> ;
Statement processed.
小类注释 开始:
控制文件版本比SYSTEM01.DBF 文件中记录的版本低。需要重新建立控制文件了。
从此处可以看出,在SYSTEM01.DBF中,记录了控制文件的版本号。
alter database backup controlfile to trace 此命令执行后,
在D:\Oracle\admin\finance2\udump\ORA03256.TRC 文件中,生成了重新建立控制文件的sql, ORA03256.TRC 文件摘录如下:
Dump file D:\Oracle\admin\finance2\udump\ORA03256.TRC
Sat Mar 07 13:24:52 2009
ORACLE V8.1.6.0.0 – Production vsnsta=0
vsnsql=e vsnxtr=3
Windows 2000 Version 5.1 Service Pack 2, CPU type 586
Oracle8i Enterprise Edition Release 8.1.6.0.0 – Production
With the Partitioning option
JServer Release 8.1.6.0.0 – Production
Windows 2000 Version 5.1 Service Pack 2, CPU type 586
Instance name: finance2
Redo thread mounted by this instance: 1
Oracle process number: 14
Windows thread id: 3256, image: ORACLE.EXE
*** SESSION ID:(11.1) 2009-03-07 13:24:52.250
*** 2009-03-07 13:24:52.250
# The following commands will create a new control file and use it
# to open the database.
# Data used by the recovery manager will be lost. Additional logs may
# be required for media recovery of offline data files. Use this
# only if the current version of all online logs are available.
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE “FINANCE2″ NORESETLOGS NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 2
MAXDATAFILES 32
MAXINSTANCES 16
MAXLOGHISTORY 3630
LOGFILE
GROUP 1 ‘D:\ORACLE\ORADATA\FINANCE2\REDO03.LOG’ SIZE 1M,
GROUP 2 ‘D:\ORACLE\ORADATA\FINANCE2\REDO02.LOG’ SIZE 1M,
GROUP 3 ‘D:\ORACLE\ORADATA\FINANCE2\REDO01.LOG’ SIZE 1M
DATAFILE
‘D:\ORACLE\ORADATA\FINANCE2\SYSTEM01.DBF’,
‘D:\ORACLE\ORADATA\FINANCE2\RBS01.DBF’,
‘D:\ORACLE\ORADATA\FINANCE2\USERS01.DBF’,
‘D:\ORACLE\ORADATA\FINANCE2\TEMP01.DBF’,
‘D:\ORACLE\ORADATA\FINANCE2\TOOLS01.DBF’,
‘D:\ORACLE\ORADATA\FINANCE2\INDX01.DBF’,
‘D:\ORACLE\ORADATA\FINANCE2\DR01.DBF’,
‘D:\CWDATA\GS_ORADB_001.DBF’,
‘D:\CWDATA\GS_ORADB_IDX_001.DBF’,
‘D:\CWDATA\GS_ORADB_002.DBF’,
‘D:\CWDATA\GS_ORADB_IDX_002.DBF’,
‘D:\CWDATA\GS_ORADB_003.DBF’,
‘D:\CWDATA\GS_ORADB_IDX_003.DBF’,
‘D:\CWDATA\GS_ORADB_004.DBF’,
‘D:\CWDATA\GS_ORADB_IDX_004.DBF’,
‘D:\CWDATA\GS_ORADB_022.DBF’,
‘D:\CWDATA\GS_ORADB_IDX_022.DBF’
CHARACTER SET ZHS16GBK
;
ORA03256.TRC 文件摘录完毕。
截取ORA03256.TRC 文件中建立控制文件的sql, 放在了d:\ control.txt;中,此文件的内容如下:
CREATE CONTROLFILE REUSE DATABASE “FINANCE2″ NORESETLOGS NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 2
MAXDATAFILES 32
MAXINSTANCES 16
MAXLOGHISTORY 3630
LOGFILE
GROUP 1 ‘D:\ORACLE\ORADATA\FINANCE2\REDO03.LOG’ SIZE 1M,
GROUP 2 ‘D:\ORACLE\ORADATA\FINANCE2\REDO02.LOG’ SIZE 1M,
GROUP 3 ‘D:\ORACLE\ORADATA\FINANCE2\REDO01.LOG’ SIZE 1M
DATAFILE
‘D:\ORACLE\ORADATA\FINANCE2\SYSTEM01.DBF’,
‘D:\ORACLE\ORADATA\FINANCE2\RBS01.DBF’,
‘D:\ORACLE\ORADATA\FINANCE2\USERS01.DBF’,
‘D:\ORACLE\ORADATA\FINANCE2\TEMP01.DBF’,
‘D:\ORACLE\ORADATA\FINANCE2\TOOLS01.DBF’,
‘D:\ORACLE\ORADATA\FINANCE2\INDX01.DBF’,
‘D:\ORACLE\ORADATA\FINANCE2\DR01.DBF’,
‘D:\CWDATA\GS_ORADB_001.DBF’,
‘D:\CWDATA\GS_ORADB_IDX_001.DBF’,
‘D:\CWDATA\GS_ORADB_002.DBF’,
‘D:\CWDATA\GS_ORADB_IDX_002.DBF’,
‘D:\CWDATA\GS_ORADB_003.DBF’,
‘D:\CWDATA\GS_ORADB_IDX_003.DBF’,
‘D:\CWDATA\GS_ORADB_004.DBF’,
‘D:\CWDATA\GS_ORADB_IDX_004.DBF’,
‘D:\CWDATA\GS_ORADB_022.DBF’,
‘D:\CWDATA\GS_ORADB_IDX_022.DBF’
CHARACTER SET ZHS16GBK
;
小类注释 完毕。
SVRMGR> @d:\control.txt;
CREATE CONTROLFILE REUSE DATABASE “FINANCE2″ NORESETLOGS NOARCHIVELOG
*
ORA-01503: CREATE CONTROLFILE failed
ORA-01100: database already mounted
小类注释 开始:
由于此时database已经mounted了,不能重新建立控制文件,需要shutdown 后,在 instance nomount的状态下,执行此@d:\control.txt;
小类注释 完毕。
SVRMGR> shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SVRMGR> STARTUP NOMOUNT;
ORACLE instance started.
Total System Global Area 237008140 bytes
Fixed Size 70924 bytes
Variable Size 79572992 bytes
Database Buffers 157286400 bytes
Redo Buffers 77824 bytes
SVRMGR> @d:\control.txt;
Statement processed.
SVRMGR> ALTER DATABASE MOUNT;
ALTER DATABASE MOUNT
*
ORA-01100: database already mounted
SVRMGR> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: ‘D:\ORACLE\ORADATA\FINANCE2\SYSTEM01.DBF’
SVRMGR> RECOVER DATABASE;
ORA-00283: recovery session canceled due to errors
ORA-00600: internal error code, arguments: [3020], [8388915], [1], [3184], [1138
], [76], [], []
SVRMGR> RECOVER DATABASE UNTIL CANCEL
ORA-00279: change 872316 generated at 03/25/2008 13:04:00 needed for thread 1
ORA-00289: suggestion : D:\ORACLE\ORA81\RDBMS\ARC03184.001
ORA-00280: change 872316 for thread 1 is in sequence #3184
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: ‘D:\ORACLE\ORADATA\FINANCE2\SYSTEM01.DBF’
小类注释 开始:
RECOVER DATABASE; 和RECOVER DATABASE UNTIL CANCEL 都不能用,看来只能对init.ora添加隐含参数,强行启动了。
在初始化配置文件中(init.ora)加上:
_allow_resetlogs_corruption=true
_corrupted_rollback_segments=(将所有rollback_segments=(…)的内容加到这里)
比如,客户的这里,是如下的设置:
_allow_resetlogs_corruption=true
_corrupted_rollback_segments=( RBS0, RBS1, RBS2, RBS3, RBS4, RBS5, RBS6 )
在init.ora文件的最后添加入以上信息即可。
小类注释 结束:
SVRMGR> SHUTDOWN IMMEDIATE
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SVRMGR> STARTUP NOMOUNT;
ORACLE instance started.
Total System Global Area 237008140 bytes
Fixed Size 70924 bytes
Variable Size 79572992 bytes
Database Buffers 157286400 bytes
Redo Buffers 77824 bytes
SVRMGR> ALTER DATABASE MOUNT;
Statement processed.
SVRMGR> ALTER DATABASE OPEN;
ALTER DATABASE OPEN
*
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SVRMGR> ALTER DATABASE OPEN RESETLOGS
2> ;
Statement processed.
SVRMGR> SELECT COUNT(*) FROM LC0049999.LSCONF;
COUNT(*)
———-
466
1 row selected.
SVRMGR> SPOOL OFF
SVRMGR>
至此,SELECT COUNT(*) FROM LC0049999.LSCONF 能出来结果,就说明instance 已经成功得 mount database了。浪潮软件肯定能进入了。
然后,运行exp命令,导出lc0049999的数据,再卸载oracle ,再重新安装oracle ,再导入数据就可以了。
另外请注意:
1.此方案属于不完全恢复数据,可能会丢失一部分数据。请慎用。
2.此方案是恢复oracle816的方案,若是用在oracle 9或者oracle 10g中,因为oracle 9i或者oracle 10g对初始化参数文件改变了管理方式,变为了spfile.ora的方式,而此文件是2进制的文件,不能手工编辑。在修改初始化参数时,oracle9或者oracle10将与oracle 8不一样。
原创文章,转载请注明: 转载自浪潮888博客
本文链接地址: oracle816 正在使用时断电,不完全恢复案例记录
文章的脚注信息由WordPress的wp-posturl插件自动生成