关于SERVICE_NAMES的补充说明

参照论坛的帖子.

http://www.itpub.net/showthread.php?s=&threadid=276221&perpage=15&pagenumber=1


SQL> select *from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Prod
PL/SQL Release 10.1.0.2.0 - Production
CORE    10.1.0.2.0      Production
TNS for 32-bit Windows: Version 10.1.0.2.0 - Production
NLSRTL Version 10.1.0.2.0 - Production

SQL> show parameter service_names

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      test1,test2
SQL>

客户端tns配置:
TEST =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = test)
    )
  )

TEST1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = test1)
    )
  )

TEST2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = test2)
    )
  )

TEST3 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = simis)
    )
  )

1.服务器端配置示例一
# listener.ora Network Configuration File: e:oracleproduct10.1.0db_1NETWORKADMINlistener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
  )

服务摘要..
服务 "test1" 包含 1 个例程。
  例程 "simis", 状态 READY, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已拒绝:0 状态:ready
         LOCAL SERVER
服务 "test2" 包含 1 个例程。
  例程 "simis", 状态 READY, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已拒绝:0 状态:ready
         LOCAL SERVER
命令执行成功
LSNRCTL>


客户端连接:
SQL> conn system/manager@test1
已连接。
SQL> conn system/manager@test2
已连接。
SQL> conn system/manager@test
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务


警告: 您不再连接到 ORACLE。
SQL> conn system/manager@test3
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务


2.服务器端配置示例二
# listener.ora Network Configuration File: e:oracleproduct10.1.0db_1NETWORKADMINlistener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = test)
      (ORACLE_HOME = E:oracleproduct10.1.0db_1)
      (SID_NAME = simis)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
  )

服务摘要..
服务 "test" 包含 1 个例程。
  例程 "simis", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已被拒绝:0
         LOCAL SERVER
服务 "test1" 包含 1 个例程。
  例程 "simis", 状态 READY, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已拒绝:0 状态:ready
         LOCAL SERVER
服务 "test2" 包含 1 个例程。
  例程 "simis", 状态 READY, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已拒绝:0 状态:ready
         LOCAL SERVER
命令执行成功
LSNRCTL>


客户端连接:
SQL> conn system/manager@test
已连接。
SQL>
SQL> conn system/manager@test3
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务


警告: 您不再连接到 ORACLE。 

可以认为,如果没有在listener.ora中配置数据库服务的话客户端的service_name是必须要是service_names或其中之一.
如果在listener.ora中配置了数据库服务的话,客户端的service_name可以设置为服务器端监听器配置文件中的GLOBAL_DBNAME
 

把显示模式设置为verbose可以发现一些有用信息.

Microsoft Windows [版本 5.2.3790]
(C) 版权所有 1985-2003 Microsoft Corp.

C:Documents and SettingsAdministrator>lsnrctl

LSNRCTL for 32-bit Windows: Version 10.1.0.2.0 - Production on 12-11月-2004 15:0
1:04

Copyright (c) 1991, 2004, Oracle.  All rights reserved.

欢迎来到LSNRCTL, 请键入"help"以获得信息。

LSNRCTL> set display verbose
服务显示模式为VERBOSE
LSNRCTL> service
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=1521)))
服务摘要..
服务 "test" 包含 1 个例程。
  例程 "simis", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已被拒绝:0
         LOCAL SERVER
         (ADDRESS=(PROTOCOL=beq)(PROGRAM=oracle)(ENVS='ORACLE_HOME=E:oraclepro
duct10.1.0db_1,ORACLE_SID=simis')(ARGV0=oraclesimis)(ARGS='(LOCAL=NO)'))
服务 "test1" 包含 1 个例程。
  例程 "simis", 状态 READY, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已拒绝:0 状态:ready
         LOCAL SERVER
         (ADDRESS=(PROTOCOL=BEQ)(PROGRAM=oracle)(ARGV0=oraclesimis)(ARGS='(LOCAL
=NO)'))
服务 "test2" 包含 1 个例程。
  例程 "simis", 状态 READY, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已拒绝:0 状态:ready
         LOCAL SERVER
         (ADDRESS=(PROTOCOL=BEQ)(PROGRAM=oracle)(ARGV0=oraclesimis)(ARGS='(LOCAL
=NO)'))
命令执行成功
LSNRCTL>

(ARGV0=oraclesimis)(ARGS='(LOCAL=NO)'中的oraclesimis猜想应该是对应的oracle实例.

这可以解析为何GLOBAL_DBNAME可以为任意合法字符而SID为INSTANCE_NAME的情况下

客户端的service_name可以设置为服务器端监听器配置文件中的GLOBAL_DBNAME均可以连接上服务器的原因了.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-21629/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/6906/viewspace-21629/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值