我使用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
答案 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) ) )"
的长连接字符串