我们有一个本地运行的应用程序,我们遇到了以下错误:

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;) *)

其他回答

对于使用spring-boot和jdbc进行连接的用户。 在application.properties中编写jdbcUrl时必须小心

与SID在数据库连接- source.datasource.jdbcUrl = jdbc:oracle:thin:@[HOST][:PORT]:SID

在db连接中使用服务名称 global .datasource. jdbcurl = jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE

这对我很有用:)

在我的情况下,错误是由于监听器没有注册db的服务。我通过注册服务解决了这个问题。例子:

我在tnsnames.ora中的描述符:

LOCALDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = LOCALDB)
    )
  )

因此,我继续在侦听器中注册服务。奥拉手动:

SID_LIST_LISTENER =
    (SID_DESC =
      (GLOBAL_DBNAME = LOCALDB)
      (ORACLE_HOME = C:\Oracle\product\11.2.0\dbhome_1)
      (SID_NAME = LOCALDB)
    )

最后,通过命令重新启动监听器:

> lsnrctl stop
> lsnrctl start

完成了!

我解决了这个问题在我的linux环境更新我的机器的IP在/etc/hosts文件。

您可以验证您的网络IP (inet end.):

$ifconfig

查看您的IP是否与/etc/hosts文件匹配:

$cat /etc/hosts

如果需要,编辑/etc/hosts文件:

$sudo gedit /etc/hosts

Bye.

我的问题解决了,用“服务名称”和正确的主机替换URL中的“sid”。

问题可能在于不正确的URL。

例如,我正在使用Oracle数据库(在VM内部)与Spring框架,并有这个问题。

在我的申请中。属性文件:

spring.datasource.url=jdbc:oracle:thin:@//localhost:1521/orcl12c

但是db版本是不同的:

spring.datasource.url=jdbc:oracle:thin:@//localhost:1521/orclcdb

正确的URL可以在tnsnames中找到。ora文件(这个文件可以在Oracle服务器上找到,所以如果你使用VM,你应该在你的主机VM中寻找这个文件)。 例如,在VirtualBox中查看Oracle文件的命令是:

nano /u01/app/oracle/product/version/db_1/network/admin/tnsnames.ora