参照论坛的帖子.
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
已连接。
SQL> conn
已连接。
SQL> conn
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
警告: 您不再连接到 ORACLE。
SQL> conn
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
已连接。
SQL>
SQL> conn
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=
服务摘要..
服务 "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/,如需转载,请注明出处,否则将追究法律责任。