ora-12514监听程序当前无法识别连接描述符中请求的服务
你的监听没有起来吧。请执行如下操作,把结果贴出来 1 lsnrctl status 2 tnsnames.
ora ,listener.
ora 文件的内容。 怀疑你的 tnsnames.
ora 文件中的tns名称和 listener.
ora 文件中的不对应。
oracle ora-12514问题
首先在cmd中输 start|find "Ora"
C:Documents and SettingsVoment& start|find "Ora" OracleOraDb10g_home1iSQL*Plus OracleOraDb10g_home1TNSListener OracleServiceORCL
一般都有下面的两行: OracleOraDb10g_home1TNSListener --监听器 OracleServiceORCL --数据库服务
如果没有的话,在运行里面输入services.msc 找到相关实例服务,手动启动 然后在cmd下输入sqlplus "/as sysdba;
C:Documents and SettingsVoment>sqlplus "/as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 8月 30 14:34:18 2010
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> startup nomount; ORACLE 例程已经启动。
Total System Global Area 612368384 bytes Fixed Size 1250452 bytes Variable Size 155192172 bytes Database Buffers 452984832 bytes Redo Buffers 2940928 bytes SQL>alter database mount;
数据库已更改
SQL>alter database open;
数据库已更改 SQL>
ORA_12514:TNS:监听进程不能解析在连接描述中给出的SERVICE_NAME
以下21行是listiner.
ora文件没修改的内容: # listener.
ora Network Configuration File: C:
oracleproduct10.1.0db_workadminlistener.
ora # Generated by
Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (
ORACLE_HOME = C:
oracleproduct10.1.0db_1) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) ) ) 把一下内容加到文件的“(PROGRAM = extproc))”的下一行,其中“
ORACLE”为你所建的数据库名字: (SID_DESC = (GLOBAL_DBNAME =
ORACLE) (
ORACLE_HOME = c:
oracleproduct10.2.0db_1) (SID_NAME =
ORACLE) ) 解决
ORA-
12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 2008-05-27 18:56 错误原因分析: ———————— 检查监听,发现未设置对服务名的监听(
Oracle10g默认安装后不自动设置监听)。 当你的tnsnames.
ora 文件中的SERVICE_NAME没有向你想要连接的数据库服务器中的监听器注册的时候,就会出现这个错误信息。如果你的客户端配置没有发生变化,那么数据库服务器配置就必须进行改变,否则你用来进行连接的SERVICE_NAME就永远不会注册到监听器。 注册到监听器的SERVICE_NAME 是由数据库实例的service_names 参数来决定的。查看参考指南中的服务器文档来找到有关当这个参数没有设置的时候,它的默认值是如何设置的详细信息。你可以通过明确地对其进行设置,来避免它被另一个参数的变化所影响。 你还有可能是遇到了定时的问题。如果监听器被重新启动,那么数据库实例就必须向它重新注册。通常情况下,每60秒就会出现这样的问题。如果你迫不及待,那么就以数据库管理员的身份登录到数据库服务器,并且运行“更改系统注册器”,这样就可以强制它立即注册到监听器中。 ————————————————————————————————————————— 解决办法: —————— 1. 打开文件"<
OracleHome>work/admin/listener.
ora" ,你将看到如下的内容: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (
ORACLE_HOME = D:
oracleproduct10.2.0db_1) (PROGRAM = extproc) ) ) 2. 将下面的语句添加到上面的语句中去。 (SID_DESC = (GLOBAL_DBNAME =
ORACLE) (
ORACLE_HOME = D:
oracleproduct10.2.0db_1) (SID_NAME =
ORACLE) ) 3. 文件的内容则变成了如下所示: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (
ORACLE_HOME = D:
oracleproduct10.2.0db_1) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME =
ORACLE) (
ORACLE_HOME = D:
oracleproduct10.2.0db_1) (SID_NAME =
ORACLE) ) ) 4. 保存文件,然后重新启动监听服务TNSListener就可以了 ! 问题解决 ---------------------- 主动跟被动的关系 1.是让listener主动加载服务 原因是 添加 (SID_DESC = (SID_NAME = orcl) (
ORACLE_HOME = /data/cache1/
oracleDB/
oracle/product/10.2.0/db_2) ) 后,在使用lsnrctl start监听程序时会将listener的服务注册到进程监视器(pmon)中 2.listener被动加载服务 如果没有该内容,那么由实例的pmon进程在listener中注册服务,对listener来讲,就是被动了。 这也就是为什么先启动监听后启动数据库能够正常连接的,反之不行的原因了。