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

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

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

sqlplus username/password@addressname[or host name]

我们已核实:

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

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


当前回答

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

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

$ifconfig

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

$cat /etc/hosts

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

$sudo gedit /etc/hosts

Bye.

其他回答

对于使用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

这对我很有用:)

以我的Linux环境为例,oracle文件在ORACLE_HOME/bin以“红色”颜色突出显示,具有如下不同的权限:

我修改了这个文件的权限如下:

1)停止Oracle -> sudo systemctl Stop Oracle .service 2)修改“ORACLE_HOME/bin”目录下的oracle文件权限为“sudo chmod 777 oracle” 3)启动Oracle -> sudo systemctl Start Oracle .service

修改完成后,我使用lsnrctl status检查listener的状态。在这里,我可以看到db实例成功加载。

但是,我只能使用sqldeveloper连接,使用sqlplus命令行我得到ORA-12547: TNS失联错误。因此,这可以作为使用sqldeveloper的快速解决方案。

注意:修改权限前请备份oracle文件。

这真的应该是对Brad Rippe[1]的回答的一个评论,但是,唉,没有足够的代表性。这个回答让我走了90%的路。在我的例子中,数据库的安装和配置将条目放在tnsnames中。ora文件用于我正在运行的数据库。首先,我能够通过设置环境变量(Windows)连接到数据库:

set ORACLE_SID=mydatabase
set ORACLE_HOME=C:\Oracle\product\11.2.0\dbhome_1

然后连接使用

sqlplus / as sysdba

接下来,运行Brad Rippe回答的命令:

select value from v$parameter where name='service_names';

说明名字并不完全匹配。使用Oracle的数据库配置助手创建的条目最初是:

MYDATABASE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydatabase.mydomain.com)
    )
  ) 

查询中的服务名称只是mydatabase,而不是mydatabase.mydomain.com。我编辑了tnsnames。Ora文件只有基本名称,没有域名部分,所以它们看起来像这样:

MYDATABASE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mylaptop.mydomain.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydatabase)
    )
  ) 

我重新启动了TNS监听器服务(我经常使用lsnrctl stop和lsnrctl start从管理员命令窗口[或Windows Powershell],而不是服务控制面板,但两者都工作。)在那之后,我能够与人沟通。 [1]: https://stackoverflow.com/users/979521/brad-rippe

TNSLSNR上升,但数据库下降。

对于oracle新手来说,当连接被接受时,数据库可能会关闭是不明显的。

我必须手动启动数据库

su - oracle
export ORACLE_SID=XE
sqlplus sys as sysdba

然后在sql console中

startup

在我的情况下,我启动失败,但得到了另一个错误消息,并发现了一个问题的来源-我必须改变主机名,然后数据库自动启动再次发挥作用。

对我来说,这是由于使用动态ipaddress安装造成的。我用一个静态ipaddress重新安装了Oracle,然后一切都好了