【问题标题】:Access or modify tnsnames.ora on AWS Oracle RDS访问或修改 AWS Oracle RDS 上的 tnsnames.ora
【发布时间】:2020-02-21 17:31:42
【问题描述】:

我正在尝试使用 ojdbc8 驱动程序通过 Scala Play 应用程序访问在 AWS 上运行的 Oracle RDS 实例。我需要访问tnsnames.ora 文件并检查其配置,因为我收到此错误:

Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

下面这两个分辨率是直接相连的

问题是 AWS does NOT allow remote access to the Oracle RDS 和我在 AWS 控制台中找不到任何可以帮助我更改甚至访问 tnsnames.ora 内容的内容。

我可以使用 SQL 来完成吗?此错误甚至似乎不一致,因为例如,某些查询确实有效....

/// 更多信息:

成功执行如下查询:

SELECT COUNT(*) FROM (

SELECT
  DISTINCT tab.column_a, tab.column_a AS L0, tab.column_a AS L1, tab.column_a AS L2
FROM
  ADMIN.table_something tab
WHERE
  tab.column_a IS NOT NULL 

)

失败的看起来像这样

SELECT
  DISTINCT tab.column_a, tab.column_a AS L0, tab.column_a AS L1, tab.column_a AS L2
FROM
  ADMIN.table_something tab
WHERE
  tab.column_a IS NOT NULL 

我所说的失败是指产生我上面提到的错误。从 SQL 命令提示符执行这些不会产生错误。

我正在使用这个 jdbc URL:

jdbc:oracle:thin:@<host_URL>:1521:SID

我也尝试过使用这种格式

jdbc:oracle:thin:@<host_URL>:1521/ServiceNames

但显然 AWS RDS 实例没有配置服务名称,因为如果我使用一个会产生语法错误。我发现的大多数答案都将tnsnames.ora 称为配置服务名称和 SID 的位置,因此包含有关如何实际形成连接字符串的信息。这就是我想要访问它的原因,如果我发现有可疑之处,请修改它。

【问题讨论】:

    标签: oracle scala amazon-web-services


    【解决方案1】:

    在这种情况下,错误是查询字符串。在代码中的某处,将以下查询参数附加到查询字符串:useCursorFetch=true。这最初是为了支持 MySQL 数据库而添加的,但它也保留在所有其他数据库中。然后,对于 Oracle,连接 URL 被转换为以下内容:

    • jdbc:oracle:thin:@&lt;host_URL&gt;:1521:SID?useCursorFetch=true

    这当然被解释为来自 Oracle 的无效 SID。

    我仍然认为应该有一种直接的方法来检查 tnsnames.ora 文件。

    【讨论】:

      猜你喜欢
      • 2021-02-20
      • 1970-01-01
      • 2022-11-17
      • 2016-04-22
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      • 2019-11-12
      相关资源
      最近更新 更多