Oracle的控制文件controlfile有以下4种备份恢复方法。注意:本文模拟controlfile故障均是直接删除控制文件。1. 使用RMAN工具备份恢复controlfileRMAN参数选项”CONFIGURE CONTROLFILE AUTOBACKUP ON/OFF”定义为”ON”,则任意一次RMAN备份都会自动备份controlfile,比如备份tablespace;定义为”OFF”,则不会自动备份controlfile,需要手动备份。使用RMAN工具备份controflile的命令如下#rman target /RMAN>backup current controlfile;使用RMAN备份集恢复controlfile的步骤如下#rman target /RMAN>startup nomountRMAN>set dbid=******RMAN>restore controlfile from autobackup;RMAN>alter database mount;RMAN>recover database;RMAn>alter database open open resetlogs;注意:使用RMAN恢复时,必须有instance的DBID。DBID是唯一的,可以通过v$instance视图确定。Controlfile故障后无法查询v$instance视图,所以故障前须确知DBID,否则会遇到麻烦,呵呵。2. 使用SQL*PLUS命令备份至指定文件SQLPLUS命令备份controlfile有两种方式,这里先介绍备份为具体文件的方法。使用SQL命令备份controlfile,步骤如下:#sqlplus “/as sysdba”SQL> alter database backup controlfile to 'd:backup.ctl';使用SQL命令恢复controlfile,步骤如下:1> 使用备份文件”backup.ctl”直接copy。注意:拷贝文件的名称、路径、份数与原controlfile完全一致。2> 使用下列命令进行恢复SQL> startup mount;ORA-32004: obsolete and/or deprecated parameter(s) specifiedORACLE例程已经启动。Total System Global Area 452984832 bytesFixed Size 1249512 bytesVariable Size 155193112 bytesDatabase Buffers 289406976 bytesRedo Buffers 7135232 bytes数据库装载完毕。SQL> recover database using backup controlfile;ORA-00279:更改718494 (在07/31/2008 22:21:53生成)对于线程1是必需的ORA-00289:建议: D:ORACLEPRODUCT10.2.0ARCHIVELOG1_2_661388974.ARCORA-00280:更改718494 (用于线程1)在序列#2中指定日志: {<RET>=suggested | filename | AUTO | CANCEL}注意:提示输入redolog,但一般情况下输入建议的archivelog会报错 在此处输入的redolog为状态为current的online redolog 通过v$log,v$logfile视图确定当前状态为CURRENT的redolog文件D:ORACLEPRODUCT10.2.0ORADATAZPREDO01.LOG已应用的日志。完成介质恢复。SQL> alter database open resetlogs;数据库已更改。SQL>3. 使用SQL*PLUS命令备份至trace文件备份控制文件步骤如下:#sqlplus “/as sysdba”SQL> alter database backup controlfile to trace;注意:备份完毕后会在$ORACLE_HOME/admin/*sid*/udump目录下生成对应的trace文件使用trace备份集恢复controlfile的步骤如下:1> 打开备份controlfile时生成的trace文件2> 找到标记”Set #1. NORESETLOGS case”部分。注意:一般情况下trace文件里都会有2部分相关内容恢复时先执行”Set #1. NORESETLOGS case”部分3> 运行上述标记部分的sql语句SQL>STARTUP NOMOUNTSQL>CREATE CONTROLFILE REUSE DATABASE "ZP" NORESETLOGS ARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 100MAXINSTANCES 8MAXLOGHISTORY 292LOGFILEGROUP 1 'D:ORACLEPRODUCT10.2.0ORADATAZPREDO01.LOG' SIZE 50M,GROUP 2 'D:ORACLEPRODUCT10.2.0ORADATAZPREDO02.LOG' SIZE 50M,GROUP 3 'D:ORACLEPRODUCT10.2.0ORADATAZPREDO03.LOG' SIZE 50MDATAFILE'D:ORACLEPRODUCT10.2.0ORADATAZPSYSTEM01.DBF','D:ORACLEPRODUCT10.2.0ORADATAZPUNDOTBS01.DBF','D:ORACLEPRODUCT10.2.0ORADATAZPSYSAUX01.DBF','D:ORACLEPRODUCT10.2.0ORADATAZPUSERS01.DBF','D:ORACLEPRODUCT10.2.0ORADATAZPTBS1.DBF'CHARACTER SET ZHS16GBK;SQL>VARIABLE RECNO NUMBER;SQL>EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');RECOVER DATABASE;SQL>ALTER SYSTEM ARCHIVE LOG ALL;SQL>ALTER DATABASE OPEN;SQL>ALTER TABLESPACE TEMP ADD TEMPFILE 'D:ORACLEPRODUCT10.2.0ORADATAZPTEMP01.DBF'SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
Set #2. RESETLOGS caseRECOVER DATABASE USING BACKUP CONTROLFILE
ALTER DATABASE OPEN RESETLOGS;
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/ora10g/temp01.dbf'
SIZE 2056192 REUSE AUTOEXTEND ON NEXT 8192 MAXSIZE 32767M;
4. 使用COPY或是cp命令进行控制文件的备份 使用操作系统的copy或是cp命令直接备份controfile,恢复的方法与使用”alter database backup controlfile to filename”备份文件步骤命令一样。