如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638    QQ号:47079569    邮箱:service@parnassusdata.com

    [概要] 本文中主要介绍Windows平台上的oracle数据库,所有的控制文件都损坏时的修复方法。   ・将控制文件镜像化,其中一部分损坏时   --> Krown:71181 へ ・ 所有的控制文件均损坏时--> Krown:71490  へ   ※在初始化参数文件中,类似 ---- control_files='D:\o920\oradata\ora9204\control01.ctl','D:\o920\oradata\ora9204\control02.ctl'一样,只要指定了多个文件的话就会镜像化 ----     [目标版本] Oracle9i Database Release2 (9.2) Oracle9i Database Release1 (9.0.1) Oracle8i Enterprise Edition/Oracle8i Standard Edition 8.1 Oracle8 Enterprise Edition/Oracle8 Standard Edition 8.0 Oracle7 Server/Oracle7 Workgroup Server 7.3     [目标平台] Windows     [修复对策] 控制文件都损坏时,会输出以下报错。 ---- ORA-00202: controlfile: 'D:\o920\oradata\ora9204\control01.ctl' ORA-27041: unable to open file OSD-04002: 无法启动文件 O/S-Error: (OS 2)找不到指定文件。 ----   满足以下条件时,请查看【恢复对策A】 ・这是用冷备份或者 alter database backup controlfile to '文件名'来备份控制文件的归档日志模式   满足以下条件时,请查看【恢复对策B】 ・通过alter database backup controlfile to trace;获得控制文件的备份 ・完全没有备份 ・非归档日志文件模式     [修复对策A] 通过 冷备份或者 alter database backup controlfile to '文件名'备份控制控制文件,并且这是归档日志模式的修复方法。   假设环境如下所示: %ORACLE_HOME%                   D:\o920 %ORACLE_SID%                    ora9204 储存备份的地址      D:\BACKUP Restore备份的地址  D:\o920\oradata   如果不知道restore的地址时,请mount数据库,查看 v$datafile 的 NAME。 ---- SQL> select name from v$datafile; NAME --------------------------------------------- D:\O920\ORADATA\ORA9204\SYSTEM01.DBF D:\O920\ORADATA\ORA9204\UNDOTBS01.DBF D:\O920\ORADATA\ORA9204\DRSYS01.DBF D:\O920\ORADATA\ORA9204\INDX01.DBF D:\O920\ORADATA\ORA9204\TOOLS01.DBF D:\O920\ORADATA\ORA9204\USERS01.DBF D:\O920\ORADATA\ORA9204\XDB01.DBF ----   A-1)数据库启动时,shut down。 (控制文件损坏时,无法执行 shutdown normal) ---- SQL> shutdown abort ORACLE实例shut down。 ----   A-2)将备份完成的控制文件restore到 D:\o920\oradata 中。 ---- C:\>copy D:\BACKUP\CONTROL1.bak D:\o920\oradata\ora9204\CONTROL01.CTL 是否覆盖D:\o920\oradata\ora9204\CONTROL01.CTL ,覆盖 (Yes/No/All): y <--y 复制1个文件。 ----   A-3)查看指定了初始化参数文件的控制文件的部分。 这次的情况,因为只restore了ora9204\CONTROL01.CTL,对应部分如下所示。 ---- control_files='D:\o920\oradata\ora9204\ora9204\CONTROL01.CTL' ----   A-4)mount数据库 ---- SQL> startup mount ----   ※如果,上述3个顺序中,没有指定正确的控制文件的位置时,会输出以下ORA-205。 ---- SQL> startup ORACLE instance started. Total System Global Area  135339844 bytes Fixed Size                   454468 bytes Variable Size             109051904 bytes Database Buffers           25165824 bytes Redo Buffers                 667648 bytes ORA-00205: error in identifying controlfile, check alert log for more info ----   A-5)执行recover database using backup controlfile until cancel;不完全恢复。   执行recover database using backup controlfile until cancel;后, 按下 Enter,请应用归档日志文件。 ---- SQL> recover database using backup controlfile until cancel; ORA-00279: 变更943184(11/24/2003 19:19:50时生成)时需要线程1 ORA-00289: 需要讨论日志文件:D:\O920\ORADATA\ORA9204\ARCHIVE1_19.DBF ORA-00280: 变更943184(线程1)存在于顺序编号19之中。 ORA-00278: 日志文件'D:\O920\ORADATA\ORA9204\ARCHIVE1_18.DBF'不需要这样的恢复   指定日志: {<RET>=suggested | filename | AUTO | CANCEL}          <--按下Enter,应用归档日志   ORA-00279: 变更943186(11/24/2003 19:19:51时生成)时需要线程1 ORA-00289: 需要讨论日志文件:D:\O920\ORADATA\ORA9204\ARCHIVE1_20.DBF ORA-00280: 变更943186(线程1)存在于顺序编号20。 ORA-00278:日志文件'D:\O920\ORADATA\ORA9204\ARCHIVE1_19.DBF'不需要这些恢复   指定日志: {<RET>=suggested | filename | AUTO | CANCEL}          <--按下Enter,应用归档日志   ORA-00279: 变更943190(11/24/2003 19:19:57时生成)时需要线程1 ORA-00289: 需要讨论的日志文件:D:\O920\ORADATA\ORA9204\ARCHIVE1_21.DBF ORA-00280:变更943190((线程1)存在于顺序编号21。 ORA-00278: 日志文件'D:\O920\ORADATA\ORA9204\ARCHIVE1_20.DBF'不需要这些恢复   指定日志:: {<RET>=suggested | filename | AUTO | CANCEL}          <-按下Enter,应用归档日志   ※ ORA-00308:无法启动归档日志D:\O920\ORADATA\ORA9204\ARCHIVE1_21.DBF。 ORA-27041: 无法启动文件。 OSD-04002: 无法启动文件 O/S-Error: 无法发现(OS 2)指定的文件。   ORA-01547: 警告: RECOVER成功OPEN RESETLOGS出现以下错误。 ORA-01152: 文件1没有从旧备份中restore。 ORA-01110:数据文件1: 'D:\O920\ORADATA\ORA9204\SYSTEM01.DBF' ----   ※输出ORA-308,要求还么有制成的归档REDO日志。 这时,重新执行recover database using backup controlfile until cancel; 明确指定online REDO日志的绝对路径。 详细内容请参考Krown:34587。   对应的online REDO日志可以通过 alert.log 查看。 从上述的信息中,要求顺序编号21。通过alert.log 查看sequence 21 相关内容。 ---- Mon Nov 24 19:19:57 2003 Current log# 3 seq# 21 mem# 0: D:\O920\ORADATA\ORA9204\REDO03.LOG ---- 记录的文件路径对应的online REDO日志的绝对路径。   重新、recover database using backup controlfile until cancel; ---- SQL> recover database using backup controlfile until cancel; ORA-00279: 変更943190(11/24/2003 19:19:57时生成)需要线程1 ORA-00289: 需要讨论的日志文件:D:\O920\ORADATA\ORA9204\ARCHIVE1_21.DBF ORA-00280: 変更943190(线程1)存在于顺序编号21中。   指定日志: {<RET>=suggested | filename | AUTO | CANCEL} D:\O920\ORADATA\ORA9204\REDO03.LOG                     <--指定online REDO 日志的绝对路径 应用日志。 介质恢复完成。 ----   A-6)通过resetlogs 启动数据库 ---- SQL> alter database open resetlogs; 不过数据库。 ----   A-7)使用控制文件的备份进行恢复时,删除所有控制文件中的本地管理临时表区域的临时文件信息。 因此,需要重新追加本地管理临时表区域的临时文件。   在这个状态下使用临时表区域,执行sort处理的话,就会发生ORA-25153错误。 ---- SQL> select count(*) from TEST; select count(*) from TEST * 行1中发生了错误。: ORA-25153: 临时表区域为空。 ---- 执行 alter tablespace <临时表区域名> add tempfile '<文件名>' size <文件尺寸> reuse; ---- SQL> alter tablespace temp add tempfile 'D:\o920\oradata\ora9204\TEMP.DBF' 2  size 300M reuse; 变更表区域。 ---- 详细内容请参考Krown:66029。   A-8)马上终止数据库,制成数据库整体的备份。不这样的话,reset日志后,就无法恢复已变更的项目了。详细备份请参考Krown:70947。   以上工作完成。 没有镜像化控制文件时,请执行镜像化。     [修复对策B] 获得 alter database backup controlfile to trace; 中控制文件的备份。或者完全没有备份,或者非归档日志模式下控制文件全部损坏时的修复方法。   假设环境如下所示: %ORACLE_HOME%                   D:\o920 %ORACLE_SID%                    ora9204 储存备份的地址      D:\BACKUP Restore备份的地址  D:\o920\oradata   不知道restore地址的情况,mount数据库,请查看 v$datafile 的NAME 列。 ---- SQL> select name from v$datafile; NAME --------------------------------------------- D:\O920\ORADATA\ORA9204\SYSTEM01.DBF D:\O920\ORADATA\ORA9204\UNDOTBS01.DBF D:\O920\ORADATA\ORA9204\DRSYS01.DBF D:\O920\ORADATA\ORA9204\INDX01.DBF D:\O920\ORADATA\ORA9204\TOOLS01.DBF D:\O920\ORADATA\ORA9204\USERS01.DBF D:\O920\ORADATA\ORA9204\XDB01.DBF ----   B-1)启动了实例时,shutdown。 (控制文件损坏时,无法执行 shutdown normal) ---- SQL> shutdown abort ORACLE实例shutdown完成。 ----   B-2)通过alter database backup controlfile to trace;将 获得的控制文件的备份保持在脚本中。   例:create_cf.sql CREATE CONTROLFILE REUSE DATABASE "ORA9204" NORESETLOGS  ARCHIVELOG MAXLOGFILES 5 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 1 MAXLOGHISTORY 226 LOGFILE GROUP 1 ( 'D:\O920\ORADATA\ORA9204\REDO01_B.LOG', 'D:\O920\ORADATA\ORA9204\REDO01_A.LOG' ) SIZE 100M, GROUP 2 ( 'D:\O920\ORADATA\ORA9204\REDO02_A.LOG', 'D:\O920\ORADATA\ORA9204\REDO02_B.LOG' ) SIZE 100M, GROUP 3 ( 'D:\O920\ORADATA\ORA9204\REDO03_A.LOG', 'D:\O920\ORADATA\ORA9204\REDO03_B.LOG' ) SIZE 100M DATAFILE 'D:\O920\ORADATA\ORA9204\SYSTEM01.DBF', 'D:\O920\ORADATA\ORA9204\UNDOTBS01.DBF', 'D:\O920\ORADATA\ORA9204\CWMLITE01.DBF', 'D:\O920\ORADATA\ORA9204\DRSYS01.DBF', 'D:\O920\ORADATA\ORA9204\EXAMPLE01.DBF', 'D:\O920\ORADATA\ORA9204\INDX01.DBF', 'D:\O920\ORADATA\ORA9204\ODM01.DBF', 'D:\O920\ORADATA\ORA9204\TOOLS01.DBF', 'D:\O920\ORADATA\ORA9204\USERS01.DBF', 'D:\O920\ORADATA\ORA9204\XDB01.DBF'; ;   [注意]
  1. 如果没有对控制文件镜像化时,备份也无法使用时,参考上述例子,OS命令以及Explorer等,查看实际存在的文件,请手动制成脚本
 
  1. 上述例子中,归档日志节点中的例。非归档日志模式事,需要在NORESETLOGS NOARCHIVELOG 中编辑NORESETLOGS ARCHIVELOG。
 
  1. 通过trace 选项获得的控制文件的备份时,有多个CREATE CONTROLFILE语句
---- CREATE CONTROLFILE REUSE DATABASE "ORA9204" NORESETLOGS  ARCHIVELOG ----                       ^^^^^^^^^^^ NORESETLOGS 指定可以使用REDO日志文件的情况。   ---- CREATE CONTROLFILE REUSE DATABASE "ORA9204" RESETLOGS  ARCHIVELOG ----                       ^^^^^^^^^ RESETLOGS为无法使用online REDO文件时。 有RESETLOGS选项,制成控制文件时,需要添加USING BACKUP CONTROLFILE,执行数据库恢复。 顺序请参考Krown:39499。   B-3)nomount数据库。 ---- SQL> startup nomount 启动ORACLE实例。 Total System Global Area  135339844 bytes Fixed Size                   454468 bytes Variable Size             109051904 bytes Database Buffers           25165824 bytes Redo Buffers                 667648 bytes ----   B-4)执行已制成的控制文件的脚本。 ---- SQL> @create_cf.sql 制成控制文件。 ----   B-5)之前的 shutdown 通过 abort 选项,执行 recover 命令 ---- SQL> recover database; ----   如果需要恢复的话。 这时,请执行B-7。   ---- SQL>recover database; ORA-00283 由于故障,取消了恢复会话。 ORA-00264 不需要恢复。 ----   B-6)启动数据库 ---- SQL> alter database open; 变更数据库。 ----   B-7)CREATE CONTROLFILE语句中无法指定临时文件。 因此通过CREATE CONTROLFILE语句重新制成控制文件时,需要重新追加临时文件。 详细内容请参考Krown:66029。   通过trace 选项获得的控制文件的备份中,如下所示,会记录重新追加临时文件的命令。参考这个命令,追加临时文件。   ---- # Commands to add tempfiles to temporary tablespaces. # Online tempfiles have complete space information. # Other tempfiles may require adjustment. ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\O920\ORADATA\ORA9204\TEMP.DBF' SIZE 314572800 REUSE AUTOEXTEND OFF; ---- 参考控制文件的备份中记录的上述命令。 ---- SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\O920\ORADATA\ORA9204\TEMP.DBF' SIZE 314572800 REUSE AUTOEXTEND OFF; 变更表区域。 ----   由此,工作完成。 工作完成后,请制成备份。 另外,没有镜像化的话,请执行镜像化。