oracle控制文件的恢复
oracle控制文件的恢复控制文件包含数据库的结构信息,这些文件对数据库而言至关重要。如若丢失控制文件,则不能打开数据库。
控制文件的丢失分两种。第一种是部分控制文件丢失(只丢失了1个或者2个);另外一种是所有控制文件都丢失。
默认情况下,数据库会自动生成3个控制文件,但是会在同一目录下,本着数据安全的需求,强烈建议将3个控制文件放在不同的磁盘里。
移动控制文件的方法为:
SQL>> 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL',
'd:\ORACLE\ORCL\CONTROL02.CTL',
'e:\ORACLE\ORCL\CONTROL03.CTL'
scope=spfile;
因为控制文件和数据且文件一样,不能再联机状态下移动。故需要先shutdown 数据库,然后进行移动,最后Startup即可。
1.部分控制文件丢失后的恢复
同样的,先shutdown,然后删除一个控制文件CONTROL03.CTL ,重启数据库报错。
SQL> startup
ORA-32004: obsolete or deprecatedparameter(s) specified for RDBMS instance
ORACLE 例程已经启动。
Total System Global Area778387456 bytes
Fixed>
Variable> Database Buffers 511705088 bytes
Redo Buffers 5259264 bytes
ORA-00205: ?????????, ??????, ???????
首先要解决的问题是ORA-00205:?????????, ??????, ???????
?表明字符集除了问题。解决方法如下:
SQL>>
Session>
SQL>> alter database mount
ERROR at line 1:
ORA-00205: error in> 隐刀数据库进入mount状态,报不能识别控制文件的错误。将现有的控制文件CONTROL01.CTL复制一份改名为CONTROL03.CTL。
对恢复数据库提示没有进行mount状态。
SQL> recover database;
ORA-01507: database not mounte
启动数据库到mount状态下
SQL>>
Database> 然后对恢复数据库
SQL> recover database;
ORA-00283: recovery session canceled due toerrors
ORA-00264: no recovery required
由于是正常关闭数据库进行的测试,数据库不需要执行恢复。
SQL> conn sys/oracle as sysdba;
已连接。
SQL>> 数据库已更改。
SQL> select * from global_name;
GLOBAL_NAME
-----------------------------------------------------------------------------
ORCL
2.所有控制文件丢失后的恢复
2.1方法一:重新创建控制文件来恢复
用这种方法也有2种方式来实现,第一种是直接自己手动编写脚本来创建控制文件,但前提是对数据库的重做日志、数据文件的目录要非常清楚;另外一种方式是在数据库正常状态时,备份一下创建控制文件脚本到跟踪文件,这样创建控制文件的所有脚本信息都会很完整,就无需手工编写了,但前提自然是管理员要有觉悟,提前备份一份创建控制文件到trance文件。
我们直接测试第二种方式:
我们查看一下生成的trace文件的目录。
SQL> show parameteruser_dump_dest;
NAME TYPE VALUE
------------------------ ----------- ----------------------
user_dump_dest string c:\app\administrator\diag\rdbms\orcl\orcl\trace
然后是备份创建控制文件的脚本到跟踪文件中
SQL>> 数据库已更改。
我们关闭数据库,然后删除所有的控制文件。
然后是到c:\app\administrator\diag\rdbms\orcl\orcl\trace目录中寻找刚才生成有创建控制文件脚本的跟踪文件。经过一一寻找验证之后,发现是orcl_ora_3696.trc这个文件。(此处要注意:在实际环境下,应该是执行上述命令之后,立即保存到特定目录中已被恢复使用)。
接下来我们打开这个trace文件,可以找到相关的脚本信息:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSEDATABASE "ORCL" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 (
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG',
'C:\APP\ADMINISTRATOR\ORADATA\XC2\REDO01.LOG'
)> GROUP 2 (
'C:\APP\ADMINISTRATOR\ORADATA\XC2\REDO02.LOG',
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG'
)> GROUP 3 (
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG',
'C:\APP\ADMINISTRATOR\ORADATA\XC2\REDO03.LOG'
)> DATAFILE
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF',
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF',
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF',
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF',
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM02.DBF',
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX02.DBF',
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS02.DBF',
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS02.DBF',
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF'
CHARACTER SET ZHS16GBK;
执行之后会提示:控制文件已创建。此脚本还需注意开头部分的STARTUP NOMOUNT 命令,必须在nomount状态执行才能创建控制文件。
SQL> VARIABLE RECNO NUMBER;
SQL> EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP
','ON');
PL/SQL 过程已成功完成。
此处是执行一个PL/SQL 的存储过程,目的是执行DBMS_BACKUP_RESTORE.DBMS_BACKUP_RESTORE包,让RMAN自动备份控制文件。
当然此处我们是手工备份与恢复,所以不进行如上操作也可以。
接下来我们就开始恢复数据库
SQL> recover database;
ORA-00283: recovery session canceled due toerrors
ORA-00264: no recovery required
此时根据提示可知,数据库无需恢复。
SQL>>
Database> SQL> conn sys/oracle as sysdba;
已连接。
SQL> select * from global_name;
GLOBAL_NAME
-------------------------------------------------------------------------------
ORCL
目前已是正常状态了。
方法二:通过备份的控制文件进行恢复
同样的,先shutdown,然后删除所有的控制文件,重启数据库报错。
SQL> startup
ORA-32004: obsolete or deprecatedparameter(s) specified for RDBMS instance
ORACLE 例程已经启动。
Total System Global Area778387456 bytes
Fixed>
Variable> Database Buffers 511705088 bytes
Redo Buffers 5259264 bytes
ORA-00205: ?????????, ??????, ???????
先修改字符集的回话语言。
SQL>>
Session>
SQL>> alter database mount
ERROR at line 1:
ORA-00205: error in> 提示不能识别控制文件,这时所有的控制文件都已丢失,只能依靠备份的控制文件,将之前备份的控制文件CONTROL02.BAK改名复制到控制文件原目录中。
如若不知道3个控制文件的原目录,可以通过警告日志alertORCL.log来查看。
执行命令show parameter background_dump_dest,查看警告日志的目录。
SQL>show parameter background_dump_dest;
NAME TYPE
----------------------------------------------------------
VALUE
------------------------------
background_dump_dest string
c:\app\administrator\diag\rdbm
s\orcl\orcl\trace
打开警告日志,在最后看到如下信息:
Thu May23 17:12:21 2013
ORA-00210:cannot open the specified control file
ORA-00202:control file: 'C:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL'
ORA-27041:unable to open file
OSD-04002:无法打开文件
O/S-Error:(OS 2) 系统找不到指定的文件。
ORA-00210:cannot open the specified control file
ORA-00202:control file: 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL03.CTL'
ORA-27041:unable to open file
OSD-04002:无法打开文件
O/S-Error:(OS 2) 系统找不到指定的文件。
ORA-00210:cannot open the specified control file
ORA-00202:control file: 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL'
ORA-27041:unable to open file
OSD-04002:无法打开文件
O/S-Error:(OS 2) 系统找不到指定的文件。
ORA-205signalled during:> 由此可知;3个控制文件的目录。
改名复制完控制文件之后,启动数据库到mount状态,如后恢复。
SQL> recover database using backupcontrolfile;
ORA-00911: invalid character
出现上述问题:原因是controlfile后面的分号是中文模式下输入导致的,千万注意!
恢复数据库
SQL> recover database;
ORA-00283: recovery session canceled due toerrors
ORA-01610: recovery using the BACKUPCONTROLFILE option must be done
由上可知必须使用控制文件恢复。
SQL> recover database using backupcontrolfile;
ORA-00279: change 2426235 generated at05/23/2013 14:31:12 needed for thread 1
ORA-00289: suggestion :C:\ORACLE\ORCL\ARCH\ARC0000000068_0806146542.0001
ORA-00280: change 2426235 for thread 1 isin sequence #68
Specify log: {=suggested |filename | AUTO | CANCEL}
Auto(此处可选择自动寻找归档日志)
ORA-00279: change 2433122 generated at05/24/2013 10:38:10 needed for thread 1
ORA-00289: suggestion :C:\ORACLE\ORCL\ARCH\ARC0000000069_0806146542.0001
ORA-00280: change 2433122 for thread 1 isin sequence #69
ORA-00278: log file'C:\ORACLE\ORCL\ARCH\ARC0000000068_0806146542.0001' no
longer needed for this recovery
ORA-00279: change 2435842 generated at05/24/2013 13:14:00 needed for thread 1
ORA-00289: suggestion :C:\ORACLE\ORCL\ARCH\ARC0000000070_0806146542.0001
ORA-00280: change 2435842 for thread 1 isin sequence #70
ORA-00278: log file'C:\ORACLE\ORCL\ARCH\ARC0000000069_0806146542.0001' no
longer needed for this recovery
再执行一次恢复命令
SQL> recover database using backupcontrolfile;
ORA-00279: change 2459108 generated at05/24/2013 13:50:09 needed for thread 1
ORA-00289: suggestion :C:\ORACLE\ORCL\ARCH\ARC0000000071_0806146542.0001
ORA-00280: change 2459108 for thread 1 isin sequence #71
Specify log: {=suggested |filename | AUTO | CANCEL}
C:\app\Administrator\oradata\orcl\REDO01.LOG(此处是提示要寻找标号为71的归档日志,但是打开归档日志目录发现最大的编号才是70,说明编号为71的归档信息还在redolog里面,指定正在使用的redolog目录即可。又因为目前不知道正在使用的redolog是哪个文件,此处是先从REDO01.LOG开始尝试)
ORA-00310: archived log contains sequence70; sequence 71 required
ORA-00334: archived log:'C:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG'
SQL> recover database using backupcontrolfile;
ORA-00279: change 2459108 generated at05/24/2013 13:50:09 needed for thread 1
ORA-00289: suggestion :C:\ORACLE\ORCL\ARCH\ARC0000000071_0806146542.0001
ORA-00280: change 2459108 for thread 1 isin sequence #71
Specify log: {=suggested |filename | AUTO | CANCEL}
C:\app\Administrator\oradata\orcl\REDO02.LOG(尝试失败之后,换2号重做日志,提示成功)
Log applied.
Media recovery complete.
改变数据库为open状态:
SQL>> alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGSoption for database open
提示错误:启动open状态必须设置参数RESETLOGS or NORESETLOGS。
使用resetlogs 会导致归档日志的编号归零,重新从1开始编号。使用noresetlogs则不会打断原有的归档日志编号的顺序而继续编号。
SQL>> alter database open noresetlogs
ERROR at line 1:
ORA-01588: must use RESETLOGS option fordatabase open
SQL>>
Database> 经过测试发现,数据库恢复之后,只能通过resetlogs;启动数据库到open状态。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORA-32004: obsolete or deprecatedparameter(s) specified for RDBMS instance
ORACLE instance started.
Total System Global Area778387456 bytes
Fixed>
Variable> Database Buffers 511705088 bytes
Redo Buffers 5259264 bytes
数据库装载完毕。
数据库已经打开。
SQL> archive log list;
数据库日志模式存档模式
自动存档启用
存档终点 c:\oracle\orcl\arch
最早的联机日志序列 1
下一个存档日志序列 1
当前日志序列 1
通过查看归档信息,发现归档日志编号确实已归零。
页:
[1]