我正在尝试重构旧代码以使用池包的 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 也需要一些小东西才能正常工作
答案 0 :(得分:0)
orcl
是 service 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"
)