jydg 发表于 2018-9-26 11:18:34

oracle RAC数据库建立STANDBY(三)

  这篇文章描述为RAC环境创建STANDBY数据库。
  由于篇幅限制,加上碰到了很多的bug,只能将文章拆分成多篇。
  这章记录一下STANDBY数据库创建过程中碰到的问题。
  刚刚在进行RAC环境的DUPLICATE DATABASE的时候,就碰到了很多问题,由于二者命令比较相似,本来认为这次不会碰到太多的问题,没有想到的是,这次碰到的问题居然比DUPLICATE碰到的问题多出一倍。而且基本上所有碰到的问题都是DUPLICATE操作时不曾遇到的。
  最开始为了减少麻烦,打算采用SPFILE的方式,并且利用FROM ACTIVE DATABASE,这样可以不用读取备份集:
  bash-3.00$ rman target sys/test@172.0.2.54/rac11g.us.oracle.com auxiliary /

  恢复管理器:>  Copyright (c) 1982, 2007, Oracle.All rights reserved.
  连接到目标数据库: RAC11G(DBID=1712482917)
  已连接到辅助数据库: RAC11G(未装载)
  RMAN> duplicate target database for standby
  2> db_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  3> dorecover
  4> from active database
  5> spfile
  6> parameter_value_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  7> set log_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  8> set log_archive_dest_1='LOCATION=+DATA/RAC11G'
  9> ;
  启动Duplicate Db于09-9月-08
  使用目标数据库控制文件替代恢复目录
  分配的通道: ORA_AUX_DISK_1
  通道ORA_AUX_DISK_1: SID=112设备类型=DISK
  RMAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-03002: Duplicate Db命令(在09/09/2008 14:58:26上)失败
  RMAN-06217:未使用Net服务名连接到辅助数据库
  这个RMAN-6217错误居然在metalink上都找不到,不过好在错误的描述比较清晰,只需要通过连接服务名的方式连接辅助实例即可。
  继续尝试:
  bash-3.00$ rman target sys/test@172.0.2.54/rac11g.us.oracle.com auxiliary sys/test@rac11g1

  恢复管理器:>  Copyright (c) 1982, 2007, Oracle.All rights reserved.
  连接到目标数据库: RAC11G(DBID=1712482917)
  RMAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-00554:内部恢复管理器程序包初始化失败
  RMAN-04006:来自辅助数据库的错误: ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务
  不过这里引发一个问题,由于10g以上默认采用动态注册,由于数据库没有启动,因此动态注册无法启用,没有办法通过服务名连接,只能手工编辑一个SID列表,添加到listener.ora文件中:
  SID_LIST_LISTENER =
  (SID_LIST =
  (SID_DESC =
  (SID_NAME = rac11g1)
  (ORACLE_HOME = /data/oracle/product/11.1/database)
  )
  )
  下面重启监听:
  $ lsnrctl stop
  LSNRCTL for Solaris: Version 11.1.0.6.0 - Production on 09-9月-2008 15:20:43
  Copyright (c) 1991, 2007, Oracle.All rights reserved.
  正在连接到(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
  命令执行成功
  $ lsnrctl start
  LSNRCTL for Solaris: Version 11.1.0.6.0 - Production on 09-9月-2008 15:20:55
  Copyright (c) 1991, 2007, Oracle.All rights reserved.
  启动/data/oracle/product/11.1/database/bin/tnslsnr:请稍候...
  TNSLSNR for Solaris: Version 11.1.0.6.0 - Production
  系统参数文件为/data/oracle/product/11.1/database/network/admin/listener.ora
  写入/data/oracle/diag/tnslsnr/ser1/listener/alert/log.xml的日志信息
  监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ser1)(PORT=1521)))
  正在连接到(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
  LISTENER的STATUS
  ------------------------
  别名                      LISTENER
  版本                      TNSLSNR for Solaris: Version 11.1.0.6.0 - Production
  启动日期                  09-9月-2008 15:20:55
  正常运行时间            0天0小时0分0秒
  跟踪级别                  off
  安全性                  ON: Local OS Authentication
  SNMP                      OFF
  监听程序参数文件          /data/oracle/product/11.1/database/network/admin/listener.ora
  监听程序日志文件          /data/oracle/diag/tnslsnr/ser1/listener/alert/log.xml
  监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ser1)(PORT=1521)))
  服务摘要..
  服务"rac11g1"包含1个例程。
  例程"rac11g1",状态UNKNOWN,包含此服务的1个处理程序...
  命令执行成功
  再次连接错误依旧,这是由于默认配置的RAC环境的TNSNAMES中的服务名对当前不适用,添加一个新的服务名:
  RAC11G1_S =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 172.0.2.62)(PORT = 1521))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SID = rac11g1)
  )
  )
  再次连接,报错没有权限:
  bash-3.00$ rman target sys/test@172.0.2.54/rac11g.us.oracle.com auxiliary sys/test@rac11g1_s

  恢复管理器:>  Copyright (c) 1982, 2007, Oracle.All rights reserved.
  连接到目标数据库: RAC11G(DBID=1712482917)
  RMAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-00554:内部恢复管理器程序包初始化失败
  RMAN-04006:来自辅助数据库的错误: ORA-01031: insufficient privileges
  最简单的办法是拷贝源数据库的初始化参数文件到当前的节点的$ORACLE_HOME/dbs目录中,拷贝完成后,终于可以成功连接RMAN:
  bash-3.00$ rman target sys/test@172.0.2.54/rac11g.us.oracle.com auxiliary sys/test@rac11g1_s

  恢复管理器:>  Copyright (c) 1982, 2007, Oracle.All rights reserved.
  连接到目标数据库: RAC11G(DBID=1712482917)
  已连接到辅助数据库: RAC11G(未装载)
  执行DUPLICATE时报错:
  RMAN> duplicate target database for standby
  2> db_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  3> dorecover
  4> from active database
  5> spfile
  6> parameter_value_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  7> set log_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  8> set log_archive_dest_1='LOCATION=+DATA/RAC11G'
  9> ;
  启动Duplicate Db于09-9月-08
  使用目标数据库控制文件替代恢复目录
  分配的通道: ORA_AUX_DISK_1
  通道ORA_AUX_DISK_1: SID=37设备类型=DISK
  RMAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-03002: Duplicate Db命令(在09/09/2008 15:38:01上)失败
  RMAN-06764: Must specify db_unique_name with FOR STANDBY
  由于DUPLICATE创建STANDBY的时候会根据命令中指定的参数和源数据库的参数创建出STANDBY数据库的初始化参数,因此这里需要指明DB_UNIQUE_NAME参数,如此之外,应该把所有STANDBY数据库使用的参数配置完成。
  除此之外,应该保证STANDBY数据库中配置了源数据库服务名RAC11G,而源数据库中配置了STANDBY数据库服务名RAC11G_S。
  再次执行DUPLICATE操作:
  RMAN> duplicate target database for standby
  2> db_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  3> dorecover
  4> from active database
  5> spfile
  6> parameter_value_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  7> set log_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  8> set fal_client='RAC11G_S'
  9> set fal_server='RAC11G'
  10> set log_archive_dest_1='LOCATION=+DATA/RAC11GVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=rac11g_s'
  11> set log_archive_dest_2='SERVICE=rac11gLGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=rac11g'
  12> set standby_archive_dest='+DATA/RAC11G'
  13> set db_unique_name='rac11g_s'
  14> ;
  启动Duplicate Db于09-9月-08
  使用通道ORA_AUX_DISK_1
  内存脚本的内容:
  {
  backup as copy reuse
  file'/data/oracle/product/11.1/database/dbs/orapwrac11g2' auxiliary format
  '/data/oracle/product/11.1/database/dbs/orapwrac11g1'   file
  '/dev/vx/rdsk/datavg/rac11g_spfile' auxiliary format
  '+DATA/rac11g/spfilerac11g.ora'   ;
  sql clone "alter system set spfile= ''+DATA/rac11g/spfilerac11g.ora''";
  }
  正在执行内存脚本
  启动backup于09-9月-08
  分配的通道: ORA_DISK_1
  通道ORA_DISK_1: SID=484实例=rac11g2设备类型=DISK
  DBGANY:   Mismatched message length! (krmiduem)
  DBGANY:   Mismatched message length! (krmiduem)
  MAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-00601: fatal error in recovery manager
  RMAN-03004:执行命令期间出现严重错误
  RMAN-00600: internal error, arguments [] [] [] []
  RMAN-03009: backup命令(ORA_DISK_1通道上,在09/09/2008 16:06:39上)失败
  ORA-17629:无法连接到远程数据库服务器
  ORA-17627: ORA-12154: TNS:无法解析指定的连接标识符
  ORA-17629:无法连接到远程数据库服务器
  这个错误是由于配置源数据库时没有使用VIP地址,而指定了一个实例的PUBLIC地址,这里应该使用VIP,确保RMAN可以同时连接到两个实例上:
  bash-3.00$ rman target sys/test@rac11gauxiliary sys/test@rac11g1_s

  Recovery Manager:>  Copyright (c) 1982, 2007, Oracle.All rights reserved.
  connected to target database: RAC11G(DBID=1712482917)
  connected to auxiliary database: RAC11G(not mounted)
  RMAN> duplicate target database for standby
  2> db_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  3> dorecover
  4> from active database
  5> spfile
  6> parameter_value_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  7> set log_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  8> set fal_client='RAC11G_S'
  9> set fal_server='RAC11G'
  10> set log_archive_dest_1='LOCATION=+DATA/RAC11GVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=rac11g_s'
  11> set log_archive_dest_2='SERVICE=rac11gLGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=rac11g'
  12> set standby_archive_dest='+DATA/RAC11G'
  13> set db_unique_name='rac11g_s'
  ;
  14>
  Starting Duplicate Db at 09-SEP-08
  using target database control file instead of recovery catalog
  allocated channel: ORA_AUX_DISK_1
  channel ORA_AUX_DISK_1: SID=38 device type=DISK
  contents of Memory Script.:
  {
  backup as copy reuse
  file'/data/oracle/product/11.1/database/dbs/orapwrac11g2' auxiliary format
  '/data/oracle/product/11.1/database/dbs/orapwrac11g1'   file
  '/dev/vx/rdsk/datavg/rac11g_spfile' auxiliary format
  '+DATA/rac11g/spfilerac11g.ora'   ;
  sql clone "alter system set spfile= ''+DATA/rac11g/spfilerac11g.ora''";
  }
  executing Memory Script
  Starting backup at 09-SEP-08
  allocated channel: ORA_DISK_1
  channel ORA_DISK_1: SID=611 instance=rac11g1 device type=DISK
  RMAN-03009: failure of backup command on ORA_DISK_1 channel at 09/09/2008 16:11:41
  ORA-17629: Cannot connect to the remote database server

  ORA-17627: ORA-12154: TNS:could not resolve the connect>  ORA-17629: Cannot connect to the remote database server
  continuing other job steps, job failed will not be re-run
  RMAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-03002: failure of Duplicate Db command at 09/09/2008 16:11:41
  RMAN-03015: error occurred in stored script. Memory Script
  RMAN-03009: failure of backup command on ORA_DISK_1 channel at 09/09/2008 16:11:41
  ORA-17629: Cannot connect to the remote database server

  ORA-17627: ORA-12154: TNS:could not resolve the connect>  ORA-17629: Cannot connect to the remote database server
  采用本地配置的LOAD_BALANCE服务名,仍然出现上面的错误,看来最好的方式还是通过ALLOCATE CHANNEL的方式手工分配CHANNEL:
  bash-3.00$ rman target sys/test@rac11gauxiliary sys/test@rac11g1_s

  Recovery Manager:>  Copyright (c) 1982, 2007, Oracle.All rights reserved.
  connected to target database: RAC11G(DBID=1712482917)
  connected to auxiliary database: RAC11G(not mounted)
  RMAN> run
  2> {
  3> allocate channel c1 device type disk connect 'sys/test@rac11g1';
  4> allocate channel c2 device type disk connect 'sys/test@rac11g2';
  5> allocate auxiliary channel ac1 device type disk;
  6> allocate auxiliary channel ac2 device type disk;
  7> duplicate target database for standby
  8> db_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  9> dorecover
  10> from active database
  11> spfile
  12> parameter_value_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  13> set log_file_name_convert '/dev/vx/rdsk/datavg', '+DATA/RAC11G'
  14> set fal_client='RAC11G_S'
  15> set fal_server='RAC11G'
  16> set log_archive_dest_1='LOCATION=+DATA/RAC11GVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=rac11g_s'
  17> set log_archive_dest_2='SERVICE=rac11gLGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=rac11g'
  18> set standby_archive_dest='+DATA/RAC11G'
  19> set db_unique_name='rac11g_s';
  20> }
  using target database control file instead of recovery catalog
  allocated channel: c1
  channel c1: SID=285 instance=rac11g1 device type=DISK
  allocated channel: c2
  channel c2: SID=119 instance=rac11g2 device type=DISK
  allocated channel: ac1
  channel ac1: SID=39 device type=DISK
  allocated channel: ac2
  channel ac2: SID=36 device type=DISK
  Starting Duplicate Db at 09-SEP-08
  contents of Memory Script.:
  {
  backup as copy reuse
  file'/data/oracle/product/11.1/database/dbs/orapwrac11g2' auxiliary format
  '/data/oracle/product/11.1/database/dbs/orapwrac11g1'   file
  '/dev/vx/rdsk/datavg/rac11g_spfile' auxiliary format
  '+DATA/rac11g/spfilerac11g.ora'   ;
  sql clone "alter system set spfile= ''+DATA/rac11g/spfilerac11g.ora''";
  }
  executing Memory Script
  Starting backup at 09-SEP-08
  RMAN-03009: failure of backup command on c1 channel at 09/09/2008 16:18:44
  ORA-17629: Cannot connect to the remote database server

  ORA-17627: ORA-12154: TNS:could not resolve the connect>  ORA-17629: Cannot connect to the remote database server
  continuing other job steps, job failed will not be re-run
  released channel: c1
  released channel: c2
  released channel: ac1
  released channel: ac2
  RMAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-03002: failure of Duplicate Db command at 09/09/2008 16:18:44
  RMAN-03015: error occurred in stored script. Memory Script
  RMAN-03009: failure of backup command on c2 channel at 09/09/2008 16:18:44
  ORA-17629: Cannot connect to the remote database server

  ORA-17627: ORA-12154: TNS:could not resolve the connect>  ORA-17629: Cannot connect to the remote database server
  RMAN> exit
  Recovery Manager complete.
  这个错误是由于远端配置的tnsnames.ora中存在问题,尝试在源数据库连接目标数据库环境也报错ORA-12154,增加RAC11G1_S服务名后,问题解决:
  RAC11G1_S =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 172.0.2.62)(PORT = 1521))
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SID = rac11g1)
  )
  )
  由于错误太多,只能在下一篇文章中继续描述。
  oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html

页: [1]
查看完整版本: oracle RAC数据库建立STANDBY(三)