ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于SERVICE_NAMES的补充说明

关于SERVICE_NAMES的补充说明

原创 Linux操作系统 作者:husthxd 时间:2004-11-12 00:00:00 0 删除 编辑

参照论坛的帖子.

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/,如需转载,请注明出处,否则将追究法律责任。

下一篇:
请登录后发表评论 登录
全部评论
长期从事政务、金融等行业产品研发和架构设计工作,对Oracle、PostgreSQL以及大数据等相关技术有深入研究。现就职于广州云图数据技术有限公司,系统架构师。

注册时间:2007-12-28

  • 博文量
    1167
  • 访问量
    3634301