您的位置:首页 > 其它

多种TNS报错总结--监听器及tnsnames.ora配置文件多种出错总结

2013-11-08 10:26 351 查看
注意:本文内容基本无[b]sqlnet.ora的情况。关于[b]sqlnet.ora,详见:监听中sqlnet.ora的作用[/b]
[/b]

本地命名的配置:.本地名可以用简单的名称访问到所需的数据库或服务器所需的信息,而这些信息保存到了tnsnames.ora中.

LOCALNAME: 本地名称

ADDRESS: 服务器地址

PROTOCOL: 使用协议

HOST: IP地址

PORT: 监听端口

SERVICE_NAME: 数据库服务名称

首先要保证tnsnames.ora文件中的格式正确,如=号、空格、括号之类基本格式不出错

这个可以参考我的一篇tnsnames.ora各种模板:http://blog.csdn.net/q947817003/article/details/11180027
当我们发出一条命令:sqlplus bys/bys@test时,连接到数据库大致经过以下步骤:

1.首先在sqlplus程序的相关目录中查找tnsnames.ora

2.在tnsnames.ora中查找test=开头的字符串

3.根据tnsnames.ora中查找test=字符串中的:PROTOCOL = TCP)(HOST = 192.168.1.211) 这一句,查询相应的HOST,如是IP,则直接访问;如是域名,需要解析为IP

4.当可以与HOST =中描述的主机通讯后,再根据(PORT = 1521)这一句中的描述,在主机的1521这一端口使用TCP协议进行连接。

5.如果以上连接成功,则已经连接到数据库监听器。此时tnsnames.ora中查找test=字符串中的:SERVICE_NAME = bys1,这一句则再次指定了要连接到监听器的bys1服务上

6.如果以上连接成功,已经连接到监听器的bys1服务,则会根据监听器中服务所对应的实例,来连接到具体的实例。(在tnsnames.ora的test=字符串中也可以在SERVICE_NAME =这一句下面再指定具体实例--我实验中未指定;如不指定,则由监听器来分配;如监听器中同一服务下有多个实例(如RAC),由监听器来进行动态均衡分配连接)。

7.如果以上连接成功,则已经连接到实例。接下来就由数据库来验证用户名、密码的正确性了。

本篇的实验即使遵循以上的sqlplus bys/bys@test连接到数据库的步骤来对每一步进行错误演示

关于连接数据库的语句:sqlplus bys/bys@192.168.1.211:1521/bys1  这种是不使用tnsnames.ora文件。连接到192.168.1.211主机的1521端口的bys1服务上。 关于SQLPLUS连接数据库的写法,更详细见:http://blog.csdn.net/q947817003/article/details/11180137

实验环境:LINUX--OLE 5.8;ORACLE -Oracle Database 11g Enterprise Edition Release 11.2.0.1.

##################################################################################

1.tnsnames.ora文件不存在或文件名写错,总之就是找不到这个文件。此时使用本地名来连接是不行的。

测试结果:

TNSPING报错为:TNS-03505: Failed to resolve name

SQLPLUS报错为:ORA-12154: TNS:could not resolve the connect identifier specified

实验数据

[oracle@bys001 admin]$ ls

listener.bak  samples     tnsnames.ora

listener.ora  shrept.lst

[oracle@bys001 admin]$ mv tnsnames.ora tnsnames.oraa

[oracle@bys001 admin]$ tnsping bys1

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 08-NOV-2013 09:24:18

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

Used parameter files:
TNS-03505: Failed to resolve name

[oracle@bys001 admin]$ sqlplus bys/bys@bys1

SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 8 09:25:12 2013

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

ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified

##################################################################################

2.tnsnames.ora 中test本地名对应的字段描述格式正确,数据库监听开启。但是使用TNSPING或SQLPLUS时所用的本地名不对。可能是test本地名前有空格。

(本地名指的是tnsnames.ora 中的描述字段:

test =

(DESCRIPTION =  这里;也即SQLPLUS BYS/BYS@TEST这里的TEST)

测试时:

TNSPING报错为:TNS-03505: Failed to resolve name

SQLPLUS报错为:ORA-12154: TNS:could not resolve the connect identifier specified

如果是test本地名前有空格,WIN下客户端报错可能如上,而LINUX下test本地名有空格时,TNSPING正常。

SQLPLUS报错:ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA  

 --如tnsnames.ora 的本地名中这一段:[b](SERVICE_NAME = bys1)单词拼错,如SERVER_NAME  BYS9等也会报这个错[/b]

实验数据:

[oracle@bys001 admin]$ tnsping hello

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 07-NOV-2013 23:41:29

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

Used parameter files:

TNS-03505: Failed to resolve name

[oracle@bys001 admin]$ sqlplus bys/bys@hello

SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 7 23:42:36 2013

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

ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified

#########################################################################################################

3.tnsnames.ora 中test本地名对应的字段描述格式正确,数据库监听开启。但是tnsnames.ora 中HOST = 字段指定的IP无法PING通。

测试结果:

TNSPING和SQLPLUS报错均为:    TNS-12543: TNS:destination host unreachable

实验数据:

[oracle@bys001 admin]$ cat tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

bys1 =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = bys1)

    )

  )

test =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.222)(PORT = 1521))   手动将HOST中的IP改为一个不存在的IP即可

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = bys1)

    )

  )

[oracle@bys001 ~]$ ping 192.168.1.222

PING 192.168.1.222 (192.168.1.222) 56(84) bytes of data.

From 192.168.1.211 icmp_seq=2 Destination Host Unreachable
From 192.168.1.211 icmp_seq=3 Destination Host Unreachable

[oracle@bys001 admin]$ tnsping test

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 07-NOV-2013 23:08:12

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

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.222)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = bys1)))

TNS-12543: TNS:destination host unreachable

[oracle@bys001 admin]$ sqlplus bys/bys@test

SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 7 23:08:21 2013

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

ERROR:
ORA-12543: TNS:destination host unreachable

#########################################################################################################

4.数据库监听正常。tnsnames.ora 中HOST = 字段指定的主机名无法解析(涉及/etc/hosts或DNS),总之主机名无法解析成IP。

测试结果:

TNSPING和SQLPLUS报错均为:   ORA-12545: Connect failed because target host or object does not exist

实验数据:

[oracle@bys001 admin]$ cat tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

bys1 =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = bys1)

    )

  )

test =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = bucunzai)(PORT = 1521))   手动将HOST指定的主机改为一个不存在的域名/主机名

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = bys1)

    )

  )

[oracle@bys001 admin]$ ping bucunzai
ping: unknown host bucunzai

[oracle@bys001 admin]$ tnsping test

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 07-NOV-2013 23:24:47

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

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = bucunzai)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = bys1)))
TNS-12545: Connect failed because target host or object does not exist       ------这里需要等待一段时间。

[oracle@bys001 admin]$ sqlplus bys/bys@test

SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 7 23:26:08 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.    ------这里需要等待一段时间。

ERROR:
ORA-12545: Connect failed because target host or object does not exist

#########################################################################################################

5.数据库监听正常。tnsnames.ora 中HOST = 字段指定的IP或主机可以连接。但是PORT =字段指定的端口没有打开。

端口没打开:LINUX中即端口没有对应的程序或者叫程序不是在此端口打开。

测试结果:

TNSPING和SQLPLUS报错均为:   ORA-12541: TNS:no listener

从报错中也可以理解出:能连接到主机,但是相应的端口没有对应的程序,所以报错:没有监听器。

这种情况下,如果关闭监听器,使用TNSPING和SQLPLUS测试,报的也是:ORA-12541: TNS:no listener  --见实验7。
实验数据:

[oracle@bys001 admin]$ cat tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

bys1 =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = bys1)

    )

  )

test =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.211)(PORT =
1522))   手动将此端口改为一个不存在的端口--即没对应的程序的端口

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = bys1)

    )

  )

[oracle@bys001 admin]$ tnsping test

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 07-NOV-2013 23:30:49

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

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.211)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = bys1)))
TNS-12541: TNS:no listener

[oracle@bys001 admin]$ sqlplus bys/bys@test

SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 7 23:30:56 2013

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

ERROR:
ORA-12541: TNS:no listener

#########################################################################################################

6.tnsnames.ora 中配置正确,监听正常,数据库服务器所在主机防火墙未开放监听所在的1521端口或者tnsnames.ora指定的端口与监听中不符,远程连接时报TIME OUT。

除了防火墙外,网络不稳定(包括网线质量问题)、ARP问题导致网络时通时不通、路由问题导致时通时不通等等问题都可能引起此错误。

测试结果:   --tnsnames.ora中的端口与监听中端口不符也是报TIME OUT.

TNSPING报错为:TNS-12535: TNS:operation timed out

SQLPLUS报错为:ORA-12170: TNS:Connect timeout occurred

实验数据:

[root@bys001 ~]# service iptables start    ---启动防火墙

Flushing firewall rules:                                   [  OK  ]

Setting chains to policy ACCEPT: filter                    [  OK  ]

Unloading iptables modules:                                [  OK  ]

[root@bys001 ~]# iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination         

[root@bys001 ~]# iptables -A INPUT -p tcp --dport 1521 -j DROP   
--新增加一个策略,禁止连接1521端口

[root@bys001 ~]# iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination         

DROP       tcp  --  anywhere             anywhere            tcp dpt:ncube-lm

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination         

[root@bys001 ~]# su - oracle

[oracle@bys001 ~]$ tnsping bys1       ---bys1是我正常使用的,这里未贴出tnsnames.ora,可以参考实验5

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 08-NOV-2013 00:02:14

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

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.211)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = bys1)))
TNS-12535: TNS:operation timed out

[oracle@bys001 ~]$ sqlplus bys/bys@bys1

SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 8 00:00:07 2013

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

ERROR:
ORA-12170: TNS:Connect timeout occurred

[oracle@bys001 ~]$ su -

Password:

[root@bys001 ~]# service iptables stop                  ----及时关闭防火墙,以免影响后面实验

Flushing firewall rules:                                   [  OK  ]

Setting chains to policy ACCEPT: filter                    [  OK  ]

Unloading iptables modules:                                [  OK  ]
在其它主机上测试:

Last login: Thu Nov  7 23:56:04 2013
[oracle@dg1 ~]$ ping 192.168.1.211

PING 192.168.1.211 (192.168.1.211) 56(84) bytes of data.

64 bytes from 192.168.1.211: icmp_seq=1 ttl=64 time=2.47 ms

^C

--- 192.168.1.211 ping statistics ---

1 packets transmitted, 1 received, 0% packet loss, time 0ms

rtt min/avg/max/mdev = 2.476/2.476/2.476/0.000 ms
[oracle@dg1 ~]$ telnet 192.168.1.211 1521

Trying 192.168.1.211...
telnet: connect to address 192.168.1.211: Connection timed out

telnet: Unable to connect to remote host: Connection timed out

[oracle@dg1 ~]$ sqlplus bys/bys@192.168.1.211:1521/bys1

SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 7 23:57:50 2013

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

ERROR:
ORA-12170: TNS:Connect timeout occurred

#########################################################################################################

7.数据库监听正常。tnsnames.ora 中HOST = 字段指定的IP/主机连通,PORT =字段指定的端口已打开。SERVICE_NAME指定服务名与监听中不符。

即tnsnames.ora 中test本地名对应的字段描述格式正确,监听开启,但是监听中不包括TNS中SERVICE_NAME =描述的服务名。也可能是动态监听时实例没注册到监听。  ---还有一种可能是,RAC服务器时,服务器使用的是SCANIP或VIP,客户端配置的HOST地址中IP与主机名对应有问题或未配置等。

测试结果:

TNSPING可以通。

SQLPLUS连接报错:ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

实验数据:

[oracle@bys001 admin]$ cat tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

bys1 =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = bys1)

    )

  )

test =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = bys999)   手动改为一个不存在的服务名bys999

    )

  )

[oracle@bys001 admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 07-NOV-2013 23:10:38

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=bys001.oel.com)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                05-NOV-2013 16:10:23

Uptime                    2 days 7 hr. 0 min. 15 sec

Trace Level               off

Security                  ON: Password or Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

Listener Log File         /u01/diag/tnslsnr/bys001/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bys001.oel.com)(PORT=1521)))

Services Summary...
Service "bys1" has 1 instance(s).

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

  Instance "bys1", status READY, has 1 handler(s) for this service...

The command completed successfully

[oracle@bys001 admin]$ tnsping bys1

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 07-NOV-2013 23:10:43

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

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.211)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = bys1)))
OK (10 msec)

[oracle@bys001 admin]$ tnsping test  ----一个不存在的服务名,只要主机和端口正确,也是可以用TNSPING测通的。

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 07-NOV-2013 23:10:46

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

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.211)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = bys999)))
OK (10 msec)

[oracle@bys001 admin]$ sqlplus bys/bys@bys1

SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 7 23:10:53 2013

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

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options
BYS@bys1>exit

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

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

[oracle@bys001 admin]$ sqlplus bys/bys@test   服务名不对,测试时TNSPING可能测通,SQLPLUS不能连接

SQL*Plus: Release 11.2.0.1.0 Production on Thu Nov 7 23:10:59 2013

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

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

#########################################################################################################

8.tnsnames.ora 中本地名及相关主机名、端口、服务名描述正常,数据库中监听未开启。--这步原理同实验4相同。

测试结果:

TNSPING和SQLPLUS报错均为:   ORA-12541: TNS:no listener

从报错中也可以理解出:能连接到主机,但是相应的端口没有对应的程序,所以报错为:没有监听器。
实验数据:

[oracle@bys001 ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 08-NOV-2013 09:10:00

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=bys001.oel.com)(PORT=1521)))
TNS-12541: TNS:no listener

 TNS-12560: TNS:protocol adapter error

  TNS-00511: No listener

   Linux Error: 111: Connection refused

[oracle@bys001 ~]$ tnsping bys1

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 08-NOV-2013 09:10:26

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

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.211)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = bys1)))
TNS-12541: TNS:no listener

[oracle@bys001 ~]$ sqlplus bys/bys@bys1

SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 8 09:10:30 2013

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

ERROR:
ORA-12541: TNS:no listener
#########################################################################################################

9.在客户端连接RAC或数据链连接其它库时,报错:ORA-12545:Connect failed because target host or object does not exist

有两种解决方法情况:

参考mos文档:Client Connection to RAC Intermittently Fails-ORA-12545 TNS: Host or Object Does not Exist (文档 ID 364855.1)

1.客户端使用SCANIP连接RAC数据库时的报错:ORA-12545: Connect failed because target host or object does not exist

解决方法是:修改RAC的local_listener参数,将参数值中HOST=的值改为当前节点的VIP或者scanip--注意是IP而不是hostname,客户端可以通过SCANIP或者VIP都可以连接到RAC数据库库

详见:http://blog.csdn.net/haibusuanyun/article/details/17737553
2.数据链连接其它库时,/etc/hosts中没有tnsnames.ora中的主机名与IP的对应,也无法通过DNS解析tnsnames.ora中的主机名。
详见:http://blog.csdn.net/haibusuanyun/article/details/17738631

10.ORA-12523: TNS:listener could not find instance appropriate for the client  TNS共享服务器模式连到到静态监听

我遇到一次,tnsnames.ora里写的是连接模式共享服务器,连到的监听是静态的,报此错误。详情如下:

1.tnsnames.ora里共享服务器模式,连到到静态监听,报错:ORA-12523: TNS:listener could not find instance appropriate for the client

prod_s=

 (DESCRIPTION=

  (ADDRESS=(PROTOCOL=tcp)(HOST=ocm1)(PORT=1521))

  (CONNECT_DATA=

   (SERVER=shared)

   (SERVICE_NAME=PROD)))

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ocm1.bys.com)(PORT=1521)))

Services Summary...

Service "PROD" has 1 instance(s).
  Instance "PROD", status UNKNOWN, has 1 handler(s) for this service...

[oracle@ocm1 admin]$ sqlplus sys/oracle@prod_s as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sun Apr 27 12:20:07 2014

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

ERROR:
ORA-12523: TNS:listener could not find instance appropriate for the client

connection

2.tnsnames.ora里共享服务器模式,连到到动态监听,正常

prod_s=

 (DESCRIPTION=

  (ADDRESS=(PROTOCOL=tcp)(HOST=ocm1)(PORT=1526))

  (CONNECT_DATA=

   (SERVER=shared)

   (SERVICE_NAME=PROD)))

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ocm1.bys.com)(PORT=1526)))

Services Summary...

Service "PROD" has 1 instance(s).

  Instance "PROD", status READY, has 4 handler(s) for this service...

[oracle@ocm1 admin]$ sqlplus sys/oracle@prod_s as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sun Apr 27 12:21:54 2014

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

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>

11.tnsnames.ora 中本地名及相关主机名、端口、服务名描述正常。监听开启,可能因监听的配置文件出错或程序异常等,服务无法注册到监听或其它异常。

这个情况没遇到过,也不知道要怎么来演示了。

说下监听配置文件的注意事项:

1.监听分动态与静态监听,详细见:http://blog.csdn.net/q947817003/article/details/11136477

2.监听器的配置文件listener.ora:和tnsnames.ora同样在在:$ORACLE_HOME/network/admin 文件夹下

3.listener.ora内配置信息格式见:http://blog.csdn.net/q947817003/article/details/11180027

4.静态监听的一个用处是可以用来远程启动数据库。即实例未启动时,仍可以通过远程连接到空闲实例,发出STARTUP命令来启动数据库。

至于这种方式的安全问题,可以通过配置多个监听器,如L1配置为静态监听,L2配置为动态监听。同时在tnsnames.ora中通过配置不同本地名来使不同的业务连接不同的本地名,就最终连到不同监听来解决安全隔离问题。(以上个人理解)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐