SERVICE_NAMES与客户端的TNS配置
本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://blog.itpub.net/post/11/3115
2. SERVICE_NAMES与客户端的TNS配置
在客户端配置tnsnames.ora:
test1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 129.0.8.91)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = SIMIS)
)
)
test2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 129.0.8.91)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = hyk)
)
)
test3 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 129.0.8.91)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = hyb)
)
)
下面分布尝试用这三个tns来连接:
SQL> conn system/manager@test1
已连接。
SQL> /
INSTANCE_NAME HOST_NAME
---------------- ------------------------------
simis SB-HYK
SQL> conn system/manager@test2
已连接。
SQL> /
INSTANCE_NAME HOST_NAME
---------------- ------------------------------
simis SB-HYK
SQL> conn system/manager@test3
已连接。
SQL> /
INSTANCE_NAME HOST_NAME
---------------- ------------------------------
simis SB-HYK
SQL>
我们看到配置的SERVICE_NAME不管是simis、hyk、hyb均可以成功连接到服务器上。
下面看看如果SERVICE_NAMES中如果不包含INSTANCE_NAME的时候能不能通过INSTANCE_NAME进行连接,事实证明连接不成功:
SQL> alter system set service_names='hyb,hyk' scope=both;
系统已更改。
SQL> shutdown abort;
ORACLE 例程已经关闭。
SQL> startup
ORA-03113: 通信通道的文件结束
SQL> conn / as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 114061244 bytes
Fixed Size 282556 bytes
Variable Size 79691776 bytes
Database Buffers 33554432 bytes
Redo Buffers 532480 bytes
数据库装载完毕。
数据库已经打开。
SQL>
SQL> conn system/manager@test1
ERROR:
ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME
3. 结论
从oracle9i开始,后台进程PMON自动在监听器中注册初始化参数SERVICE_NAMES中定义的服务名,SERVICE_NAMES默认为DB_NAME+DOMAIN_NAME。客户端tns配置中SERVICE_NAME的名称必须是SERVICE_NAMES或其中的一个NAME。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-21585/,如需转载,请注明出处,否则将追究法律责任。