我们有一个本地运行的应用程序,我们遇到了以下错误:
ORA-12514: TNS:监听器当前不知道所请求的服务
在连接描述符中
我已经使用正确解决的tnspring测试了连接
我尝试使用SQLPlus进行连接,但失败了,出现了与上面相同的错误。我在SQLPlus中使用了以下语法:
sqlplus username/password@addressname[or host name]
我们已核实:
服务器上的TNS Listener正在运行。
服务器上的Oracle本身正在运行。
我们不知道这个环境发生了什么变化。
还有什么可以测试的吗?
我有这个问题,修复是确保在tnsnames。ora SERVICE_NAME是数据库中有效的服务名称。要找出有效的服务名称,您可以在oracle中使用以下查询:
select value from v$parameter where name='service_names'
有一次我更新了tnsnames。奥拉:
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = *<validhost>*)(PORT = *<validport>*))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = *<servicenamefromDB>*)
)
)
然后我就跑:
sqlplus user@TEST
成功!
监听器基本上是在告诉你,不管你使用的是什么service_name,根据DB,都不是一个有效的服务。
(*我从Win7客户端工作站运行sqlplus到远程DB,责怪dba;) *)
问题是我的连接字符串url包含数据库名称而不是SID。
将数据库名称替换为oracle数据库连接SID解决了这个问题。
要了解您的oracle SID,可以浏览tnsnames。ora文件。
XE是实际的SID,所以这是我的tomcat连接字符串现在看起来的样子:
<Resource
name="jdbc/my_db_conn"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@//127.0.0.1:1521/XE"
username="test_user"
password="test" />
我的服务器版本是“Oracle 11.2 Express”,但解决方案应该也适用于其他版本。