连接到oracle数据库(odbc):用户名/密码无效;拒绝登录

14ifxucb  于 2023-01-15  发布在  Oracle
关注(0)|答案(1)|浏览(241)

我想使用R包odbc连接到oracle数据库。
下面的代码给出了一个错误:

host <- 'something'
port <- 1523
svc <- "this"
pass <- '***'
user <- 'me'

con <- odbc::dbConnect(DBI::dbDriver("Oracle"), 
                       UID=user, 
                       PWD=pass,
                       dbname = svc)
ORA-01017: invalid username/password; logon denied

完整版本也是如此:

connect.string <- paste(
        "(DESCRIPTION=",
        "(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))",
        "(CONNECT_DATA=(SERVICE_NAME=", svc, ")))", sep = "")

con <- odbc::dbConnect(DBI::dbDriver("Oracle"), 
                       UID=user, 
                       PWD=pass,
                       dbname = connect.string)
ORA-01017: invalid username/password; logon denied

下面是来自dbDriver的信息:

DBI::dbDriver("Oracle")
Driver name:             Oracle (OCI) 
Driver version:          1.3-1 
Client version:          12.2.0.1.0 
Connections processed:   0 
Open connections:        0 
Interruptible:           FALSE 
Unicode data as utf8:    TRUE 
Oracle type attributes:  FALSE

但是当我使用RODBC处理相同的信息时,一切都很好:

connect.string2 <- paste0("Driver={Oracle in OraClient12Home1};Dbq=",svc,";Uid=",user,";Pwd=",pass,";")
con <-RODBC::odbcDriverConnect(connect.string2)
RODBC::sqlTables(con, tableType = "TABLE") # looks perfect

我真的很想继续使用odbc,因为我有一个包是建立在它之上的(连接到几个不同的数据库,odbc到目前为止一直工作得很好)。为什么这次它不工作了?

kmynzznz

kmynzznz1#

我不知道为什么独立参数方法不起作用,但是你也可以把连接字符串和DBI/odbc一起使用。
或者,您可以将完整的连接字符串作为.connection_string参数传递。连接字符串参考是一个有用的资源,其中包含各种数据库的连接字符串示例。

library(DBI)
con <- dbConnect(odbc::odbc(),
  .connection_string = "Driver={PostgreSQL Driver};Uid=postgres;Pwd=password;Host=localhost;Port=5432;Database=test_db;")

由此,我猜想你可以做到:

connect.string2 <- paste0("Driver={Oracle in OraClient12Home1};Dbq=",svc,";Uid=",user,";Pwd=",pass,";")
con <- odbc::dbConnect(DBI::dbDriver("Oracle"),
                       .connection_string = connect.string2)

相关问题