搭建RAC用sqlplus启动db资源显示offline问题分析处理

来源:互联网 发布:新的淘宝店怎么推广 编辑:程序博客网 时间:2024/06/11 03:50
一.问题描述
rac库用sqlplus启动节点二正常,但crsctl显示db资源为offline,而用srvctl启动实例时,db资源显示online;
如下:
sqlplus启动db正常,而用crsctl stat res -t查看资源状态,出现:
ora.st.db
1 ONLINE ONLINE T50003 Open 
2 OFFLINE OFFLINE Instance Shutdown


当用srvctl start  instance -d st -i st2启实例2时,则是: 
ora.st.db
1 ONLINE ONLINE T50003 open 
2 ONLINE ONLINE T50004 open
oraccle版本:RAC 11.2.0.4 for solaris 11.2
二.原因分析
上述问题,当用sqlplus启动后,若再用一次srvctl来启动实例,db资源恢复显示正常,由于未来环境是生产环境,这样多操作一次感觉很怪,不知是否有什么隐患和风险,必需要解决掉这 
个问题,否则,就只能重新搭建和再恢复数据,由于项目时间很紧,时间和精力上不希望再重新搭建rac和恢复数据,也会影响到环境交付。
该rac搭建过程也比较曲折:
因为在安装grid psu2补丁时,出现opatch报错,通过赵工分析,节点2的psu2没有打成功,而小补丁在节点一安装时没有加local选项,而将节点一安装的补丁及相应用配置写到了节点二上 
,致节点二执行opatch操作时报错,为了保证节点二不留有隐患和风险,有对节点2进行delete node后,再add node操作。
上面报错问题怀疑与节点2的删除和重新添加有关。如是对节点一关闭实例,然后再用sqlplus启动,结果显示节点1也存在与节点2同样的问题,这样就排除了节点2的问题与delete node和 
add node相关。
难道是数据库st注册到OCR中有问题吗?从ocr中移除database,并重新注册ocr后,问题依然存在。
如是检查OS层面是否有异常,dmesg发现部分磁盘有报label错误,仔细检查磁盘发现这些盘没有在使用,是分给将来的本机ADG使用的,所以磁盘label报错与些问题无关。 
T50004 cmlb: [ID 107833 kern.warning] WARNING: /scsi_vhci/ssd@g60002ac000000000000009ff0001b8ed (ssd24):
T50004 Corrupt label; wrong magic number
T50004 cmlb: [ID 107833 kern.warning] WARNING: /scsi_vhci/ssd@g60002ac000000000000009ff0001b8ed (ssd24): 
因为不想重新搭rac,所以晚上回家后,继续从MOS中查找各种与db resorce offline相关的文档阅读,11.2 RAC: In "crsctl stat res -t" State Details May Be Missing or Incorrect 
(文档 ID 1086563.1)和srvctl reports wrong instance status for disabled instances (文档 ID 1320970.1)这两个文档中提到的case有点相似,但与这个问题还完全不一样。如是将问 
题分析聚焦在srvctl启库和sqlplus启库的差别上。
在节点二上执行: crsctl stat res -p,查看ocr中注册的相关db资源状态:
NAME=ora.st.db
TYPE=ora.database.type
ACL=owner:oramdplm:rwx,pgrp:oinstall:r--,other::r--,group:dba:r-x,user:oragrid:r-x
ACTION_FAILURE_TEMPLATE=
ACTION_SCRIPT=
ACTIVE_PLACEMENT=1
AGENT_FILENAME=%CRS_HOME%/bin/oraagent%CRS_EXE_SUFFIX%
AUTO_START=restore
CARDINALITY=2
CHECK_INTERVAL=1
CHECK_TIMEOUT=30
CLUSTER_DATABASE=true
DATABASE_TYPE=RAC
DB_UNIQUE_NAME=st
DEFAULT_TEMPLATE=PROPERTY(RESOURCE_CLASS=database) PROPERTY(DB_UNIQUE_NAME= CONCAT(PARSE(%NAME%, ., 2), %USR_ORA_DOMAIN%, .)) ELEMENT(INSTANCE_NAME= 
%GEN_USR_ORA_INST_NAME%) ELEMENT(DATABASE_TYPE= %DATABASE_TYPE%)
DEGREE=1
DESCRIPTION=Oracle Database resource
----注意上面的NAME=ora.st.db,数据库在OCR中是以db_unique_name的形式注册的。
再进一步执行:
-bash-4.1$ srvctl config database -d st
Database unique name: st
Database name: 
Oracle home: /mdplmapp/oraplm/11.2.0
Oracle user: oramdplm
Spfile: +MDPLMDG1/st/spfilest.ora
Domain: 
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: st
Database instances: st1,st2
Disk Groups: MDPLMDG1,REDODG1,REDODG2
Mount point paths: 
Services: gplm_io,mdgplm,mdrdm,rdm_io
Type: RAC
Database is administrator managed
---发现注册到ocr中的db_unique_name为st。
而在数据库端的设置为nhst,如下:
SQL> show parameter db_unique_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string NHst
那么产生问题的原因就找到了,就是db_unique_name只在数据库层有更改为nhst,而ocr中没有更新。而原来用srvctl去启实例,db资源显示正常,是因为srvctl会直接去调用sqlplus启动实例。
三.解决
重新更改OCR中的db_unique_name为nhst,操作如下:
1.停库和从ocr中移除库
srvctl stop database -d st
srvctl remove database -d st
2.启动库,再更改db层的设置
startup
alter system set db_unique_name=NHst scope=spfile sid='*';
3) cluster级别添加database资源
srvctl add database -d nhst -n st -o /mdplmapp/oraplm/11.2.0
srvctl add instance -d nhst -i st1 -n T50003
srvctl add instance -d nhst -i st2 -n T50004
4) 修改ocr中db与asm磁盘组的依赖关系
srvctl modify database -d nhst -a "MDPLMDG1,REDODG1,REDODG2"
5)重新注册service
su - oramdplm
srvctl add service -d nhst -s mdgplm -r st1 -a st2 -P basic -e select -m basic
srvctl add service -d nhst -s mdrdm -r st1 -a st2 -P basic -e select -m basic
srvctl add service -d nhst -s gplm_io -r st1 -a st2 -P basic -e select -m basic
srvctl add service -d nhst -s rdm_io -r st2 -a st1 -P basic -e select -m basic
启动 service
srvctl start service -d nhst -s mdgplm
srvctl start service -d nhst -s mdrdm
srvctl start service -d nhst -s gplm_io
srvctl start service -d nhst -s rdm_io
最后验证如下:
用sqlplus关节点二,再启动节点二,检查正常,如下:
-bash-4.1$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS 
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
ONLINE ONLINE T50003 
ONLINE ONLINE T50004 
ora.MDPLMDG1.dg
ONLINE ONLINE T50003 
ONLINE ONLINE T50004 
ora.OCRVOTDG.dg
ONLINE ONLINE T50003 
ONLINE ONLINE T50004 
ora.REDODG1.dg
ONLINE ONLINE T50003 
ONLINE ONLINE T50004 
ora.REDODG2.dg
ONLINE ONLINE T50003 
ONLINE ONLINE T50004 
ora.asm
ONLINE ONLINE T50003 Started 
ONLINE ONLINE T50004 Started 
ora.gsd
OFFLINE OFFLINE T50003 
OFFLINE OFFLINE T50004 
ora.net1.network
ONLINE ONLINE T50003 
ONLINE ONLINE T50004 
ora.ons
ONLINE ONLINE T50003 
ONLINE ONLINE T50004 
ora.registry.acfs
ONLINE ONLINE T50003 
ONLINE ONLINE T50004 
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE T50003 
ora.cvu
1 ONLINE ONLINE T50004 
ora.T50003.vip
1 ONLINE ONLINE T50003 
ora.T50004.vip
1 ONLINE ONLINE T50004 
ora.nhst.db
1 ONLINE ONLINE T50003 Open 
2 ONLINE ONLINE T50004 Open 
ora.nhst.gplm_io.svc
1 ONLINE ONLINE T50003 
ora.nhst.mdgplm.svc
1 ONLINE ONLINE T50003 
ora.nhst.mdrdm.svc
1 ONLINE ONLINE T50003 
ora.nhst.rdm_io.svc
1 ONLINE ONLINE T50004 
ora.oc4j
1 ONLINE ONLINE T50004 
ora.scan1.vip
1 ONLINE ONLINE T50003 
-bash-4.1$
-bash-4.1$ srvctl status database -d nhst
Instance st1 is running on node T50003
Instance st2 is running on node T50004


-bash-4.1$ srvctl config database -d nhst
Database unique name: nhst
Database name: st
Oracle home: /mdplmapp/oraplm/11.2.0
Oracle user: oramdplm
Spfile: +MDPLMDG1/st/spfilest.ora
Domain: 
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: st
Database instances: st1,st2
Disk Groups: MDPLMDG1,REDODG1,REDODG2
Mount point paths: 
Services: gplm_io,mdgplm,mdrdm,rdm_io
Type: RAC
Database is administrator managed
-bash-4.1$ crsctl stat res -p
NAME=ora.nhst.db
TYPE=ora.database.type
ACL=owner:oramdplm:rwx,pgrp:oinstall:r--,other::r--,group:dba:r-x,user:oragrid:r-x
ACTION_FAILURE_TEMPLATE=
ACTION_SCRIPT=
ACTIVE_PLACEMENT=1
AGENT_FILENAME=%CRS_HOME%/bin/oraagent%CRS_EXE_SUFFIX%
AUTO_START=restore
CARDINALITY=2
CHECK_INTERVAL=1
CHECK_TIMEOUT=30
CLUSTER_DATABASE=true
DATABASE_TYPE=RAC
DB_UNIQUE_NAME=nhst
DEFAULT_TEMPLATE=PROPERTY(RESOURCE_CLASS=database) PROPERTY(DB_UNIQUE_NAME= CONCAT(PARSE(%NAME%, ., 2), %USR_ORA_DOMAIN%, .)) ELEMENT(INSTANCE_NAME= 
%GEN_USR_ORA_INST_NAME%) ELEMENT(DATABASE_TYPE= %DATABASE_TYPE%)
DEGREE=1
DESCRIPTION=Oracle Database resource