无法解决cx_Oracle.DatabaseError:ORA-12514:TNS:listener当前不知道连接描述符中请求的服务
我正在尝试访问另一台计算机上的oracle数据库。我正在使用:无法解决cx_Oracle.DatabaseError:ORA-12514:TNS:listener当前不知道连接描述符中请求的服务,oracle,ubuntu,cx-oracle,Oracle,Ubuntu,Cx Oracle,我正在尝试访问另一台计算机上的oracle数据库。我正在使用: Ubuntu服务器18.04 oracle客户端12.2 python 3.6和cx_oracle 6.4.1 我经常会遇到这样的错误: 错误 特斯奈姆斯·奥拉 其他信息 $ORACLE\u HOME作为/usr/lib/ORACLE/12.1/client64/lib/ 文件tnsnames.ora位于/usr/lib/oracle/12.1/client64/network/admin 我读过很多帖子,但运气不好。从我读
- Ubuntu服务器18.04
- oracle客户端12.2
- python 3.6和cx_oracle 6.4.1
作为$ORACLE\u HOME
/usr/lib/ORACLE/12.1/client64/lib/
- 文件
位于tnsnames.ora
/usr/lib/oracle/12.1/client64/network/admin
我没有安装sqlplus或tnslistener。(可能是原因吗?) 1) 安装SQL*Plus并使用它连接到数据库。您应该能够使用连接字符串“jalabe”进行连接/jalabepass@host/服务名称,其中“主机”是找到数据库的主机,“服务名称”是要连接到的数据库的服务名称。同样的连接字符串也应该在cx_Oracle中工作。您不需要使用makedsn()或tnsnames.ora(当然,它们也应该工作!) 2) 使用即时客户端时,不要设置环境变量ORACLE_HOME 3) 在数据库计算机上,您应该能够运行命令“lsnrctlstatus”,该命令将显示侦听器的状态以及它知道的服务。如果您的服务不在列表中,这就是问题的根源 4) 如果停止并重新启动侦听器,数据库将在侦听器中注册自身之前可能需要一段时间。您可以通过在数据库中以SYSDBA的身份发出命令“altersystemregister”(或停止/启动数据库),强制更快地执行此操作
希望这能帮到你 为什么不设置环境变量ORACLE_HOME?我正试着解开它,看看它是否起作用。我应该声明TNS_ADMIN变量吗?ORACLE_HOME不用于即时客户端,可能会导致问题。如果需要,可以设置TNS_ADMIN,如果在默认位置找不到配置文件,则必须设置TNS_ADMIN。
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
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()
DATABASE.WORLD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ipaddress)(PORT = port))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prod)
)
)