10g TNS 13541 监听错误 tnsping可以但是conn system/manager@mult1.net 报错

oracle 10g : ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

error message:

ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

出错原因有很多,如果你检查service里面所有的服务都是started,那说明是监听服务和数据库实例服务的主动跟被动的关系原因导致的。

 

问题解决有2,
方法1.是让listener主动加载服务
原因是 添加
    (SID_DESC =
      (SID_NAME = orcl)
      (ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
    )
后,在使用lsnrctl start监听程序时会将listener的服务注册到进程监视器(pmon)中

方法2.listener被动加载服务

在service里面stop监听服务和数据库实例服务,然后先重新启动监听服务,再启动数据库实例服务。

原因是,如果没有该内容,那么由实例的pmon进程在listener中注册服务,对listener来讲,就是被动了。
这也就是为什么先启动监听后启动数据库能够正常连接的,反之不行的原因了。

 

Dynamically register 与Local_listener参数

因为一个测试库安装了特殊的服务之后会自动往LOCAL_LISTENER参数里设置值,导致利用原参数文件重建的数据库无法自动注册监听服务。
同一主机的其他数据库能自动注册监听服务。
<期间重试了Reload 删除 LISTENER 重新建立一个新的LISTENER等无用功>

非默认监听由于LOCAL_LISTENER参数的设置,变成动态注册

改变参数

SQL> alter system set LOCAL_LISTENER='';

系统已更改。

 

SQL> show parameter lis
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
local_listener                       string     
recovery_parallelism                 integer     0
remote_listener                      string     

终于解决了。

LSNRCTL> status

Service "TEST2" has 1 instance(s).
  Instance "TEST2", status READY, has 1 handler(s) for this service...
Service "TEST2XDB" has 1 instance(s).
  Instance "TEST2", status READY, has 1 handler(s) for this service...

 

a、PMON进程1分钟运行一次,当监听刚刚启动的时候,可能服务还没有注册进去,这时候是不能使用此服务的
b、在修改local_listener参数时,PMON进程也会重新注册一次
c、如果数据库shutdown后,PMON进程也停止了,服务会从监听中删除,这时候只能使用OS认证的方式连入数据库

 

ORA-12514: TNS: listener does not currently know of service requested in connect descriptor

这是个相当恶心的错误,就像癫痫病人一样,不知道什么时候就犯了,好好的用着,吃晚饭再连,就报no listener 起了监听,之后就是这个错误。胡搞一通,不行,重启OK。不知道哪里的问题,因为是测试环境,经常会重启,这个错误就想幽灵一样时出时没。现在的oracle怎么那么难伺候!!烦的多了终于下定决心要找出问题所在,于是在网上阅贴无数,终于找着了能按照一定规律解决问题的方法,就转载了过来

关于这个错误,有很多种情况,我知道有2种情况,以下是网上摘录的:

1、近日在配置Oracle 10G的流复制环境时,遇到一个问题,关闭数据库(shutdown immediate)后,通过SQL Plus连接数据库:conn sys/his@orc0 as sysdba,出现如下错误:

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

通过重启服务的方式启动数据库,再次连接却能成功登录,也就是说在关闭数据库状态下无法连接服务器。

开始以为是系统环境变量Oracle_SID的配置问题,因为机器有多个实例,一阵折腾后还是不能连接。后来查资料得知:

Oracle9i以后,后台进程PMON自动在监听器中注册在系统参数SERVICE_NAMES中定义的服务名,SERVICE_NAMES默认为DB_NAME+DOMAIN_NAME。监听配置文件listener.ora中可以不必指定监听的服务名。但是,当数据库处于关闭状态下PMON进程没有启动,也就不会自动注册监听的实例名,所以使用sqlplus sys/his@orc0 as sysdba
会出现ORA-12514错误。

如果在listener.ora文件中指定监听的实例名,则即使数据库处于关闭状态,仍然可以连接。

listener.ora

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = G:\oracle\product\10.2.0\db_1)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = ORCL)

(http://blog.sina.com.cn/s/blog_4abe7f3a0100g7mm.html) - ORA-12514: TNS: 监听程序当前无法识别连接描述符中_

(ORACLE_HOME = G:\oracle\product\10.2.0\db_1)

(SID_NAME = ORCL)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

)

)

以上粗体部件为增加的内容,修改后重启监听服务后即可。

附:通过在lsnrctl中输入set display verbose,然后再通过命令service查看,服务状态为READY表示PMON自动注册的服务名,而UNKNOWN则表示该服务是手工在LISTENER.ORA中配置的数据库服务。

2、可能是数据库服务器蹦了,这样的话,光重启服务是不行的,重启机器也无济于事。可以用下面的方法解决。

打开cmd窗口,输入sqlplus / as sysdba;startup,完毕后即恢复正常,执行速度有点慢,耐心等待。

该问题附带错误可能是:

oracle not available
shared memory realm does not exist

上述是我转载的文章,试了一下第一种,成功了。应该是有用的。

用sqlplus登陆时报错
ERROR:ORA-12514: TNS:listener does not currently know of service requested in connect
------解决方法--------------------------------------------------------
如果服务器和客户端在同一个子网中,在监听器的配置文件中不填ip,填计算机名。
------解决方法--------------------------------------------------------
如果是同一网段的话,可以将你现在填写的计算机ip改成对应的计算机名字,不过要求网段中计算机名唯一
------解决方法--------------------------------------------------------

关于LISTENER.ORA,TNSNAMES.ORA和SQLNET.ORA的存在问题

最近一次巡检客户的数据库时发现一个小小异常,在$ORACLE_HOME/network/admin目录下居然只有一个tnsnames.ora文件,sqlnet.ora和listener.ora文件都没有,
检查环境变量设置和当前LISTENER进程情况,没有异常,尝试通过TNS登录数据库,都是正常的,马上想到的问题是是否这个文件是被误删掉了,其次就是这种情况下重新启动数据库监听的话是否会因为没有LISTENER.ORA文件而无法正常启动监听。由于是客户在线生产库,所以没有贸然尝试,因为从监听日志中看到当前连接还是很频繁的,平均一分钟有20左右的连入,相对比较繁忙的状况。
因为客户的数据库运行在10.2.0.4上,所以接下来的实验找了一个10.2.0.5的库来进行,版本比较接近,当然就这个问题来说可以估计只要是10G的版本都不会区别太大的。
首先将当前的三个文件做了移动,
Wilson-> pwd
/u01/app/oracle/product/10.2.0/db_1/network/admin
Wilson-> mkdir temp
Wilson-> mv ./*.ora ./temp
然后尝试启动监听和数据库,
监听启动成功,检查进程状态正常,那么这里的结论是如果当前机器上只有一个实例在跑,并且端口使用的都是缺省的1521,那么没有listener.ora文件的话,lsnrctl会尝试启动缺省的监听器,监听当前机器的1521端口。但是当前使用的listener.ora文件在listener.log文件中可以看到,
使用listener.ora文件的日志:
TNSLSNR for Linux: Version 10.2.0.1.0 - Production on 26-APR-2011 13:07:09

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

System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Trace information written to /u01/app/oracle/product/10.2.0/db_1/network/trace/listener.trc
Trace level is currently 0

没有使用listener.ora文件的日志:
TNSLSNR for Linux: Version 10.2.0.5.0 - Production on 21-JUL-2011 03:40:57

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

Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Trace information written to /u01/app/oracle/product/10.2.0/db_1/network/trace/listener.trc
Trace level is currently 0
当然了,并不只是这点表面上的区别,下面是两种情况下lsnrctl status的输出:
使用listener.ora文件的日志:
Wilson-> lsnrctl status

LSNRCTL for Linux: Version 10.2.0.5.0 - Production on 21-JUL-2011 04:50:46

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

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.5.0 - Production
Start Date                21-JUL-2011 03:40:57
Uptime                    0 days 1 hr. 9 min. 48 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Wilson.MyCorp)(PORT=1521)))
Services Summary...
Service "orcl" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orcl_XPT" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully

没有使用listener.ora文件的日志:
Wilson-> lsnrctl status

LSNRCTL for Linux: Version 10.2.0.5.0 - Production on 21-JUL-2011 04:52:25

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.5.0 - Production
Start Date                21-JUL-2011 04:51:32
Uptime                    0 days 0 hr. 0 min. 53 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Wilson.MyCorp)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orcl_XPT" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
可见两种情况下,首先是否启动外部监听是有区别的,也就是说如果程序中使用到了EXTPROC方式,那么不配置listener.ora就可能会有问题,其次才是是否使用了参数文件的区别。
至于sqlnet.ora文件的存在与否,这个不用多说,如果没有sqlnet.ora文件,ORACLE会缺省使用TNSNAMES,ONAMES,HOSTNAME三种方式来尝试连接,
上面是三个文件都不存在情况下的实验,
Wilson-> sqlplus /nolog

SQL*Plus: Release 10.2.0.5.0 - Production on Thu Jul 21 05:09:47 2011

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

SQL> conn scott/tiger
Connected.
SQL> conn 
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified

Warning: You are no longer connected to ORACLE.
SQL> conn 
Connected.
SQL> conn 
Connected.
(端口号如果是1521,可以省略)
下面试验有sqlnet.ora,但是只配置使用TNSNAMES方式,
#NAMES.DIRECTORY_PATH= (HOSTNAME, TNSNAMES, EZCONNECT)
NAMES.DIRECTORY_PATH= (TNSNAMES)

Wilson-> sqlplus /nolog

SQL*Plus: Release 10.2.0.5.0 - Production on Thu Jul 21 05:14:15 2011

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

SQL> conn / as sysdba
Connected.
SQL> conn scott/tiger
Connected.
SQL> conn 
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Warning: You are no longer connected to ORACLE.

可见没有HOSTNAME方式或者EZCONNECT方式都会导致这种简单连接方式的失败。
SQL> conn 
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

Warning: You are no longer connected to ORACLE.
SQL> conn 
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

至于HOSTNAME和EZCONNECT这两种方式,个人感觉在10g中已经没有什么大的区别,感觉是ORACLE10g中人为制造出来的一个NEW FEATURE,而相应的之前的HOSTNAME方式已经被取代,
在10.2.0.5这个版本上,我无法试验成功HOSTNAME直接方式连接成功。

下面引用ORACLE官方的说法,
Oracle 10g Easy Connect Naming

Easy connect naming is not allowed in large or complex environments that require additional connect information. (Large or complex environments employ advanced features, such as connection pooling, external procedure calls, or
Heterogeneous Services.) In these cases, you must use another naming method.

With Oracle 10g, easy connect naming is automatically configured by default at installation. However, before attempting to use this feature, you may want to ensure that EZCONNECT is specified first in the names.directory_path
parameter in the sqlnet.ora file. The names.directory_path parameter is used to specify the order of naming methods that Oracle Net can use to resolve connect identifiers to connect descriptors. Verification is easy. To verify that the names.directory_path
settings are correct, follow these instructions:

Start Oracle Net Manager.
 

In the navigator pane, expand Local > Profile.
 

From the list in the right pane, select Naming.
 

Click the Methods tab. Ensure that EZCONNECT is listed in the Selected Methods list. If it is not, then proceed to Step 5.
 

From the Available Methods list, select EZCONNECT, then click the right-arrow button.
 

From the Selected Methods list, select EZCONNECT, then use the Promote button to move the selection to the top of the list. 
 

Choose File > Save Network Configuration. The sqlnet.ora file updates with the names.directory_path parameter, listing ezconnect first: names.directory_path =(ezconnect, tnsnames).

从上面的表述中也可以看出来,其实HOSTNAME连接方式已经是保留对之前版本的支持而已,11gR2WIN32版本中,ORACLE的NETMGR程序中还可以看到这种连接方式,但是更常被用到的NETCA程序中已经看不到这个连接方式的存在了。

最后说下tnsnames.ora,这个文件其实取决于当前应用所需要的连接方式,在TCP/IP环境下基本上是必不可少的,否则就只能通过类似JAVA连接字符串的形式来连库了。如果需要使用TNSNAMES,也就是本地服务名方式来连接数据库,那么就是必须的要使用到这个文件了。

时间: 2024-10-30 21:14:00

10g TNS 13541 监听错误 tnsping可以但是conn system/manager@mult1.net 报错的相关文章

计算机改名引发的ORA-12541: TNS无监听程序错误

 近期上班时,由于开机时老是提示" 局域网出现计算机重名冲突",于是把计算机名字给改了,从PC2010081312zeo改为了CXBIKKKKKKK,结果第二天来的时候,用 PL/SQL连接我本地机子的ORACLE实例时,弹出ORA-12541:TNS无监听程序错误的提示,当时也没想到是计算机改名引起的问题,以为是相 关服务没有启动缘故,于是我打开服务面板,如图所示,发现 OracleOraDb10g_home1TNSListener服务没有启动,于是启动这个服务,结果等我启动后,出现

ORA-12154 和 TNS-03505 监听错误的解决方法

                                   ORA-12154 和 TNS-03505 监听错误的解决方法   今天在笔记本上本来想做个exp的测试的时候突然报错: ORA-03505:TNS: 无法解析指定的连接标识符   用tnsping 一下: C:\>tnsping wwl;   TNS Ping Utilityfor 64-bit Windows: Version 10.2.0.4.0 - Production on 21-APR-2012 18:27:52

plsql登录时报 ORA-12541: TNS:无监听程序

问题描述 plsql登录时报 ORA-12541: TNS:无监听程序 plsql在公司办公时登录正常,但是一回到家登录时,就会报出:无监听程序. 上网查找方法,修改tnsnames.ora配置内容等方法都没有,求大神帮忙解答,我自己想是不是和网络有关系 解决方案 是因为你的Oracle数据库没有启动,或者是你密码错误! 解决方案二: 兄弟,你是连的公司的oracle服务器吗?如果是,那报这个错,就不足为奇了

ORA-12504:TNS:监听程序在CONNECT_DATA中未获得SERVICE_NAME

客户端配置好服务名后,用PL/SQL Developer连接数据库时,报错:ORA-12504:TNS:监听程序在CONNECT_DATA中未获得SERVICE_NAME.一般这种情况请检查tnsnames.ora文件中TNS是否配置正确,如下所示,SERVICE_NAME 名字弄错了,结果报如上错误: GSP = (DESCRIPTION = (ADDRESS =(PROTOCOL = TCP)(HOST = 172.20.36.79)(PORT = 1521)) (CONNECT_DATA=

连接Oracle数据库时报ORA-12541:TNS:无监听程序的图文解决教程_oracle

在用PL/SQL Developer等客户端工具连接oracle服务器时出现ORA-12541:TNS:无监听程序的错误,如下图: 发现原来是oracle的监听没有启动,重启监听后就连接成功了,下面跟大家分享一下如何启动oracle的监听. 1.在安装Oracle服务器的主机上,打开Net Configuration Assistant 2.选择监听程序配置,下一步 3.选择重新配置,下一步 4.选择监听程序,默认,下一步 注:如果你的监听已启动,则出现提示框,选择是 5.选择协议,使用默认的T

Oracle无法启动1——ORA-12541:TNS:无监听程序

登录oracle,使用sqlplus可以而使用pl/sql developer不行,报ORA-12541:TNS:无监听程序的错,解决办法如下 1.去Net Managet查看监听器,配置的监听字符串是否正确 2.右击我的电脑-->管理-->服务,查看tnslistener是否启动,如果启动尝试重启 说到底还是监听器的问题.有一篇文章谈如何配置监听器http://blog.csdn.net/tianlesoftware/article/details/4861572

centos-oracle11g静默安装监听错误。native library: njni11

问题描述 oracle11g静默安装监听错误.native library: njni11 环境是 CentOS-6.5 64,oracle 11g 金币不足,不好意思 oracle@oraData bin]$ netca /silent/responsefile /opt/software/database/response/netca.rsp UnsatisfiedLinkError exception loading native library: njni11java.lang.Unsa

ORA-12514 监听错误解决

错误现象: [oracle@prudentwoo admin]$ sqlplussystem/oracle@PRUDENTWOO SQL*Plus: Release 11.2.0.1.0 Production onWed Dec 12 03:23:29 2012 Copyright (c) 1982, 2009, Oracle.  All rights reserved.   ERROR: ORA-12514: TNS:listenerdoes not currently know of ser

段错误-在ubuntu环境下执行python程序,报错 segment error

问题描述 在ubuntu环境下执行python程序,报错 segment error 请教各位朋友们,应该如何查看出错的代码文件和行数呢,只报错segment error,无法知道程序哪里错了.而且程序本身很长,大概几千行代码,没有错误定位很难调试. 请问如何打印出具体的错误信息呢,或者如何调试呢? 在此,先谢谢各位朋友们了. 解决方案 生成dump文件,然后gdb调试.看堆栈. 不过你python程序还可以对print打印信息来分析. 解决方案二: segment error 往往是指针的问题