oracle816 正在使用时断电,不完全恢复案例记录

操作系统: 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插件自动生成



This entry was posted in 浪潮文档. Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>