首页 > 解决方案 > R Oracle DB 连接因 dbPool 失败,但因 dbConnect 成功

问题描述

我正在尝试使用 pool 包的dbPool函数重构旧代码以使用数据库池。

从历史上看,我一直在使用 DBI 包的dbConnect函数,没有问题。我可以使用以下代码成功创建到我的 Oracle 数据库的连接(所有凭据都是伪造的):

conn <- DBI::dbConnect(
  ROracle::Oracle(),
  "database.abcd1234.us-east-1.rds.amazonaws.com/orcl",
  username="username",
  password="hunter2"
)

但是,当我在同一开发环境中使用相同的凭据尝试创建这样的池时:

pool <- pool::dbPool(
  drv      = ROracle::Oracle(),
  dbname   = "orcl",
  host     = "database.abcd1234.us-east-1.rds.amazonaws.com",
  username = "username",
  password = "hunter2"
)

我收到一个错误:

Error in .oci.Connect(.oci.drv(), username = username, password = password,  : 
  ORA-12162: TNS:net service name is incorrectly specified

我之前使用过 dbPool,但使用的是 Postgres 数据库而不是 Oracle,而对于 Postgres,它可以正常工作!我在想,因为我的凭据适用于 dbConnect,所以我必须缺少一些小东西,这也是 dbPool 正常工作所必需的

标签: roracle

解决方案


orclservice name,不是database name

尝试:

pool <- pool::dbPool(
  drv      = ROracle::Oracle(),
  host     = "database.abcd1234.us-east-1.rds.amazonaws.com/orcl",
  username = "username",
  password = "hunter2"
)

或者

pool <- pool::dbPool(
  drv      = ROracle::Oracle(),
  sid      = "orcl",
  host     = "database.abcd1234.us-east-1.rds.amazonaws.com",
  username = "username",
  password = "hunter2"
)

推荐阅读