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

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

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

sqlplus username/password@addressname[or host name]

我们已核实:

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

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


当前回答

TNSLSNR上升,但数据库下降。

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

我必须手动启动数据库

su - oracle
export ORACLE_SID=XE
sqlplus sys as sysdba

然后在sql console中

startup

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

其他回答

以我的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文件。

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

TNSLSNR上升,但数据库下降。

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

我必须手动启动数据库

su - oracle
export ORACLE_SID=XE
sqlplus sys as sysdba

然后在sql console中

startup

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

问题可能在于不正确的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

对于那些可能在虚拟机中运行Oracle的人(比如我),我看到这个问题是因为我的虚拟机内存不足,这似乎阻止了OracleDB正确启动/运行。增加我的虚拟机内存和重新启动修复了这个问题。