Oracle Study之案例--重建数据库控制文件

系统环境:

操作系统: Linux RH6

数据库:   Oracle 11gR2

   案例分析:

          数据库中所有的控制文件被意外破坏,非归档的库,在有trace备份的情况下,重建控制文件。

1、控制文件trace脚本

[oracle@rh6 ~]$ cat crctr.sql CREATE CONTROLFILE REUSE DATABASE "TEST3" NORESETLOGS  NOARCHIVELOG    MAXLOGFILES 10    MAXLOGMEMBERS 5    MAXDATAFILES 300    MAXINSTANCES 1    MAXLOGHISTORY 292LOGFILE  GROUP 1 '/u01/app/oracle/oradata/test3/redo01a.log'  SIZE 100M BLOCKSIZE 512,  GROUP 2 '/u01/app/oracle/oradata/test3/redo02a.log'  SIZE 100M BLOCKSIZE 512-- STANDBY LOGFILEDATAFILE  '/u01/app/oracle/oradata/test3/system01.dbf',  '/u01/app/oracle/oradata/test3/sysaux01.dbf',  '/u01/app/oracle/oradata/test3/undotbs01.dbf',  '/u01/app/oracle/oradata/test3/users01.dbf'CHARACTER SET ZHS16GBK;

2、启动Instance到nomount,重建controlfile

10:59:05 SYS@ test3 >startup nomount;ORACLE instance started.Total System Global Area  313860096 bytesFixed Size                  1336232 bytesVariable Size             213912664 bytesDatabase Buffers           92274688 bytesRedo Buffers                6336512 bytes10:59:41 SYS@ test3 >@/home/oracle/crctr.sqlControl file created.

3、告警日志

......CREATE CONTROLFILE REUSE DATABASE "TEST3" NORESETLOGS  NOARCHIVELOG    MAXLOGFILES 10    MAXLOGMEMBERS 5    MAXDATAFILES 300    MAXINSTANCES 1    MAXLOGHISTORY 292LOGFILE  GROUP 1 '/u01/app/oracle/oradata/test3/redo01a.log'  SIZE 100M BLOCKSIZE 512,  GROUP 2 '/u01/app/oracle/oradata/test3/redo02a.log'  SIZE 100M BLOCKSIZE 512-- STANDBY LOGFILEDATAFILE  '/u01/app/oracle/oradata/test3/system01.dbf',  '/u01/app/oracle/oradata/test3/sysaux01.dbf',  '/u01/app/oracle/oradata/test3/undotbs01.dbf',  '/u01/app/oracle/oradata/test3/users01.dbf'CHARACTER SET ZHS16GBKWARNING: Default Temporary Tablespace not specified in CREATE DATABASE commandDefault Temporary Tablespace will be necessary for a locally managed database in future releaseWed Jan 07 11:00:02 2015Successful mount of redo thread 1, with mount id 991126251Completed: CREATE CONTROLFILE REUSE DATABASE "TEST3" NORESETLOGS  NOARCHIVELOG    MAXLOGFILES 10    MAXLOGMEMBERS 5    MAXDATAFILES 300    MAXINSTANCES 1    MAXLOGHISTORY 292LOGFILE  GROUP 1 '/u01/app/oracle/oradata/test3/redo01a.log'  SIZE 100M BLOCKSIZE 512,  GROUP 2 '/u01/app/oracle/oradata/test3/redo02a.log'  SIZE 100M BLOCKSIZE 512-- STANDBY LOGFILEDATAFILE  '/u01/app/oracle/oradata/test3/system01.dbf',  '/u01/app/oracle/oradata/test3/sysaux01.dbf',  '/u01/app/oracle/oradata/test3/undotbs01.dbf',  '/u01/app/oracle/oradata/test3/users01.dbf'CHARACTER SET ZHS16GBKWed Jan 07 11:00:59 2015......

3、查看数据库状态

11:00:03 SYS@ test3 >select status from v$instance;STATUS------------MOUNTED11:00:27 SYS@ test3 >select file#,name ,checkpoint_change# from v$datafile;     FILE# NAME                                               CHECKPOINT_CHANGE#---------- -------------------------------------------------- ------------------         1 /u01/app/oracle/oradata/test3/system01.dbf                     333365         2 /u01/app/oracle/oradata/test3/sysaux01.dbf                     333365         3 /u01/app/oracle/oradata/test3/undotbs01.dbf                    333365         4 /u01/app/oracle/oradata/test3/users01.dbf                      33336511:00:46 SYS@ test3 >select file#,name ,checkpoint_change# from v$datafile_header;     FILE# NAME                                               CHECKPOINT_CHANGE#---------- -------------------------------------------------- ------------------         1 /u01/app/oracle/oradata/test3/system01.dbf                     333365         2 /u01/app/oracle/oradata/test3/sysaux01.dbf                     333365         3 /u01/app/oracle/oradata/test3/undotbs01.dbf                    333365         4 /u01/app/oracle/oradata/test3/users01.dbf                      333365

4、打开数据库

11:00:54 SYS@ test3 >alter database open;alter database open*ERROR at line 1:ORA-01113: file 1 needs media recoveryORA-01110: data file 1: '/u01/app/oracle/oradata/test3/system01.dbf'---打开数据库报错,需要做“media recovery”执行介质恢复:由于本库为非归档模式,只能通过current redolog来恢复查看当前日志组:[oracle@rh6 ~]$ sqlplus '/as sysdba'SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 7 11:02:12 2015Copyright (c) 1982, 2009, Oracle.  All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options11:02:12 SYS@ test3 >select member from v$logfile;MEMBER------------------------------------------------------------------------------------------------------------------------/u01/app/oracle/oradata/test3/redo01a.log/u01/app/oracle/oradata/test3/redo02a.log11:02:22 SYS@ test3 >select group#,sequence#,status from v$log;    GROUP#  SEQUENCE# STATUS---------- ---------- ----------------         2         12 INACTIVE         1         13 CURRENT11:00:59 SYS@ test3 >recover database until cancel;ORA-00279: change 333365 generated at 01/07/2015 10:30:26 needed for thread 1ORA-00289: suggestion : /u01/app/oracle/product/11.2.0/db_1/dbs/arch1_13_868275293.dbfORA-00280: change 333365 for thread 1 is in sequence #1311:01:42 Specify log: {
=suggested | filename | AUTO | CANCEL}/u01/app/oracle/oradata/test3/redo01a.logLog applied.Media recovery complete.---恢复完成!11:02:46 SYS@ test3 >alter database open;alter database open*ERROR at line 1:ORA-01589: must use RESETLOGS or NORESETLOGS option for database openElapsed: 00:00:00.0111:02:52 SYS@ test3 >alter database open resetlogs;Database altered.---Database open成功!

查看告警日志:

alter database openErrors in file /u01/app/oracle/diag/rdbms/test3/test3/trace/test3_ora_3294.trc:ORA-01113: file 1 needs media recoveryORA-01110: data file 1: '/u01/app/oracle/oradata/test3/system01.dbf'ORA-1113 signalled during: alter database open...Wed Jan 07 11:01:40 2015ALTER DATABASE RECOVER  database until cancel  Media Recovery StartSerial Media Recovery startedORA-279 signalled during: ALTER DATABASE RECOVER  database until cancel  ...Wed Jan 07 11:02:44 2015ALTER DATABASE RECOVER    LOGFILE '/u01/app/oracle/oradata/test3/redo01a.log'  Media Recovery Log /u01/app/oracle/oradata/test3/redo01a.logIncomplete recovery applied all redo ever generated.Recovery completed through change 334001 time 01/07/2015 10:51:13Media Recovery Complete (test3)Completed: ALTER DATABASE RECOVER    LOGFILE '/u01/app/oracle/oradata/test3/redo01a.log'  alter database openErrors in file /u01/app/oracle/diag/rdbms/test3/test3/trace/test3_ora_3294.trc:ORA-01589: must use RESETLOGS or NORESETLOGS option for database openORA-1589 signalled during: alter database open...Wed Jan 07 11:03:04 2015alter database open resetlogsRESETLOGS after complete recovery through change 334001Resetting resetlogs activation ID 990996637 (0x3b11689d)Errors in file /u01/app/oracle/diag/rdbms/test3/test3/trace/test3_ora_3294.trc:ORA-00367: checksum error in log file headerORA-00322: log 1 of thread 1 is not current copyORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/test3/redo01a.log'Wed Jan 07 11:03:05 2015Errors in file /u01/app/oracle/diag/rdbms/test3/test3/trace/test3_m000_3336.trc:ORA-00316: log 1 of thread 1, type 0 in header is not log fileORA-00312: online log 1 thread 1: '/u01/app/oracle/oradata/test3/redo01a.log'Errors in file /u01/app/oracle/diag/rdbms/test3/test3/trace/test3_ora_3294.trc:ORA-00367: checksum error in log file headerORA-00322: log 2 of thread 1 is not current copyORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/test3/redo02a.log'Errors in file /u01/app/oracle/diag/rdbms/test3/test3/trace/test3_m000_3336.trc:ORA-00316: log 2 of thread 1, type 0 in header is not log fileORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/test3/redo02a.log'Wed Jan 07 11:03:18 2015Setting recovery target incarnation to 2Wed Jan 07 11:03:20 2015Checker run found 4 new persistent data failuresWed Jan 07 11:03:21 2015Assigning activation ID 991126251 (0x3b1362eb)Thread 1 opened at log sequence 1  Current log# 1 seq# 1 mem# 0: /u01/app/oracle/oradata/test3/redo01a.logSuccessful open of redo thread 1Wed Jan 07 11:03:22 2015MTTR advisory is disabled because FAST_START_MTTR_TARGET is not setWed Jan 07 11:03:23 2015SMON: enabling cache recoverySuccessfully onlined Undo Tablespace 2.Dictionary check beginningTablespace 'TEMPTS1' #3 found in data dictionary,but not in the controlfile. Adding to controlfile.Dictionary check completeVerifying file header compatibility for 11g tablespace encryption..Verifying 11g file header compatibility for tablespace encryption completedSMON: enabling tx recovery*********************************************************************WARNING: The following temporary tablespaces contain no files.         This condition can occur when a backup controlfile has         been restored.  It may be necessary to add files to these         tablespaces.  That can be done using the SQL statement:          ALTER TABLESPACE 
 ADD TEMPFILE          Alternatively, if these temporary tablespaces are no longer         needed, then they can be dropped.           Empty temporary tablespace: TEMPTS1*********************************************************************Database Characterset is ZHS16GBKNo Resource Manager plan activereplication_dependency_tracking turned off (no async multimaster replication found)Starting background process QMNCWed Jan 07 11:03:27 2015QMNC started with pid=19, OS id=3341 LOGSTDBY: Validating controlfile with logical metadataLOGSTDBY: Validation completeCompleted: alter database open resetlogsWed Jan 07 11:13:27 2015Starting background process SMCOWed Jan 07 11:13:27 2015SMCO started with pid=22, OS id=3382

---至此,通过trace脚本,重建控制文件成功!