如果自己搞不定可以找诗檀软件专业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’;
;
[注意]
- 如果没有对控制文件镜像化时,备份也无法使用时,参考上述例子,OS命令以及Explorer等,查看实际存在的文件,请手动制成脚本
- 上述例子中,归档日志节点中的例。非归档日志模式事,需要在NORESETLOGS NOARCHIVELOG 中编辑NORESETLOGS ARCHIVELOG。
- 通过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;
变更表区域。
—-
由此,工作完成。
工作完成后,请制成备份。
另外,没有镜像化的话,请执行镜像化。
Comment