【Oracle】TNS-12154 错误解析

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

这个提示在一定程度上导致产生误解,让人认为数据库服务名SERVICE NAME本身有问题,其实它指的是tnsnames.ora中配置的别名ALIAS所对应的SERVICE_NAME与在监听程序listener的注册的服务名中找不到匹配的服务名,当然如果只是配置了动态监听,则可能一个也没有(也可能一个也没有,比如只配置了动态监听)。

tnsnames.ora中的服务名SERVICE_NAME的可选值为静态和动态注册的服务名(SERVICE_NAME),也即listener.ora中的GLOBAL_DBNAME和PARAMETER中的SERVICE_NAME,可以是任意支持的字符,但两者必须与保持一致。而sqlplus中的链接字符串,并不是SERVICE_NAME,而是一个SERVICE_NAME的ALIAS(在tnsname.ora中配置)。

lsnrctl status的结果:

Service "PLSExtProc" has 1 instance(s).

  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...

Service "yangdb" has 1 instance(s).

  Instance "yangdb", status UNKNOWN, has 1 handler(s) for this service...

listener.ora的内容:

 (SID_DESC =

          (GLOBAL_DBNAME = yangdb) --listener.ora文件中注册静态监听时的服务名,如上面的Service "yangdb" 

           (ORACLE_HOME = /opt/oracle/11.2.0/alifpre)

          (SID_NAME = yangdb)      --数据库的实例名 

         )

tnsnames.ora的内容

yangdb =                           --别名Alias,可以任意填写!sqlplus  USER/PWD@yangdb 用的就是这个别名

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.250.7.241 )(PORT = 1523))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = yangdb)      --可以任意填写,但是必须和listener.ora中的GLOBAL_DBNAME(静态监听)   

    )                              --或者动态监听时和lsnrctl status 中的"Service"的值一致 

  )

当然对于tnsnames.ora中的SERVICE_NAME 替换为SID的话,必须和lsnrctl status中的 Instance "yangdb" 一致!

使用service_name连接oracle 数据库的方式见《service_name和service_names的关系》一文,下面讨论一下我遇到的使用sid连接数据库的情况:

服务端:

oracle@dba-host1:/opt/oracle/products/9.2.0/network/admin>cat listener.ora 

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = /opt/oracle/products/9.2.0)

      (PROGRAM = extproc)

    )

  )

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS_LIST =

        (ADDRESS = (PROTOCOL = TCP)(HOST = dba-host1.dev.sd.aliyun.com)(PORT = 1521))

      )

      (ADDRESS_LIST =

        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))

      )

    )

  )

oracle@dba-host1:/opt/oracle/products/9.2.0/network/admin>cat tnsnames.ora

yang_TEST =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = yang)

    )

  )

oracle@dba-host1:/home/oracle>lsnrctl status

LSNRCTL for Linux: Version 9.2.0.8.0 - Production on 11-NOV-2011 02:06:41

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dba-host1)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dba-host1)(PORT=8080))(Presentation=HTTP)(Session=RAW))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dba-host1)(PORT=2100))(Presentation=FTP)(Session=RAW))

Services Summary...

Service "ASOFT" has 1 instance(s).

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

Service "PLSExtProc" has 1 instance(s).

  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...

Service "yangXDB" has 1 instance(s).

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

The command completed successfully

在本地的tnsnames.ora文件中service_name 指定 ASOFT 

yang_TEST =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVICE_NAME = ASOFT)

    )

  )

或者知道SID为yang

TEST =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SID=yang)

    )

  )

都可以连接到数据库,如果没有按照上面的例子来做,就会遇到 TNS-12154

使用windows的客户端连接

C:\Users\aaaa>sqlplus yang/yang@test

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 11月 11 02:08:12 201

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

连接到:

Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.8.0 - Production

yang@rac1>EXIT

从 Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.8.0 - Production 断开

C:\Users\aaaa>

时间: 2024-09-17 04:38:03

【Oracle】TNS-12154 错误解析的相关文章

Windows系统中Oracle的ORA-27100错误解析

ora-27100:shared memory realm already exists错误的解决 数据库ora-27100:shared memory realm already exists错误的解决 环境: 操作系统平台 Windows Service 2003 R2 x86 数据库版本   Oracle Enterprise 9.2.0.1 for windows x86 今天一客户数据库启不来了,报ora-27100:shared memory realm already exists

plsql连接oracle数据库报ora 12154错误解决方法_oracle

plsql连接oracle数据库报ora 12154错误 今天遇到一个问题,使用sqlplus能够连接到远程的数据库,但是使用plsql却连接不上,报错"ORA-12154: TNS: 无法解析指定的连接标识符" 解决方法如下: 1.先检查服务器端的监听服务是否打开,如果没有打开请启动其监听 客户端:tnsping <tns_name> 服务器Linux下: #>lsnrctl status 查看监听状态 #>lsnrctl start 启动监听 2.通过Sql

Oracle数据库TNS常见错误的解决方法汇总_oracle

TNS是Oracle Net的一部分,是专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,就必须配置TNS.本文主要讲述了Oracle数据库TNS常见错误的解决方法如下: 1.ORA-12541:TNS:没有监听器 原因:没有启动监听器或者监听器损坏.若是前者,使用命令net start OracleOraHome10gTNSListener(名字可能有出入)即可;如果是后者,则使用"Net Configuration Assistant"

pl/sql developer-PL/SQL Developer 远程连接Oracle 报错无法解析指定的标识符

问题描述 PL/SQL Developer 远程连接Oracle 报错无法解析指定的标识符 环境: 虚拟机中安装CentOS 6.3 CentOS安装Oracle 11gr2 客户机Win7 问题介绍: 已经在CentOS 启动了实例,监听: 开放了1521端口:虚拟机跟客户机网络连通: 使用DBVisualizer可以连接成功目标实例: PL/SQL Dev连接就报错"ORA-12154: TNS:could not resolve the connect identifier specifi

Windows平台 ORA-12560 错误解析

                                                                       Windows平台 ORA-12560 错误解析   ORA-12560: TNS: 协议适配器错误的问题,造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个:   1.监听服务没有起起来. 解决步骤:windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板,启动oraclehome92TNSlistener服

Oracle数据库配置错误信息

oracle|错误|数据|数据库     Oracle数据库配置错误信息     Oralce数据库的错误信息经常会出现,我们看见的都是错误的代码,至于错误原因究竟是什么还一时半会难以解答,所以就把一些常见的错误整理了一下,来看看也许对你有帮助的.1.   Oracle客户端网络配置:          在Oralce产品安装完成后,为了与数据库服务器进行连接或者是两台数据库之间进行数据复制,则必须进行网络连接配置.          Oracle9i Net Service配置方法:     

Oracle中SQL语句解析的步骤

我们都知道在Oracle中每条SQL语句在执行之前都需要经过解析,这里面又分为软解析和硬解析.那么这两种解析有何不同之处呢?它们又分别是如何进行解析呢?Oracle内部解析的步骤又是如何进行的呢?下面我们就这些话题进行共同探讨. 在Oracle中存在两种类型的SQL语句,一类为DDL语句,他们是从来不会共享使用的,也就是每次执行都需要进行硬解析.还有一类就是DML语句,他们会根据情况选择要么进行硬解析,要么进行软解析.在Oracle 8i OCP教材的023中1-12有说明SQL语句的解析步骤,

ORA-01103错误解析

ORA-01103错误解析 作者:吴伟龙 Name: PrudenceWoo QQ:286507175msn:happy-wuweilong@hotmail.com   1.环境介绍:    这是一测试库,我将参数文件,控制文件,数据文件全部删除之后,做数据恢复,但是 我把控制文件和参数文件都恢复回来了,可数据库却怎么也打不开,报ORA-01103: database name 'WWL' in control file is not 'DUMMY'错误   我的数据库名称是:WWL   2.执

解决jdbc连接oracle协议适配器错误

oracle|错误|解决 解决oracle协议适配器错误 现象:jdbc连接oracle817 for Linux出现适配器错误,sqlplus连接正常. 方法:编辑init.ora文件屏蔽 mts_dispatchers = "(PROTOCOL=TCP)(SER=MODOSE)" 重新启动oracle. import java.sql.*;import java.lang.*;import java.util.*; class testjdbc { public static vo