使用EZConnect语法时出现Python ORA-12504错误
我正在使用python Oracle驱动程序和Easy Connection语法,但收到一个错误:使用EZConnect语法时出现Python ORA-12504错误,python,oracle,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.
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)))")
它失败了,出现了相同的错误
我找到了一个链接,但我正在使用斜杠后的服务
我做错了什么
更新:正如ChristoperJones所说,问题在于服务名称,我的错误是假设我知道如何确定它。我从jdbc数据源复制了:
jdbc:oracle:thin:@10.1.1.24:1521:foo
但是,在python代码中,我需要使用:
mgowner/mgowner@10.1.1.24/foo.mycompany.com
主机名和端口部分没有问题:您正在进入Oracle网络侦听器。您可能需要在托管数据库的计算机上运行
lsnrctl status
,或者(作为特权用户)在SQL*Plus中执行show parameter service_names
,从而找到正确的服务名称。如果您有PDB,请查询其中一个PDB视图
如果您的数据库非常旧,它可能使用SID,而不是服务名称,因此您必须构造长连接字符串,如
“(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.24)(PORT=1521))(CONNECT_DATA=(SID=whatever)))
主机名和端口部分正常:您正在接通Oracle网络侦听器。您可能需要在托管数据库的计算机上运行lsnrctl status
,或者(作为特权用户)在SQL*Plus中执行show parameter service_names
,从而找到正确的服务名称。如果您有PDB,请查询其中一个PDB视图
如果您的数据库非常旧,它可能使用SID,而不是服务名称,因此您必须构造长连接字符串,如
“(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.24)(PORT=1521))(CONNECT_DATA=(SID=whatever)))
在您的tnsnames.ora
文件中,您的service\u name
参数可能很长,带有点,例如mydb.mycomp.com
,然后用这个长点描述替换service
关键字。巴巴拉斯:我相信这是在没有tnsnames.ora文件的情况下使用的格式。我错了吗?不,我不是指完整的描述,从你的编辑中,我看到了忘记我的评论:),因为你的服务名称只是service
(不像service.mycompany.com.us
)在您的tnsnames.ora
文件中,您的service\u name
参数可能是长的,带有点,例如mydb.mycomp.com
,然后将service
关键字替换为长点描述。巴巴拉斯:我相信这是在没有tnsnames.ora文件的情况下使用的格式。我错了吗?不,我不是指这个完整的描述,从你的编辑中,我看到了忘记我的评论:),因为你的服务名只是service
(不像service.mycompany.com.us
),我已经更新了,以显示我在哪里尝试了你的建议,以及Oracle的版本。我所知道的服务是正确的,因为我从一个可以连接的java进程的配置中复制了它。我已经进行了更新,以显示我在哪里尝试了您的建议,以及Oracle版本。我所知道的服务是正确的,因为我从可以连接的java进程的配置中复制了它。