Loading
0

关于使用 srvctl 手动添加数据库资源到CRS后,sqlplus / as sysdba 始终连接到空闲实例的问题

 

最近安装RAC碰到一个问题,由于是手动建库的,所以需要使用srvctl将database添加到CRS进行管理,之前在Oracle 11gR2 RAC静默安装+手动建库一文中也有提到如何使用srvctl添加数据库资源到crs,原文中的命令是这样的:

这里其实有一个问题,就是 "-o"  这个参数后面跟的ORACLE_HOME的路径,我这里写的是“ /u01/app/oracle/product/11 .2 /db_1/”,当写成这样将数据库加入到CRS管理后,你会发现数据库可以被CRS接管,但是你只能使用网络连接到数据库,也就是通过sqlplus xxx/xxx@xxx 的方式才能连接到实例,而使用本地连接时,也就是 sqlplus xxx/xxx, 你永远都连接不到相应的实例,只能是空闲的实例。

当发现这个问题的时候,我想绝大多数人想到的是你的环境变量ORACLE_SID是不是设置对了,你SID不对肯定连接的实例不对,我一开始也是这样想的,但是检查了N遍发现SID肯定是设置的对的,由于之前也用同样的方式装过一套RAC,并没有出现这样的问题,于是就去那台上查看了命令的历史记录进行对比,结果发现没问题的那台的命令是这样的:

区别在于“ /u01/app/oracle/product/11 .2 /db_1/”和“$ORACLE_HOME”,于是我使用srvctl remove database命令将数据库资源从CRS中删除,然后再替换成使用“$ORACLE_HOME”来添加数据库资源,问题消失了,本地能正常连接到对应的实例了。

这个连接到空实例的问题其实不只有因环境变量“$ORACLE_SID”设置不正确而造成的因素,还有不常发现的因“$ORACLE_HOME”环境变量设置不正确而造成的因素,这里的问题就出在了我在用srvctl添加数据库资源时ORACLE_HOME的路径写的是“ /u01/app/oracle/product/11 .2 /db_1/”,而我在环境变量中设置的的ORACLE_HOME是“ /u01/app/oracle/product/11 .2 /db_1”,这里有“/”和没有这个“/”在ORACLE认为这是两个不同的路径,所以会出现这样的问题,在写路径时还是要相当小心啊。

请尊重我们的辛苦付出,未经允许,请不要转载 Ask600 的文章!