2023年8月1日发(作者:)

今天在Windows XP上装可个11gR2数据库,却出现个很奇怪的问题,客户机和plsqldev都连不上数据库,提示ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务。

——————tnsping—————————–

C:Documents and SettingsAdministrator>tnsping stream

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 – Production on 31-8月 –

2011 15:34:07

Copyright (c) 1997, 2010, Oracle. All rights reserved.

已使用的参数文件: D:oracleproduct11.2.0dbhome_

已使用 TNSNAMES 适配器来解析别名

尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL =

TCP)(HOST = 127.0 .0.1)

(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = stream)))

OK (0 毫秒)

—————-客户机连接数据库———————–

C:Documents and SettingsAdministrator>sqlplus scott/tiger@stream

SQL*Plus: Release 11.2.0.1.0 Production on 星期三 8月 31 15:34:19 2011

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

ERROR: ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

为什么tnsping是OK的 但是连接时说监听程序当前无法识别连接描述符中请求的服务呢?这是因为tnsping的时候只是根据文件中记录的这个字符串相应的IP地址去查看对应的端口是否开发,而不会去验证SERVICE_NAME是否正确,SERVICE_NAME如果配置的不正确是不能连接上数据库的。

下面是我做的相关测试

———————-查看数据库的SERVICE_NAME—————–

SQL> show parameter service_name

NAME TYPE VALUE

————————————

service_names string stream

可以看到这个数据库的service_name是stream,修改文件,将service_name改成orcl试试tnsping是否还通。

————————–修改文件—————

STREAM =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

———————–tnsping stream————————-

C:Documents and SettingsAdministrator>tnsping stream

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 – Production on 04-9月 -

2011 10:22:42

Copyright (c) 1997, 2010, Oracle. All rights reserved.

已使用的参数文件:

D:oracleproduct11.2.0dbhome_

已使用 TNSNAMES 适配器来解析别名

尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL =

TCP)(HOST = strea

m)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))

OK (30 毫秒)

可以看到SERVICE_NAME = orcl,tnsping仍然OK,在试下这样是否可以连接上数据库。

——————-连接数据库————-

C:Documents and SettingsAdministrator>sqlplus stream/stream@stream

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 9月 4 10:25:19 2011

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

ERROR:

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

请输入用户名:

实验结果已经连接不上数据库,在将文件改成真正的SERVICE_NAME,再次连接数据库

————————————–

STREAM =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = stream)

)

)

——————–再次连接数据库————————-

C:Documents and SettingsAdministrator>sqlplus stream/stream@stream

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 9月 4 10:28:50 2011

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

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

连接数据库成功,远程登录数据库的时候,是依赖于数据库服务端SERVICE_NAME,如果遇到tnsping通但是连接不上数据库的时候,一定要仔细检查是否是SERVICE_NAME配置的不正确。

2023年8月1日发(作者:)

今天在Windows XP上装可个11gR2数据库,却出现个很奇怪的问题,客户机和plsqldev都连不上数据库,提示ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务。

——————tnsping—————————–

C:Documents and SettingsAdministrator>tnsping stream

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 – Production on 31-8月 –

2011 15:34:07

Copyright (c) 1997, 2010, Oracle. All rights reserved.

已使用的参数文件: D:oracleproduct11.2.0dbhome_

已使用 TNSNAMES 适配器来解析别名

尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL =

TCP)(HOST = 127.0 .0.1)

(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = stream)))

OK (0 毫秒)

—————-客户机连接数据库———————–

C:Documents and SettingsAdministrator>sqlplus scott/tiger@stream

SQL*Plus: Release 11.2.0.1.0 Production on 星期三 8月 31 15:34:19 2011

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

ERROR: ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

为什么tnsping是OK的 但是连接时说监听程序当前无法识别连接描述符中请求的服务呢?这是因为tnsping的时候只是根据文件中记录的这个字符串相应的IP地址去查看对应的端口是否开发,而不会去验证SERVICE_NAME是否正确,SERVICE_NAME如果配置的不正确是不能连接上数据库的。

下面是我做的相关测试

———————-查看数据库的SERVICE_NAME—————–

SQL> show parameter service_name

NAME TYPE VALUE

————————————

service_names string stream

可以看到这个数据库的service_name是stream,修改文件,将service_name改成orcl试试tnsping是否还通。

————————–修改文件—————

STREAM =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

———————–tnsping stream————————-

C:Documents and SettingsAdministrator>tnsping stream

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 – Production on 04-9月 -

2011 10:22:42

Copyright (c) 1997, 2010, Oracle. All rights reserved.

已使用的参数文件:

D:oracleproduct11.2.0dbhome_

已使用 TNSNAMES 适配器来解析别名

尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL =

TCP)(HOST = strea

m)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))

OK (30 毫秒)

可以看到SERVICE_NAME = orcl,tnsping仍然OK,在试下这样是否可以连接上数据库。

——————-连接数据库————-

C:Documents and SettingsAdministrator>sqlplus stream/stream@stream

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 9月 4 10:25:19 2011

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

ERROR:

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

请输入用户名:

实验结果已经连接不上数据库,在将文件改成真正的SERVICE_NAME,再次连接数据库

————————————–

STREAM =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = stream)

)

)

——————–再次连接数据库————————-

C:Documents and SettingsAdministrator>sqlplus stream/stream@stream

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 9月 4 10:28:50 2011

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

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

连接数据库成功,远程登录数据库的时候,是依赖于数据库服务端SERVICE_NAME,如果遇到tnsping通但是连接不上数据库的时候,一定要仔细检查是否是SERVICE_NAME配置的不正确。