【RAC】Oracle 10g RAC 重建控制文件

Oracle 10g RAC 重建控制文件


本文通过创建软链接和重建控制文件的方式,使裸设备在数据库中显示为普通数据文件常用的名称。
重建控制文件过程中,解决了在
RAC环境下, 重建控制文件报错问题: ORA-01503: CREATE CONTROLFILE failed   ORA-12720: operation requires database is in EXCLUSIVE mode。



【实验环境】

操作系统:AIX 5300-09

集群软件:CRS 10.2.0.1

数据库:   Oracle 10.2.0.1

【AIX-RAC结构信息】


【实验背景】

在AIX系统上搭建的双节点RAC,使用hacmp实现卷组并发来建立共享存储。
DBCA创建数据库时,存储选项选择裸设备,裸设备的映射文件如下:直接对应的是共享逻辑卷

  1. control1=/dev/rrac_control1
  2. control2=/dev/rrac_control2
  3. example=/dev/rrac_example
  4. redo1_1=/dev/rrac_redo1_1
  5. redo1_2=/dev/rrac_redo1_2
  6. redo2_1=/dev/rrac_redo2_1
  7. redo2_2=/dev/rrac_redo2_2
  8. spfile=/dev/rrac_spfile
  9. sysaux=/dev/rrac_sysaux
  10. system=/dev/rrac_system
  11. temp=/dev/rrac_temp
  12. undotbs1=/dev/rrac_undotbs1
  13. undotbs2=/dev/rrac_undotbs2
  14. users=/dev/rrac_users
  15. pwdfile=/dev/rrac_pwdfile
这样在数据库中查询表空间对应数据文件时,显示如下:

select file_id,file_name,tablespace_name,bytes/1024/1024 from dba_data_files;



file_name 显示的就是共享逻辑卷,并不是我们所熟悉的方式
想要在查询数据文件、日志文件时,按如下所示我们所熟悉的方式显示,该如何来实现呢?


首先,创建目录并创建软链接,链接到对应逻辑卷

ln -s /dev/rrac_control1 /u01/app/oracle/oradata/prod/control01.ctl

ln -s /dev/rrac_control2 /u01/app/oracle/oradata/prod/control02.ctl

ln -s /dev/rrac_example /u01/app/oracle/oradata/prod/example01.dbf

ln -s /dev/rrac_redo1_1 /u01/app/oracle/oradata/prod/log11.log

ln -s /dev/rrac_redo1_2 /u01/app/oracle/oradata/prod/log12.log

ln -s /dev/rrac_redo2_1 /u01/app/oracle/oradata/prod/log21.log

ln -s /dev/rrac_redo2_2 /u01/app/oracle/oradata/prod/log22.log

ln -s /dev/rrac_spfile /u01/app/oracle/oradata/prod/spfile01

ln -s /dev/rrac_sysaux /u01/app/oracle/oradata/prod/sysaux01.dbf

ln -s /dev/rrac_system /u01/app/oracle/oradata/prod/system01.dbf

ln -s /dev/rrac_temp /u01/app/oracle/oradata/prod/temp01.dbf

ln -s /dev/rrac_undotbs1 /u01/app/oracle/oradata/prod/undotbs01.dbf

ln -s /dev/rrac_undotbs2 /u01/app/oracle/oradata/prod/undotbs02.dbf

ln -s /dev/rrac_users /u01/app/oracle/oradata/prod/users01.dbf

ln -s /dev/rrac_pwdfile /u01/app/oracle/oradata/prod/pwdfile01





然后,就需要修改控制文件里的数据文件、日志文件信息了。
可以通过重建控制文件的方式,在重建时将数据文件、日志文件信息更改为上面建立的软链接。
下面就是在RAC环境下重建控制文件的具体实验过程了

【实验过程】

1、dump当前控制文件到指定位置



查看dump出来的控制文件信息

  1. [root@aix227:/u01/app/oracle]#more controlbak.ctl
  2. -- The following are current System-scope REDO Log Archival related
  3. -- parameters and can be included in the database initialization file.
  4. --
  5. -- LOG_ARCHIVE_DEST=''
  6. -- LOG_ARCHIVE_DUPLEX_DEST=''
  7. --
  8. -- LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf
  9. --
  10. -- DB_UNIQUE_NAME="prod"
  11. --
  12. -- LOG_ARCHIVE_CONFIG='SEND, RECEIVE, NODG_CONFIG'
  13. -- LOG_ARCHIVE_MAX_PROCESSES=2
  14. -- STANDBY_FILE_MANAGEMENT=MANUAL
  15. -- STANDBY_ARCHIVE_DEST=?/dbs/arch
  16. -- FAL_CLIENT=''
  17. -- FAL_SERVER=''
  18. --
  19. -- LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/product/10.2.0/db_1/dbs/arch'
  20. -- LOG_ARCHIVE_DEST_1='MANDATORY NOREOPEN NODELAY'
  21. -- LOG_ARCHIVE_DEST_1='ARCH NOAFFIRM EXPEDITE NOVERIFY SYNC'
  22. -- LOG_ARCHIVE_DEST_1='NOREGISTER NOALTERNATE NODEPENDENCY'
  23. -- LOG_ARCHIVE_DEST_1='NOMAX_FAILURE NOQUOTA_SIZE NOQUOTA_USED NODB_UNIQUE_NAME'
  24. -- LOG_ARCHIVE_DEST_1='VALID_FOR=(PRIMARY_ROLE,ONLINE_LOGFILES)'
  25. -- LOG_ARCHIVE_DEST_STATE_1=ENABLE

  26. --
  27. -- Below are two sets of SQL statements, each of which creates a new
  28. -- control file and uses it to open the database. The first set opens
  29. -- the database with the NORESETLOGS option and should be used only if
  30. -- the current versions of all online logs are available. The second
  31. -- set opens the database with the RESETLOGS option and should be used
  32. -- if online logs are unavailable.
  33. -- The appropriate set of statements can be copied from the trace into
  34. -- a script file, edited as necessary, and executed when there is a
  35. -- need to re-create the control file.
  36. --
  37. -- Set #1. NORESETLOGS case
  38. --
  39. -- The following commands will create a new control file and use it
  40. -- to open the database.
  41. -- Data used by Recovery Manager will be lost.
  42. -- Additional logs may be required for media recovery of offline
  43. -- Use this only if the current versions of all online logs are
  44. -- available.

  45. -- After mounting the created controlfile, the following SQL
  46. -- statement will place the database in the appropriate
  47. -- protection mode:
  48. -- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE

  49. STARTUP NOMOUNT
  50. CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS NOARCHIVELOG
  51.     MAXLOGFILES 192
  52.     MAXLOGMEMBERS 3
  53.     MAXDATAFILES 1024
  54.     MAXINSTANCES 32
  55.     MAXLOGHISTORY 292
  56. LOGFILE
  57.   GROUP 1 '/dev/rrac_redo1_1' SIZE 50M,
  58.   GROUP 2 '/dev/rrac_redo1_2' SIZE 50M,
  59.   GROUP 3 '/dev/rrac_redo2_1' SIZE 50M,
  60.   GROUP 4 '/dev/rrac_redo2_2' SIZE 50M
  61. -- STANDBY LOGFILE

  62. DATAFILE
  63.   '/dev/rrac_system',
  64.   '/dev/rrac_undotbs1',
  65.   '/dev/rrac_sysaux',
  66.   '/dev/rrac_users',
  67.   '/dev/rrac_example',
  68.   '/dev/rrac_undotbs2'
  69. CHARACTER SET ZHS16GBK
  70. ;

  71. -- Commands to re-create incarnation table
  72. -- Below log names MUST be changed to existing filenames on
  73. -- disk. Any one log file from each branch can be used to
  74. -- re-create incarnation records.
  75. -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_1_564280945.dbf';
  76. -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_1_854793143.dbf';
  77. -- Recovery is required if any of the datafiles are restored backups,
  78. -- or if the last shutdown was not normal or immediate.
  79. RECOVER DATABASE

  80. -- Database can now be opened normally.
  81. ALTER DATABASE OPEN;

  82. -- Commands to add tempfiles to temporary tablespaces.
  83. -- Online tempfiles have complete space information.
  84. -- Other tempfiles may require adjustment.
  85. ALTER TABLESPACE TEMP ADD TEMPFILE '/dev/rrac_temp'
  86.      SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 536870912 ;
  87. -- End of tempfile additions.
  88. --
  89. -- Set #2. RESETLOGS case
  90. --
  91. -- The following commands will create a new control file and use it
  92. -- to open the database.
  93. -- Data used by Recovery Manager will be lost.
  94. -- The contents of online logs will be lost and all backups will
  95. -- be invalidated. Use this only if online logs are damaged.

  96. -- After mounting the created controlfile, the following SQL
  97. -- statement will place the database in the appropriate
  98. -- protection mode:
  99. -- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE

  100. STARTUP NOMOUNT
  101. CREATE CONTROLFILE REUSE DATABASE "PROD" RESETLOGS NOARCHIVELOG
  102.     MAXLOGFILES 192
  103.     MAXLOGMEMBERS 3
  104.     MAXDATAFILES 1024
  105.     MAXINSTANCES 32
  106.     MAXLOGHISTORY 292
  107. LOGFILE
  108.   GROUP 1 '/dev/rrac_redo1_1' SIZE 50M,
  109.   GROUP 2 '/dev/rrac_redo1_2' SIZE 50M
  110. -- STANDBY LOGFILE

  111. DATAFILE
  112.   '/dev/rrac_system',
  113.   '/dev/rrac_undotbs1',
  114.   '/dev/rrac_sysaux',
  115.   '/dev/rrac_users',
  116.   '/dev/rrac_example',
  117.   '/dev/rrac_undotbs2'
  118. CHARACTER SET ZHS16GBK
  119. ;

2、修改控制文件重建语句

因为要在正常关库的情况下,主动重建控制文件,我们可以采用NORESETLOGS方式
根据dump出来的信息,修改其中logfile、datafile为前面创建的软链接,得到重建控制文件语句如下:

SQL> CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS  NOARCHIVELOG

  2      MAXLOGFILES 192

  3      MAXLOGMEMBERS 3

  4      MAXDATAFILES 1024

  5      MAXINSTANCES 32

  6      MAXLOGHISTORY 292

  7  LOGFILE

  8    GROUP 1 '/u01/app/oracle/oradata/prod/log11.log'  SIZE 50M,

  9    GROUP 2 '/u01/app/oracle/oradata/prod/log12.log'  SIZE 50M,

 10    GROUP 3 '/u01/app/oracle/oradata/prod/log21.log'  SIZE 50M,

 11    GROUP 4 '/u01/app/oracle/oradata/prod/log22.log'  SIZE 50M

 12  DATAFILE

 13    '/u01/app/oracle/oradata/prod/system01.dbf',

 14    '/u01/app/oracle/oradata/prod/undotbs01.dbf',

 15    '/u01/app/oracle/oradata/prod/sysaux01.dbf',

 16    '/u01/app/oracle/oradata/prod/users01.dbf',

 17    '/u01/app/oracle/oradata/prod/example01.dbf',

 18    '/u01/app/oracle/oradata/prod/undotbs02.dbf'

 19  CHARACTER SET ZHS16GBK

 20  ;


3、正常关闭数据库,把一个实例启动到nomount状态


正常关闭整个数据库(所有实例)
srvctl stop database -d prod


sqlplus登录其中一个实例:prod1,启动到nomount状态


4、直接重建控制文件报错:





  1. SQL> CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS NOARCHIVELOG
  2.   2 MAXLOGFILES 192
  3.   3 MAXLOGMEMBERS 3
  4.   4 MAXDATAFILES 1024
  5.   5 MAXINSTANCES 32
  6.   6 MAXLOGHISTORY 292
  7.   7 LOGFILE
  8.   8 GROUP 1 '/u01/app/oracle/oradata/prod/log11.log' SIZE 50M,
  9.   9 GROUP 2 '/u01/app/oracle/oradata/prod/log12.log' SIZE 50M,
  10.  10 GROUP 3 '/u01/app/oracle/oradata/prod/log21.log' SIZE 50M,
  11.  11 GROUP 4 '/u01/app/oracle/oradata/prod/log22.log' SIZE 50M
  12.  12 DATAFILE
  13.  13 '/u01/app/oracle/oradata/prod/system01.dbf',
  14.  14 '/u01/app/oracle/oradata/prod/undotbs01.dbf',
  15.  15 '/u01/app/oracle/oradata/prod/sysaux01.dbf',
  16.  16 '/u01/app/oracle/oradata/prod/users01.dbf',
  17.  17 '/u01/app/oracle/oradata/prod/example01.dbf',
  18.  18 '/u01/app/oracle/oradata/prod/undotbs02.dbf'
  19.  19 CHARACTER SET ZHS16GBK
  20.  20 ;
  21. CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS NOARCHIVELOG
  22. *
  23. ERROR at line 1:
  24. ORA-01503: CREATE CONTROLFILE failed
  25. ORA-12720: operation requires database is in EXCLUSIVE mode


  26. SQL>

5、使用EXCLUSIVE模式启动到nomount状态


作为一个oracle小白,根据前面报错信息
尝试startup nomount exclusive;后重建控制文件



再次重建控制文件依然报相同错误



6、修改cluster_database参数值为false


查看cluster_databse参数


设置cluster_databse值为false



7、正常关闭数据库后,重启到nomount状态




8、再次重建控制文件:成功




9、调整临时表空间数据文件


重建控制文件成功后,还需要从dump出来的控制文件信息中,找出与临时表空间相关的语句,调整为我们的软链接位置

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/prod/temp01.dbf'

  2       SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 536870912 ;




10、恢复cluster_database参数为true




11、正常关闭数据库,启动数据库所有实例查验








查看数据库状态,两个实例都已经open
查看数据文件和日志文件,已经是我们想要的结果。^_^



【实验总结】


一、裸设备搭建的 rac,修改 数据文件、日志文件显示方式
首先创建软链接,实现常规文件名链接到具体设备;
然后通过重建控制文件的方式,在重建时将数据文件和日志文件的路径改为新建的链接。

二、RAC重建控制文件报错常见原因
RAC环境重建控制文件报错, 使用startup nomount exclusive;并不能真正实现非共享。 在RAC集群环境下,初始化参数文件中有cluster_database参数,此参数值为true时,是集群数据库,数据文件是所有实例共享的。 如果要重建控制文件,需要在 EXCLUSIVE 模式,必须先将cluster_database 参数的值设置为false。

三、RAC环境重建控制文件一般顺序
1、使用dump出来的控制文件信息,选择重建控制文件语句
2、设置cluster_databse=false
3、正常关闭数据库,将一个实例启动到nomount状态
4、重建控制文件
5、恢复cluster_databse=true
6、recover databse (如果正常关库、无数据损坏或丢失,使用noresetlog方式重建则不需要)
7、重启数据库查验 (所有实例)



吕星昊
2014.8.10

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29475508/viewspace-1248871/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29475508/viewspace-1248871/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值