当前位置: 首页 > 面试题库 >

使用SID代替连接字符串上的服务名称时,cx_Oracle无法连接

狄睿
2023-03-14
问题内容

我有一个看起来像这样的连接字符串

con_str = "myuser/mypass@oracle.sub.example.com:1521/ora1"

ora1我的数据库的SID在哪里。在SQL Developer中使用此信息可以正常工作,这意味着我可以毫无问题地进行连接和查询。

但是,如果我尝试使用此字符串连接到Oracle,它将失败。

cx_Oracle.connect(con_str)

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

但是,如果连接ora1是服务名称,则此连接字符串格式有效。

我看过其他问题,似乎与我的问题相反(它可以与SID一起使用,但不能与服务名一起使用)

使用cx_OracleSID而不使用服务名称连接到Oracle的正确方法是什么?我如何做到这一点而无需调整TNSNAMES.ORA文件?我的应用程序在内部分发给许多用户,并且TNSNAMES在与Windows计算机上没有管理员特权的用户打交道时,对文件进行更改并不理想。此外,当我使用服务名称时,我完全不需要触摸此文件,而是希望它保持这种状态。


问题答案:

在类似的情况下,我能够通过使用cx_Oracle.makedsn()给定的(而不是服务名)创建 dsn
字符串来连接到数据库SID

dsnStr = cx_Oracle.makedsn("oracle.sub.example.com", "1521", "ora1")

这返回类似

(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle.sub.example.com)(PORT=1521)))(CONNECT_DATA=(SID=ora1)))

然后可以用来cx_Oracle.connect()连接数据库:

con = cx_Oracle.connect(user="myuser", password="mypass", dsn=dsnStr)
print con.version
con.close()


 类似资料:
  • 问题内容: 我正在尝试通过sql developer连接到远程服务器上的oracle db。我将连接详细信息复制到tnsnames,并且能够连接到数据库。 但是我有另一个与sqldeveloper相同的数据库应用程序,当我尝试建立连接时,我不断收到此错误。此应用程序使用需要主机名和SID的oracle jdbc瘦客户端。 我收到以下错误: java.sql.SQLException:侦听器拒绝连接

  • 我有一个应用程序正在从jooq切换到jdbc,我使用jdbc创建了一个表,但我需要编辑一些jooq查询来加入它,问题是自动生成的jooq tables类无法识别它,所以有没有办法通过字符串名引用表? 下面是一些示例代码: 我如何在此处加入“连接”表?没有桌子。连接,因为它是以不同的方式创建的。 有很多疑问,所以我们希望根据需要逐步进行转换。 更新:我尝试添加以下内容,并且查询运行,但是我尝试获取的

  • 问题内容: 我有一个使用JDBC(通过JPA)的Java应用程序,它使用主机名,端口和Oracle SID连接到开发数据库,​​如下所示: jdbc:oracle:thin:@ oracle.hostserver1.mydomain.ca:1521:XYZ XYZ是Oracle SID。现在,我需要连接到另一个不使用SID而是使用Oracle“服务名”的Oracle数据库。 我试过了,但是没有用:

  • 我想在上运行我的站点,并且我想将数据库连接到另一个容器,该容器只有我所有站点的数据库。 为此,我使用以下创建了一个容器: 正如您所看到的,我已经使用映像安装了作为服务,这将返回以下内容: 然后,我创建了一个具有实例的新容器: 如您所见,我挂载了文件夹,因为我已经安装了带有插件和媒体的Wordpress...然后我尝试将此容器连接到容器,但当我使用以下方式运行此容器时: 我得到: MySQL连接错误

  • 我正在使用Azure设备预配服务(DPS)自动向Azure IoT中心注册和预配设备。 我想得到一个特定设备的孪生设备。 我可以通过使用de DeviceClient类来管理设备双胞胎: 但是我想通过使用RegistryManager获取设备,它需要特定IoTHub的连接字符串。 是否可以从DPS、连接的设备或IoT中心名称(即结果)中获取IoT中心连接字符串。AssignedHub)?我正在使用

  • 这是mysql连接php脚本。它不断地显示出它的错误 警告:mysqli_connect():(HY000/1045):用户'user'@'localhost'(使用密码:YES)在第6行的C:\xampp\htdocs\index.php访问被拒绝 注意:尝试在第7行连接成功的C:\xampp\htdocs\index.php中获取非对象的属性 我听不懂,请帮帮我好吗?

  • 首先,我知道有很多类似的问题,但我所看到的似乎都不能解决我的设置(我发现的任何解决方案都不管用)。所以请容忍我。。。 我的服务器主机名是IP地址,而不是域名(即URL看起来像:) 我的服务器有一个真正的证书(即,没有自签名) 我的应用程序的plist条目字典为空(没有任何例外-出厂设置ATS) 这是生产代码,我不能禁用ATS(我也不认为我可以,因为例外只适用于显式域名,而不是IP地址) (iOS9

  • 在日志屏幕中,我得到一个错误: