booloot 2015-03-23
系统环境:
操作系统: AIX5.3
Cluster:  Oracle 10gR2 CRS
Oracle:   Oracle 10gR2
在RAC环境下重建控制文件和在单实例上类似,只是有些步骤需要注意:
[oracle@aix211 ~]$cat mkln.sh  
ln -s /dev/rsystem           /u01/app/oracle/oradata/prod/system01.dbf 
ln -s /dev/rsysaux           /u01/app/oracle/oradata/prod/sysaux01.dbf 
ln -s /dev/rusers            /u01/app/oracle/oradata/prod/users01.dbf 
ln -s /dev/rundotbs1         /u01/app/oracle/oradata/prod/undotbs01.dbf  
ln -s /dev/rundotbs2         /u01/app/oracle/oradata/prod/undotbs02.dbf 
ln -s /dev/rtemp             /u01/app/oracle/oradata/prod/temp01.dbf 
ln -s /dev/rcontrol1_1         /u01/app/oracle/oradata/prod/control01.ctl 
ln -s /dev/rcontrol2_2         /u01/app/oracle/oradata/prod/control02.ctl 
ln -s /dev/rcontrol3_3         /u01/app/oracle/oradata/prod/control03.ctl 
ln -s /dev/rredo1_1          /u01/app/oracle/oradata/prod/log11.log 
ln -s /dev/rredo1_2          /u01/app/oracle/oradata/prod/log12.log 
ln -s /dev/rredo2_1          /u01/app/oracle/oradata/prod/log21.log 
ln -s /dev/rredo2_2          /u01/app/oracle/oradata/prod/log22.log 
ln -s /dev/rindex            /u01/app/oracle/oradata/prod/index01.dbf 
ln -s /dev/rspfile           /u01/app/oracle/oradata/prod/spfile01 
ln -s /dev/rexample          /u01/app/oracle/oradata/prod/example01.dbf
Database存储在在RAW上。
1、首先在一个节点备份controlfile
[oracle@aix201 ~]$sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Mar 23 16:16:07 2015
Copyright (c) 1982, 2005, Oracle.  All rights reserved. 
Connected to: 
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production 
With the Partitioning, Real Application Clusters, OLAP and Data Mining options 
  
SQL> select status from v$instance; 
STATUS 
------------ 
OPEN 
SQL> alter database backup controlfile to trace; 
Database altered.
2、查看控制文件的trace备份(udump)
CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS  NOARCHIVELOG 
    MAXLOGFILES 192
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 32
    MAXLOGHISTORY 292
LOGFILE 
  GROUP 1 '/u01/app/oracle/oradata/prod/log11.log'  SIZE 50M, 
  GROUP 2 '/u01/app/oracle/oradata/prod/log12.log'  SIZE 50M, 
  GROUP 3 '/u01/app/oracle/oradata/prod/log21.log'  SIZE 50M, 
  GROUP 4 '/u01/app/oracle/oradata/prod/log22.log'  SIZE 50M 
-- STANDBY LOGFILE 
DATAFILE 
  '/u01/app/oracle/oradata/prod/system01.dbf', 
  '/u01/app/oracle/oradata/prod/undotbs01.dbf', 
  '/u01/app/oracle/oradata/prod/sysaux01.dbf', 
  '/u01/app/oracle/oradata/prod/users01.dbf', 
  '/u01/app/oracle/oradata/prod/example01.dbf', 
  '/u01/app/oracle/oradata/prod/undotbs02.dbf'
CHARACTER SET ZHS16GBK 
;
3、关闭database,启动其中一个instance到弄mount
SQL> startup nomount; 
ORACLE instance started. 
Total System Global Area  612368384 bytes 
Fixed Size                  2022832 bytes 
Variable Size             184549968 bytes 
Database Buffers          423624704 bytes 
Redo Buffers                2170880 bytes 
  
SQL> @/home/oracle/cr_ctr.sql 
CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS  NOARCHIVELOG 
* 
ERROR at line 1: 
ORA-01503: CREATE CONTROLFILE failed 
ORA-12720: operation requires database is in EXCLUSIVE mode 
SQL> show parameter cluster 
NAME                                 TYPE        VALUE 
------------------------------------ ----------- ------------------------------ 
cluster_database                     boolean     TRUE 
cluster_database_instances           integer     2
cluster_interconnects                string 
  
---创建失败,原因是在RAC下控制文件时处于共享(share)模式,需启动到独立(exclusive)模式,才能重建;修改cluster_database 为false,然后重建
重新建立控制文件:
SQL> alter system set cluster_database =false scope=spfile; 
System altered. 
SQL> startup nomount 
ORACLE instance started. 
Total System Global Area  612368384 bytes 
Fixed Size                  2022832 bytes 
Variable Size             184549968 bytes 
Database Buffers          423624704 bytes 
Redo Buffers                2170880 bytes 
  
SQL> show parameter cluster 
NAME                                 TYPE        VALUE 
------------------------------------ ----------- ------------------------------ 
cluster_database                     boolean     FALSE 
cluster_database_instances           integer     1
cluster_interconnects                string 
  
SQL> @/home/oracle/cr_ctr.sql 
Control file created. 
  
告警日志: 
alter.log: 
Mon Mar 23 16:41:00 2015
CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS  NOARCHIVELOG 
    MAXLOGFILES 192
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 32
    MAXLOGHISTORY 292
LOGFILE 
  GROUP 1 '/u01/app/oracle/oradata/prod/log11.log'  SIZE 50M, 
  GROUP 2 '/u01/app/oracle/oradata/prod/log12.log'  SIZE 50M, 
  GROUP 3 '/u01/app/oracle/oradata/prod/log21.log'  SIZE 50M, 
  GROUP 4 '/u01/app/oracle/oradata/prod/log22.log'  SIZE 50M 
-- STANDBY LOGFILE 
DATAFILE 
  '/u01/app/oracle/oradata/prod/system01.dbf', 
  '/u01/app/oracle/oradata/prod/undotbs01.dbf', 
  '/u01/app/oracle/oradata/prod/sysaux01.dbf', 
  '/u01/app/oracle/oradata/prod/users01.dbf', 
  '/u01/app/oracle/oradata/prod/example01.dbf', 
  '/u01/app/oracle/oradata/prod/undotbs02.dbf'
CHARACTER SET ZHS16GBK 
Mon Mar 23 16:41:00 2015
WARNING: Default Temporary Tablespace not specified in CREATE DATABASE command 
Default Temporary Tablespace will be necessary for a locally managed database in future release 
WARNING: You are creating/reusing datafile /u01/app/oracle/oradata/prod/control01.ctl. 
WARNING: Oracle recommends creating new datafiles on devices with zero offset. The command "/usr/sbin/mklv -y LVname -T O -w n -s n -r n VGname NumPPs" can be used. Please contact Oracle customer support for more details. 
WARNING: You are creating/reusing datafile /u01/app/oracle/oradata/prod/control01.ctl. 
WARNING: Oracle recommends creating new datafiles on devices with zero offset. The command "/usr/sbin/mklv -y LVname -T O -w n -s n -r n VGname NumPPs" can be used. Please contact Oracle customer support for more details. 
WARNING: You are creating/reusing datafile /u01/app/oracle/oradata/prod/control02.ctl. 
WARNING: Oracle recommends creating new datafiles on devices with zero offset. The command "/usr/sbin/mklv -y LVname -T O -w n -s n -r n VGname NumPPs" can be used. Please contact Oracle customer support for more details. 
WARNING: You are creating/reusing datafile /u01/app/oracle/oradata/prod/control02.ctl. 
WARNING: Oracle recommends creating new datafiles on devices with zero offset. The command "/usr/sbin/mklv -y LVname -T O -w n -s n -r n VGname NumPPs" can be used. Please contact Oracle customer support for more details. 
Setting recovery target incarnation to 1
Mon Mar 23 16:41:05 2015
Successful mount of redo thread 1, with mount id 286981148
Mon Mar 23 16:41:05 2015
Completed: CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS  NOARCHIVELOG 
    MAXLOGFILES 192
    MAXLOGMEMBERS 3
    MAXDATAFILES 1024
    MAXINSTANCES 32
    MAXLOGHISTORY 292
LOGFILE 
  GROUP 1 '/u01/app/oracle/oradata/prod/log11.log'  SIZE 50M, 
  GROUP 2 '/u01/app/oracle/oradata/prod/log12.log'  SIZE 50M, 
  GROUP 3 '/u01/app/oracle/oradata/prod/log21.log'  SIZE 50M, 
  GROUP 4 '/u01/app/oracle/oradata/prod/log22.log'  SIZE 50M 
-- STANDBY LOGFILE 
DATAFILE 
  '/u01/app/oracle/oradata/prod/system01.dbf', 
  '/u01/app/oracle/oradata/prod/undotbs01.dbf', 
  '/u01/app/oracle/oradata/prod/sysaux01.dbf', 
  '/u01/app/oracle/oradata/prod/users01.dbf', 
  '/u01/app/oracle/oradata/prod/example01.dbf', 
  '/u01/app/oracle/oradata/prod/undotbs02.dbf'
CHARACTER SET ZHS16GBK
4、重建成功,启动到open
SQL> select status from v$instance; 
STATUS 
------------ 
MOUNTED 
  
SQL> alter database open; 
Database altered. 
  
添加临时表空间数据文件: 
SQL> select name from v$tempfile; 
no rows selected 
  
SQL> select tablespace_name from dba_tablespaces; 
TABLESPACE_NAME 
------------------------------ 
SYSTEM 
UNDOTBS1 
SYSAUX 
TEMP 
USERS 
UNDOTBS2 
EXAMPLE 
7 rows selected. 
  
SQL> alter tablespace temp add  
  2  tempfile '/u01/app/oracle/oradata/prod/temp01.dbf' size 100m reuse; 
Tablespace altered. 
SQL>  select name from v$tempfile; 
NAME 
-------------------------------------------------------------------------------- 
/u01/app/oracle/oradata/prod/temp01.dbf
5、修改cluster_database参数,启动所有instance
SQL> alter system set cluster_database =true scope=spfile; 
System altered.
启动所有Instance,如果所有instance启动成功,则controlfile重建成功。