R Oracle DB 连接使用 dbPool 失败,但使用 dbConnect 连接成功

时间:2021-05-01 16:17:11

标签: r oracle

我正在尝试重构旧代码以使用池包的 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 也需要一些小东西才能正常工作

1 个答案:

答案 0 :(得分:0)

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"
)