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

ORA-12514: TNS:监听器当前不知道所请求的服务 在连接描述符中

我已经使用正确解决的tnspring测试了连接 我尝试使用SQLPlus进行连接,但失败了,出现了与上面相同的错误。我在SQLPlus中使用了以下语法:

sqlplus username/password@addressname[or host name]

我们已核实:

服务器上的TNS Listener正在运行。 服务器上的Oracle本身正在运行。

我们不知道这个环境发生了什么变化。 还有什么可以测试的吗?


当前回答

对我来说很简单,我只需要在“Windows服务”中手动启动服务。MSC在CMD trompt)。 我的服务名称是:OracleServiceXXXXX。

其他回答

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

在我的情况下,错误是由于监听器没有注册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

完成了!

检查数据库是否启动。登录到服务器,将ORACLE_SID环境变量设置为您的数据库SID,并作为本地连接运行SQL*Plus。

在我的例子中,tnsnames中缺少SERVICE_NAME周围的圆括号。ora文件。

<DBNAME> =
  (DESCRIPTION =
    (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL=TCP)(HOST = nupark-cnvr-ora )(PORT=1521))
    )
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = <DBNAME> ***CLOSING ROUND BRACKET WAS MISSING HERE***
    )
  )

LISTENER_<DBNAME> =

  (ADDRESS = (PROTOCOL = TCP)(HOST = nupark-cnvr-ora)(PORT = 1521))

我只需要替换我的连接字符串

来自:

jdbc:oracle:thin:@localhost:1521:xe

To:

jdbc:oracle:thin:@localhost:1521:orcl