使用EZConnect语法时出现Python ORA-12504错误

时间:2017-11-29 21:21:23

标签: python oracle

我使用python Oracle驱动程序和Easy Connection语法,但收到错误:

DatabaseError: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

import cx_Oracle as cx_Oracle

def query_route():
    con = cx_Oracle.connect('user/pwd@10.1.1.24:1521/service')

服务器是版本11.2.0.4.0

按照下面的克里斯托弗·琼斯的回答,我试过了:

con = cx_Oracle("oracle+cx_oracle://user:pwd@(DESCRIPTION = (LOAD_BALANCE=on) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.24)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = service)))")

失败并出现同样的错误

我找到了suggested I need the service name的链接,但我在斜线后使用了该服务。

我做错了什么?

更新:正如Christoper Jones所说,问题是服务名称,而我的错误就是假设我知道这是如何确定的。我从jdbc数据源复制了:

jdbc:oracle:thin:@10.1.1.24:1521:foo

然而,在python代码中,我需要使用:

mgowner/mgowner@10.1.1.24/foo.mycompany.com

1 个答案:

答案 0 :(得分:2)

主机名和端口部分正常:您正在访问Oracle网络侦听器。不知何故,您需要找到正确的服务名称,可能是在托管数据库的计算机上运行lsnrctl status,或在SQL * Plus中执行show parameter service_names(作为特权用户)。如果您有PDBS,请查询其中一个PDB视图。

如果您的数据库很旧,它可能使用的是SID,而不是服务名称,因此您必须构建类似"(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.24)(PORT = 1521)) (CONNECT_DATA = (SID = whatever) ) )"的长连接字符串