在 AWS Oracle RDS 上访问或修改 tnsnames.ora



我正在尝试使用驱动程序通过 Scala Play 应用程序访问在 AWS 上运行ojdbc8Oracle 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

直接连接以下两个决议

  • 如何修复"ORA-12505,TNS:侦听器当前不知道连接描述符中给出的 SID">
  • TNS:侦听器当前不知道连接描述符中给出的 SID

问题是AWS不允许远程访问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 网址:

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

我也尝试使用这种格式

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

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

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

  • jdbc:oracle:thin:@<host_URL>:1521:SID?useCursorFetch=true

当然,这被解释为来自甲骨文的无效 SID。

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

最新更新