[quote]TNS-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
TNS-12541:TNS:无监听程序[/quote]在oracle应用中,tns-xxxxx这样的错误在我们的应用中是非常常见的。
tns-xxxxx的错误一般都是和数据库的连接有关的错误,他通常是发生在请求数据库连接时发生的。
下面我们来看看有哪些tns-xxxx的错误,已经这些错误发生的原因,已经对应的解决方案。
这里的提示信息是无法解析连接描述符,表示连接标识符,也就是tnsnname和你本地的tnsname.ora
里配置的不一致,连接时,请求tnsname描述符,但是更不就找不到,这样就会出现这样的错误,
检查我们配置的tnsname文件
只能找到这样一个本地tnsname服务的配置,可以看到确实是tnsname不一致,修改我们的sqlplus连接命令
和tnsname里配置的保持一致
这里很明显了,是所请求的服务器的监听程序还没有启动,现在我们启动监听服务,注意这里有很多网友一起问
的问题中,总是将listener和tnsname混淆在一起,这里两者有很大的区别的,listener是服务器端需要的进程
用来客户端的连接通讯。 而tnsname不是进程,是一个客户端的配置,是客户端如何去请求和服务器连接的配置
信息,包括服务器的host,端口,sid,连接方式,连接协议等。
我们用上面的tnsname来做实例,看看tnsname是如何进行描述的
表示tcp协议,一般来说常见的都是tcp, host是要连接的服务器的机器名或者ip, port是服务器监听的端口,通过这一段
客户端sqlplus进行连接的时间,就是要是和janes的服务器,以tcpd哦方式,在1521请求服务器的连接。
这里表示,获取listener对于的连接,SERVER = DEDICATED标识是专用服务器的方式,SERVICE_NAME = ORCL是指的
连接上服务器上一个名为ORCL的实例,为了兼容以前的8i或者以前的版本,这里也提供SID这样的方式,也就是需要连接的
实例的ID
通过tnsname描述文件,我们可以看到,我们现在需要连接的janes机器,那么就是janes上的监听没有启动,所以请求到这里
监听还没有准备好,也就提示这样的错了
进入janes机器,启动服务。
服务以前启动成功了
接着我们再用命令请求登录
还是出现错误,估计如果意志不坚强,没有恒心的朋友,经常就会放弃了,其实我们看到,我们已经一步一步的排查,都快接近
成功的彼岸了。我们不能就这样放弃,继续分析我们的错误信息
这里的错误信息也描述的很清楚了,无法识别连接描述符里请求的服务。什么是连接描述符,不就是我们这里一直再提的tnsname
的配置么,这个tnsname配置里的服务名无法识别,很显然这里的错误信息告诉我们两个重要信息。
1. 已经和tnsname里描述中的服务器进行到了连接
2. 连接中tnsname里的service_name并不能在连接中的服务器上找到。
既然是这样,我们可以查询一下服务器上监听都有哪些实例服务呢
[quote]监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=janes)(PORT=1521)))
监听程序不支持服务[/quote]
命令执行成功
确实这里写着监听程序不支持服务
这句话是什么意思了,由于我的janes这个服务器,都没有启动数据库实例,所以没有一个实例存在在这个监听上,有就出现了这样的提示信息了,其实就是指的监听现在没有一个数据库实例进行了注册,这里我们要先明白一个动态注册和静态注册的概念,对于9i或者以上的版本,数据库实例启动的时候nomount这个状态,数据库就会把自己service_name注册到监听里,这个是动态注册,有时可以alter system register动态注册。静态注册就是通过listener.ora文件,把需要注册的数据库的服务名注册到监听里。 这个具体的一些知识,在别的文章
里再详细阐述
既然如此,我们启动我们的数据库实例,在janes服务器上
服务实例启动成功
再看看listener的状态
奇怪了,怎么还是提示没有服务呀,这个并不奇怪,这里不过是还没有及时的注册到监听上而已,多等一下时间,在看看状态
OK,现在出现了这些服务了
这里可以看到我们的orcl这个数据库实例已经注册上去了。我们再连接试试
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
大功告成,已经完全搞定了。
listener.log是记录监听的日志,当有连接成功的请求过来是都会有记录记载的,
上面的实验会有如下log发现
16-8月 -2009 07:56:31 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)(CID=(PROGRAM=F:\developer\oracle\product\10.2.0\db_1\bin\sqlplus.exe)(HOST=JANES)(USER=shenjuan))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.202)(PORT=1940)) * establish * ORCL * 12514
TNS-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
16-8月 -2009 08:05:16 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=shenjuan))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169869568)) * status * 0
16-8月 -2009 08:11:48 * service_register * orcl * 0
16-8月 -2009 08:11:54 * service_update * orcl * 0
16-8月 -2009 08:12:48 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=shenjuan))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169869568)) * status * 0
16-8月 -2009 08:14:18 * service_update * orcl * 0
16-8月 -2009 08:16:25 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)(CID=(PROGRAM=F:\developer\oracle\product\10.2.0\db_1\bin\sqlplus.exe)(HOST=JANES)(USER=shenjuan))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.202)(PORT=1946)) * establish * ORCL * 0
16-8月 -2009 08:16:27 * service_update * orcl * 0
你分析一下,我做了什么动作了?
这个文章,我们一步一步的分步的进行错误的研究,从而很系统的了解到,每个常常出现的有关tnsname连接
出现连接方面的错误时,错误的原因和解决的方法,这样,我们可以根据不同的错误信息提示已经不同的错误情况
对错误的原因进行快速的定位,并能快速的找到与之对应的解决方法. 当然,单单看看文章是不足以完全掌握其中
的知识点的,oracle的学习一定要注重实践和总结,这里不可能能罗列出所有的错误,也不可能写出所以的解决的
方案,但是通过这里的实例,大家可以很清楚的看到,如果我们有信心,有耐心,有思考力,和善于总结和实践的话,完全
是可以自己找到解决方案的. 这个是作为一个DBA和准备做DBA所必需具备的。
在用PL/SQL Developer连接数据库时出现
“ORA-12541:TNS:无监听程序”错误。
1、检查listener.log日志
发现下面错误:
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 10:25:26
Copyright (c) 1991, 2005, Oracle. All rights reserved.
系统参数文件为D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
写入D:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息
写入D:\oracle\product\10.2.0\db_1\network\trace\listener.trc的跟踪信息
跟踪级别当前为0
以 pid=1704 开始
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
监听该对象时出错: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.5.0.5)(PORT=1521)))
TNS-12545: 因目标主机或对象不存在, 连接失败
TNS-12560: TNS: 协议适配器错误
TNS-00515: 因目标主机或对象不存在, 连接失败
32-bit Windows Error: 49: Unknown error
不再监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
2、查看Oracle的listener是否启动
C:\Documents and Settings\mengzhaoliang>lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 10:5
0:44
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
TNS-12541: TNS: 无监听程序
TNS-12560: TNS: 协议适配器错误
TNS-00511: 无监听程序
32-bit Windows Error: 2: No such file or directory
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.5.0.5)(PORT=1521)))
TNS-12535: TNS: 操作超时
TNS-12560: TNS: 协议适配器错误
TNS-00505: 操作超时
32-bit Windows Error: 60: Unknown error
原来没有启动listener,用“lsnrctl start”命令也不能启动。
C:\Documents and Settings\mengzhaoliang>lsnrctl start
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 10:5
2:16
Copyright (c) 1991, 2005, Oracle. All rights reserved.
启动tnslsnr: 请稍候...
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
系统参数文件为D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
写入D:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
监听该对象时出错: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.5.0.5)(PORT=1521))
)
TNS-12545: 因目标主机或对象不存在, 连接失败
TNS-12560: TNS: 协议适配器错误
TNS-00515: 因目标主机或对象不存在, 连接失败
32-bit Windows Error: 49: Unknown error
监听程序未能启动。请参阅上面的错误消息...
3、查看listener.ora的内容:
# listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.5.0.5)(PORT = 1521))
)
)
原来本机的ip发生改变后,就出现了上述问题,改变数据库的监听ip地址:
把(ADDRESS = (PROTOCOL = TCP)(HOST = 0.5.0.5)(PORT = 1521))
改成
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
127.0.0.1:也就是目前数据库正在用的ip地址。
4、再次启动oracle的listener
C:\Documents and Settings\mengzhaoliang>lsnrctl start
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 10:5
4:40
Copyright (c) 1991, 2005, Oracle. All rights reserved.
启动tnslsnr: 请稍候...
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
系统参数文件为D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
写入D:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 20-9月 -2008 10:54:41
正常运行时间 0 天 0 小时 0 分 1 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件 D:\oracle\product\10.2.0\db_1\network\log\listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
启动已经成功,
5.再tnsnames.ora上添加上
ORCL_127.0.0.1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
6、再次用PL/SQL Developer再次连接数据库
出现下面错误:
TNS-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
再次检查listener.log日志
20-9月 -2008 11:01:54 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)(CID=
(PROGRAM=D:\plsql\plsqldev.exe)(HOST=RUIFEI-EF0ADC98)(USER=mengzhaoliang))) * (ADDRESS=
(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1267)) * establish * orcl * 12514
TNS-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看listener:
C:\Documents and Settings\mengzhaoliang>lsnrctl services
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 11:1
1:09
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已被拒绝:0
LOCAL SERVER
命令执行成功
7、用sqlplus也出现同样错误:
C:\Documents and Settings\mengzhaoliang>sqlplusscott/mzl@ORCL_127.0.0.1
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 9月 20 11:15:09 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
8、查看listenser状态:
C:\Documents and Settings\mengzhaoliang>lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 11:2
6:42
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 20-9月 -2008 11:24:33
正常运行时间 0 天 0 小时 2 分 8 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件 D:\oracle\product\10.2.0\db_1\network\log\listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
C:\Documents and Settings\mengzhaoliang>tnsping orcl
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -
2008 11:27:43
Copyright (c) 1997, 2005, Oracle. All rights reserved.
已使用的参数文件:
D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
TNS-03505: 无法解析名称
9、查看sqlnet.ora内容:
# sqlnet.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
10.把listener.ora的内容:
# listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
改成下面的内容:
# listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
# (PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = orcl))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
11、然后关闭、再启动listener
在cmd中执行“lsnrctl stop” 和“lsnrctl stop”命令,再次登陆正常!
C:\Documents and Settings\mengzhaoliang>sqlplusscott/mzl@orcl
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 9月 20 11:55:47 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
再次用PL/SQL Peveloper登陆就没有问题了。
完毕!
TNS-12541:TNS:无监听程序[/quote]在oracle应用中,tns-xxxxx这样的错误在我们的应用中是非常常见的。
tns-xxxxx的错误一般都是和数据库的连接有关的错误,他通常是发生在请求数据库连接时发生的。
下面我们来看看有哪些tns-xxxx的错误,已经这些错误发生的原因,已经对应的解决方案。
C:\>sqlplus "/@orcl1 as sysdba"
ERROR:
ORA-12154: TNS: 无法解析指定的连接标识符
这里的提示信息是无法解析连接描述符,表示连接标识符,也就是tnsnname和你本地的tnsname.ora
里配置的不一致,连接时,请求tnsname描述符,但是更不就找不到,这样就会出现这样的错误,
检查我们配置的tnsname文件
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = janes)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
只能找到这样一个本地tnsname服务的配置,可以看到确实是tnsname不一致,修改我们的sqlplus连接命令
和tnsname里配置的保持一致
C:\>sqlplus "/@orcl as sysdba"
ERROR:
ORA-12541: TNS: 无监听程序
这里很明显了,是所请求的服务器的监听程序还没有启动,现在我们启动监听服务,注意这里有很多网友一起问
的问题中,总是将listener和tnsname混淆在一起,这里两者有很大的区别的,listener是服务器端需要的进程
用来客户端的连接通讯。 而tnsname不是进程,是一个客户端的配置,是客户端如何去请求和服务器连接的配置
信息,包括服务器的host,端口,sid,连接方式,连接协议等。
我们用上面的tnsname来做实例,看看tnsname是如何进行描述的
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = janes)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
(ADDRESS = (PROTOCOL = TCP)(HOST = janes)(PORT = 1521))
表示tcp协议,一般来说常见的都是tcp, host是要连接的服务器的机器名或者ip, port是服务器监听的端口,通过这一段
客户端sqlplus进行连接的时间,就是要是和janes的服务器,以tcpd哦方式,在1521请求服务器的连接。
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
这里表示,获取listener对于的连接,SERVER = DEDICATED标识是专用服务器的方式,SERVICE_NAME = ORCL是指的
连接上服务器上一个名为ORCL的实例,为了兼容以前的8i或者以前的版本,这里也提供SID这样的方式,也就是需要连接的
实例的ID
通过tnsname描述文件,我们可以看到,我们现在需要连接的janes机器,那么就是janes上的监听没有启动,所以请求到这里
监听还没有准备好,也就提示这样的错了
进入janes机器,启动服务。
C:\>lsnrctl start
服务以前启动成功了
接着我们再用命令请求登录
C:\>sqlplus "/@orcl as sysdba"
还是出现错误,估计如果意志不坚强,没有恒心的朋友,经常就会放弃了,其实我们看到,我们已经一步一步的排查,都快接近
成功的彼岸了。我们不能就这样放弃,继续分析我们的错误信息
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
这里的错误信息也描述的很清楚了,无法识别连接描述符里请求的服务。什么是连接描述符,不就是我们这里一直再提的tnsname
的配置么,这个tnsname配置里的服务名无法识别,很显然这里的错误信息告诉我们两个重要信息。
1. 已经和tnsname里描述中的服务器进行到了连接
2. 连接中tnsname里的service_name并不能在连接中的服务器上找到。
既然是这样,我们可以查询一下服务器上监听都有哪些实例服务呢
C:/>lsnrctl status
[quote]监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=janes)(PORT=1521)))
监听程序不支持服务[/quote]
命令执行成功
确实这里写着监听程序不支持服务
这句话是什么意思了,由于我的janes这个服务器,都没有启动数据库实例,所以没有一个实例存在在这个监听上,有就出现了这样的提示信息了,其实就是指的监听现在没有一个数据库实例进行了注册,这里我们要先明白一个动态注册和静态注册的概念,对于9i或者以上的版本,数据库实例启动的时候nomount这个状态,数据库就会把自己service_name注册到监听里,这个是动态注册,有时可以alter system register动态注册。静态注册就是通过listener.ora文件,把需要注册的数据库的服务名注册到监听里。 这个具体的一些知识,在别的文章
里再详细阐述
既然如此,我们启动我们的数据库实例,在janes服务器上
C:\>sc start oracleserviceorcl
服务实例启动成功
再看看listener的状态
奇怪了,怎么还是提示没有服务呀,这个并不奇怪,这里不过是还没有及时的注册到监听上而已,多等一下时间,在看看状态
OK,现在出现了这些服务了
C:\>sc start oracleserviceorcl
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=janes)(PORT=1521)))
服务摘要..
服务 "ORCLXDB" 包含 1 个例程。
例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "ORCL_XPT" 包含 1 个例程。
例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个例程。
例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
这里可以看到我们的orcl这个数据库实例已经注册上去了。我们再连接试试
C:\>sqlplus "/@orcl as sysdba"
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
大功告成,已经完全搞定了。
listener.log是记录监听的日志,当有连接成功的请求过来是都会有记录记载的,
上面的实验会有如下log发现
16-8月 -2009 07:56:31 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)(CID=(PROGRAM=F:\developer\oracle\product\10.2.0\db_1\bin\sqlplus.exe)(HOST=JANES)(USER=shenjuan))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.202)(PORT=1940)) * establish * ORCL * 12514
TNS-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
16-8月 -2009 08:05:16 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=shenjuan))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169869568)) * status * 0
16-8月 -2009 08:11:48 * service_register * orcl * 0
16-8月 -2009 08:11:54 * service_update * orcl * 0
16-8月 -2009 08:12:48 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=shenjuan))(COMMAND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169869568)) * status * 0
16-8月 -2009 08:14:18 * service_update * orcl * 0
16-8月 -2009 08:16:25 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)(CID=(PROGRAM=F:\developer\oracle\product\10.2.0\db_1\bin\sqlplus.exe)(HOST=JANES)(USER=shenjuan))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.202)(PORT=1946)) * establish * ORCL * 0
16-8月 -2009 08:16:27 * service_update * orcl * 0
你分析一下,我做了什么动作了?
这个文章,我们一步一步的分步的进行错误的研究,从而很系统的了解到,每个常常出现的有关tnsname连接
出现连接方面的错误时,错误的原因和解决的方法,这样,我们可以根据不同的错误信息提示已经不同的错误情况
对错误的原因进行快速的定位,并能快速的找到与之对应的解决方法. 当然,单单看看文章是不足以完全掌握其中
的知识点的,oracle的学习一定要注重实践和总结,这里不可能能罗列出所有的错误,也不可能写出所以的解决的
方案,但是通过这里的实例,大家可以很清楚的看到,如果我们有信心,有耐心,有思考力,和善于总结和实践的话,完全
是可以自己找到解决方案的. 这个是作为一个DBA和准备做DBA所必需具备的。
在用PL/SQL Developer连接数据库时出现
“ORA-12541:TNS:无监听程序”错误。
1、检查listener.log日志
发现下面错误:
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 10:25:26
Copyright (c) 1991, 2005, Oracle. All rights reserved.
系统参数文件为D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
写入D:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息
写入D:\oracle\product\10.2.0\db_1\network\trace\listener.trc的跟踪信息
跟踪级别当前为0
以 pid=1704 开始
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
监听该对象时出错: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.5.0.5)(PORT=1521)))
TNS-12545: 因目标主机或对象不存在, 连接失败
TNS-12560: TNS: 协议适配器错误
TNS-00515: 因目标主机或对象不存在, 连接失败
32-bit Windows Error: 49: Unknown error
不再监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
2、查看Oracle的listener是否启动
C:\Documents and Settings\mengzhaoliang>lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 10:5
0:44
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
TNS-12541: TNS: 无监听程序
TNS-12560: TNS: 协议适配器错误
TNS-00511: 无监听程序
32-bit Windows Error: 2: No such file or directory
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.5.0.5)(PORT=1521)))
TNS-12535: TNS: 操作超时
TNS-12560: TNS: 协议适配器错误
TNS-00505: 操作超时
32-bit Windows Error: 60: Unknown error
原来没有启动listener,用“lsnrctl start”命令也不能启动。
C:\Documents and Settings\mengzhaoliang>lsnrctl start
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 10:5
2:16
Copyright (c) 1991, 2005, Oracle. All rights reserved.
启动tnslsnr: 请稍候...
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
系统参数文件为D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
写入D:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
监听该对象时出错: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.5.0.5)(PORT=1521))
)
TNS-12545: 因目标主机或对象不存在, 连接失败
TNS-12560: TNS: 协议适配器错误
TNS-00515: 因目标主机或对象不存在, 连接失败
32-bit Windows Error: 49: Unknown error
监听程序未能启动。请参阅上面的错误消息...
3、查看listener.ora的内容:
# listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.5.0.5)(PORT = 1521))
)
)
原来本机的ip发生改变后,就出现了上述问题,改变数据库的监听ip地址:
把(ADDRESS = (PROTOCOL = TCP)(HOST = 0.5.0.5)(PORT = 1521))
改成
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
127.0.0.1:也就是目前数据库正在用的ip地址。
4、再次启动oracle的listener
C:\Documents and Settings\mengzhaoliang>lsnrctl start
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 10:5
4:40
Copyright (c) 1991, 2005, Oracle. All rights reserved.
启动tnslsnr: 请稍候...
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
系统参数文件为D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
写入D:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 20-9月 -2008 10:54:41
正常运行时间 0 天 0 小时 0 分 1 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件 D:\oracle\product\10.2.0\db_1\network\log\listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
启动已经成功,
5.再tnsnames.ora上添加上
ORCL_127.0.0.1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
6、再次用PL/SQL Developer再次连接数据库
出现下面错误:
TNS-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
再次检查listener.log日志
20-9月 -2008 11:01:54 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)(CID=
(PROGRAM=D:\plsql\plsqldev.exe)(HOST=RUIFEI-EF0ADC98)(USER=mengzhaoliang))) * (ADDRESS=
(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1267)) * establish * orcl * 12514
TNS-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看listener:
C:\Documents and Settings\mengzhaoliang>lsnrctl services
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 11:1
1:09
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已被拒绝:0
LOCAL SERVER
命令执行成功
7、用sqlplus也出现同样错误:
C:\Documents and Settings\mengzhaoliang>sqlplusscott/mzl@ORCL_127.0.0.1
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 9月 20 11:15:09 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
8、查看listenser状态:
C:\Documents and Settings\mengzhaoliang>lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -2008 11:2
6:42
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 20-9月 -2008 11:24:33
正常运行时间 0 天 0 小时 2 分 8 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件 D:\oracle\product\10.2.0\db_1\network\log\listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
C:\Documents and Settings\mengzhaoliang>tnsping orcl
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 20-9月 -
2008 11:27:43
Copyright (c) 1997, 2005, Oracle. All rights reserved.
已使用的参数文件:
D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
TNS-03505: 无法解析名称
9、查看sqlnet.ora内容:
# sqlnet.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
10.把listener.ora的内容:
# listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
改成下面的内容:
# listener.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
# (PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = orcl))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
)
11、然后关闭、再启动listener
在cmd中执行“lsnrctl stop” 和“lsnrctl stop”命令,再次登陆正常!
C:\Documents and Settings\mengzhaoliang>sqlplusscott/mzl@orcl
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 9月 20 11:55:47 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
再次用PL/SQL Peveloper登陆就没有问题了。
完毕!