我正在尝试访问另一台计算机上的oracle数据库。我正在使用:
我经常收到此错误:
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)
)
)
$ORACLE_HOME
为/usr/lib/oracle/12.1/client64/lib/
tnsnames.ora
位于/usr/lib/oracle/12.1/client64/network/admin
内我读了很多帖子,没有任何运气。在我所有的帖子中,我读到了这些,尽管它们没有用,但我认为它们更有用
我确定这可能是某个字符。
我没有安装sqlplus或tnslistener。 (可能是原因吗?)(我已经读到tnslistener
应该在oracle服务器中,这就是为什么我没有安装它的原因)
答案 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”命令(或停止/启动数据库)来使这种情况更快地发生。
希望对您有所帮助!