oracle rac 指定实例,RAC环境下连接指定实例的实验

今天在一次简单的通过远程服务器sqlplus连接RACD集群中的实例竟然失败:

SQL*Plus: Release 10.1.0.4.2 - Production on 星期二 7月 24 10:13:07 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> conn sysdba

ERROR:

ORA-12154: TNS: 无法解析指定的连接标识符as

后经过调查,原来罪魁是新近安装的ORACLE_BI套件,由于它的安装,导致了使用的客户端的环境变量发生变化,后安装的BI套件变成了默认的。所以,所使用的sqlplus程序和tnsname文件等一系列东东都变成了BI那一套,由于从未配置过到达RAC的连接,所以连的上才怪呢。

后来在安装OUI调整了二者的顺序,重新启动服务器(不重起无法生效)。一切恢复正常!(注意上下两个sqlplus的版本的区别)

SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 7月 24 10:21:31 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> connas sysdba

已连接。

SQL>

可是虽然连接成功,但我又产生了另一个考虑,如何能显式的连接到集群中的指定实例呢?于是作了以下实验:

思考一:在客户端

客户端,由于每次连接只能是通过tnsnames的NET SERVICE ALIAS来解析服务名,而且由于集群安装成功后,net connection balancing是启动的!所以,每次通过客户端连接都是透明的,连接到racdb1和racdb2的可能性都存在。

SQL> connas sysdba

已连接。

SQL> select instance_name ,status from v$instance;

INSTANCE_NAME STATUS

---------------- ------------

racdb1 OPEN

人为关闭实例1(racdb1):

C:>srvctl stop instance -d racdb -i "racdb1" -o immediate

再连接,则数据库透明的切换到racdb2实例:

SQL> connas sysdba

已连接。

SQL> select instance_name ,status from v$instance;

INSTANCE_NAME STATUS

---------------- ------------

racdb2 OPEN

SQL> conn assysdba

已连接。

SQL> select instance_name ,status from v$instance;

INSTANCE_NAME STATUS

---------------- ------------

racdb2 OPEN

上面的实验也证明了这个观点,通过人为的关闭实例1(racdb1),应用将连接到rac2上。那么,只好手工修改所使用的客户端的tnsnames文件了,添加一行指定实例的描述:

RACDB =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.129.0.66)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = racdb)

(INSTANCE_NAME = racdb2) )

)

连接成功!

思考二:在服务端

今天通过实验,在服务端通过设置环境变量,成功连接到指定的实例

C:>set oracle_sid=racdb1

C:>sqlplus/nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 7月 25 16:21:15 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> connas sysdba

已连接。

SQL> select instance_name from v$instance;

INSTANCE_NAME

----------------

racdb1

C:>set oracle_sid=racdb2

C:>sqlplus/nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 7月 25 16:23:15 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> connas sysdba

已连接。

SQL> select instance_name from v$instance;

INSTANCE_NAME

----------------

racdb2

进一步,我尝试了绕过netservice解析,打算通过easy connection 来实现对集群指定实例的访问。可是无论怎么设置环境变量,还都只能连上racdb1实例。

C:>sqlplus/nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 7月 24 10:23:46 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> conn as sysdba

已连接。

SQL> select instance_name, status from v$instance;

INSTANCE_NAME STATUS

---------------- ------------

racdb1 OPEN

思考中......

由于EASY CONNECTION 的语法是CONNECT ]

而service_name就是racdb,而无法进一步指明racdb1或是racdb2实例了[@more@]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值