无法解决cx_Oracle.DatabaseError:ORA-12514:TNS:listener当前不知道连接描述符中请求的服务

时间:2018-08-14 09:56:55

标签: oracle ubuntu cx-oracle

我正在尝试访问另一台计算机上的oracle数据库。我正在使用:

  • Ubuntu Server 18.04
  • oracle客户端12.2
  • python 3.6和cx_oracle 6.4.1

我经常收到此错误:

错误

File "basic_test.py", line 5, in <module>
    con =  cx_Oracle.connect('jalabe','jalabepass', cx_Oracle.makedsn('ipserver','port',None,'prod'))
cx_Oracle.DatabaseError: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

basic_tst.py

import cx_Oracle
# first attempt
# con =  cx_Oracle.connect('jalabe/jalabepass@ipaddress/prod')

# second attempt 
con =  cx_Oracle.connect('jalabe','jalabepass', cx_Oracle.makedsn('ipaddress','port',None,'prod'))
print(con.version)
con.close()

tnsnames.ora

DATABASE.WORLD =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ipaddress)(PORT = port))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = prod)
    )
  )

其他信息

  • $ORACLE_HOME/usr/lib/oracle/12.1/client64/lib/
  • 文件tnsnames.ora位于/usr/lib/oracle/12.1/client64/network/admin

我读了很多帖子,没有任何运气。在我所有的帖子中,我读到了这些,尽管它们没有用,但我认为它们更有用

我确定这可能是某个字符。

我没有安装sqlplus或tnslistener。 (可能是原因吗?)(我已经读到tnslistener应该在oracle服务器中,这就是为什么我没有安装它的原因)

1 个答案:

答案 0 :(得分:1)

这里有一些评论和建议可帮助您纠正问题:

1)安装SQL * Plus并使用它连接到数据库。您应该能够使用连接字符串“ jalabe / jalabepass @ host / service_name”进行连接,其中“ host”是找到数据库的主机,“ service_name”是您要连接的数据库的服务名称。同样的连接字符串也应在cx_Oracle中工作。您不需要使用makedsn()或tnsnames.ora(尽管它们当然也可以使用!)

2)使用Instant Client时不要设置环境变量ORACLE_HOME。

3)在数据库计算机上,您应该能够运行命令“ lsnrctl status”,该命令将向您显示侦听器的状态以及它知道的服务。如果您的服务不在列表中,那就是问题的根源!

4)如果停止并重新启动侦听器,则数据库可能需要一段时间才能将其自身注册到侦听器。您可以通过在数据库中以SYSDBA的身份发出“ alter system register”命令(或停止/启动数据库)来使这种情况更快地发生。

希望对您有所帮助!