Jac*_*ues 206 oracle sqlplus oracle11g ora-12514 tnsping
我们有一个在本地运行的应用程序,我们遇到以下错误:
ORA-12514:TNS:监听器当前不知道连接描述符中请求的服务
我已经测试了TNSPing正确解析的连接,我试图SQLPlus尝试连接,但失败的错误与上面相同.我用这个语法SQLPlus:
sqlplus username/password@addressname[or host name]
Run Code Online (Sandbox Code Playgroud)
我们已经证实:
我们不知道对此环境所做的任何更改.还有其他我们可以测试的吗?
Bra*_*ppe 190
我有这个问题,并修复是确保在tnsnames.ora该SERVICE_NAME在数据库中,一个有效的服务名称.要查找有效的服务名称,可以在oracle中使用以下查询:
select value from v$parameter where name='service_names'
Run Code Online (Sandbox Code Playgroud)
一旦我更新tnsnames.ora到:
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = *<validhost>*)(PORT = *<validport>*))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = *<servicenamefromDB>*)
)
)
Run Code Online (Sandbox Code Playgroud)
然后我跑了:
sqlplus user@TEST
Run Code Online (Sandbox Code Playgroud)
成功!监听器基本上告诉您,根据数据库,您使用的任何service_name都不是有效的服务.
(*我从Win7客户端工作站运行sqlplus到远程数据库并责怪DBA;)*)
小智 36
我知道这是一个老问题,但仍然没有答案.我花了一天时间研究,但我发现了最简单的解决方案,至少在我的情况下(Windows 2008 R2上的Oracle 11.2)并且想要分享.
如果直接查看错误,则表示侦听器无法识别服务名称.但它在哪里保留服务名称?在%ORACLE_HOME%\NETWORK\ADMIN\listener.ora
"SID_LIST"就是这样,一个SID和服务名称列表以您可以复制或查找的格式配对.
我添加了问题服务名称,然后在Windows"服务"控制面板中,我在Oracle侦听器服务上执行了"重新启动".现在一切都很好.
例如,您的listener.ora文件最初可能如下所示:
# listener.ora Network Configuration File: C:\app\oracle_user\product\12.1.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\oracle_user\product\12.1.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle_user\product\12.1.0\dbhome_1\bin\oraclr12.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
Run Code Online (Sandbox Code Playgroud)
...要使其识别服务名称orcl,您可以将其更改为:
# listener.ora Network Configuration File: C:\app\oracle_user\product\12.1.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\oracle_user\product\12.1.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle_user\product\12.1.0\dbhome_1\bin\oraclr12.dll")
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = C:\app\oracle_user\product\12.1.0\dbhome_1)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
Run Code Online (Sandbox Code Playgroud)
sur*_*all 13
对于那些使用 spring-boot 和 jdbc 进行连接的人。在 application.properties 中写入 jdbcUrl 时必须小心
在数据库连接中使用 SID -
source.datasource.jdbcUrl = jdbc:oracle:thin:@[HOST][:PORT]:SID
在数据库连接中使用服务名称
globe.datasource.jdbcUrl = jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
这对我有用:)
小智 12
我在Windows Server 2008 R2和Oracle 11g上遇到过这个问题
转到网络管理器>监听器>从combox选择数据库服务>"全局数据库名称"必须与"SID"相同,"Oracle主目录"必须正确.
如果您没有任何数据库服务条目,请创建一个并设置正确的全局数据库sid和oracle home.
man*_*nix 10
在我的情况下,错误是由于监听器没有注册db的服务.我通过注册服务解决了这个问题.例:
我的描述在tnsnames.ora:
LOCALDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = LOCALDB)
)
)
Run Code Online (Sandbox Code Playgroud)
所以,我继续listener.ora手动注册服务:
SID_LIST_LISTENER =
(SID_DESC =
(GLOBAL_DBNAME = LOCALDB)
(ORACLE_HOME = C:\Oracle\product\11.2.0\dbhome_1)
(SID_NAME = LOCALDB)
)
Run Code Online (Sandbox Code Playgroud)
最后,通过命令重启监听器:
> lsnrctl stop
> lsnrctl start
Run Code Online (Sandbox Code Playgroud)
完成!
这真的应该是对Brad Rippe回答的评论,但可惜,代表不够。这个答案让我完成了 90% 的工作。就我而言,数据库的安装和配置将条目放入我正在运行的数据库的 tnsnames.ora 文件中。首先,我能够通过设置环境变量(Windows)连接到数据库:
set ORACLE_SID=mydatabase
set ORACLE_HOME=C:\Oracle\product\11.2.0\dbhome_1
Run Code Online (Sandbox Code Playgroud)
然后使用连接
sqlplus / as sysdba
Run Code Online (Sandbox Code Playgroud)
接下来,运行 Brad Rippe 的回答中的命令:
select value from v$parameter where name='service_names';
Run Code Online (Sandbox Code Playgroud)
显示名称不完全匹配。使用 Oracle 的数据库配置助手创建的条目最初是:
MYDATABASE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydatabase.mydomain.com)
)
)
Run Code Online (Sandbox Code Playgroud)
查询中的服务名称只是mydatabase而不是mydatabase.mydomain.com. 我将 tnsnames.ora 文件编辑为没有域部分的基本名称,因此它们看起来像这样:
MYDATABASE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydatabase)
)
)
Run Code Online (Sandbox Code Playgroud)
我重新启动TNS Listener服务(我经常使用lsnrctl stop并lsnrctl start从管理员命令窗口[或Windows PowerShell]代替服务控制面板,但两者的工作。)在那之后,我能够连接。
我有同样的问题。对我来说,只是写作
sqlplus myusername/mypassword@localhost
Run Code Online (Sandbox Code Playgroud)
做到了,我猜这样做会使其连接到默认服务名称。
| 归档时间: |
|
| 查看次数: |
1177229 次 |
| 最近记录: |