【问题标题】:Connect to Oracle database using ROracle with tnsnames.ora on Mac OS 10.10在 Mac OS 10.10 上使用带有 tnsnames.ora 的 ROracle 连接到 Oracle 数据库
【发布时间】:2015-11-01 18:50:52
【问题描述】:

跟进Installation of RODBC/ROracle packages on OS X Mavericks...

首先,我使用@joran 提供的答案在 Mac OS 10.10.3 (Yosemite) 上安装了 ROracle。此外,使用启动 plist 文件设置 DYLD_LIBRARY_PATH,我可以运行library(ROracle),它加载得很好。但是,我无法使用 tnsnames.ora 文件连接到我的数据库。我已将 TNS_ADMIN 变量添加到 .Renviron 文件中,RStudio 似乎可以获取该文件:

> Sys.getenv("TNS_ADMIN")
[1] "opt/oracle/instantclient_11_2/network/admin"

例如当我运行以下命令时

con <- dbConnect(drv = dbDriver("Oracle"), dbname = "db", username = "user", password = "pw")

,我得到了错误

Error in .oci.Connect(.oci.drv(), username = username, password = password,  : 
  ORA-12154: TNS:could not resolve the connect identifier specified

另外,我还在 .bash_profile 中添加了 TNS_ADMIN 环境变量,但这并没有帮助。

注意 1:我已经使用 tnsnames.ora 文件通过 SQL Developer 连接到数据库,所以我相当确信问题是文件内容之外的问题。

注意 2:实际上,我可以使用 ROracle 与以下内容进行连接:

# see example at http://www.oralytics.com/2015/05/loading-json-data-into-oracle-using.html
host <- "localhost"
port <- 1521
service <- "pdb12c"
drv <- dbDriver("Oracle")

connect.string <- paste(

"(DESCRIPTION=",

"(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))",

"(CONNECT_DATA=(SERVICE_NAME=", service, ")))", sep = "")

con <- dbConnect(drv, username = "dmuser", password = "dmuser", dbname = connect.string)

我仔细检查了我的 tnsnames.ora 文件,它的格式与 connect.string 完全相同,所以我认为它实际上并没有被 RStudio 看到,即使 Sys.getenv("TNS_ADMIN") 给了我正确的路径。或者,可能是 Mac 上 dbname 参数所需的名称与 Windows 不同。

任何帮助将不胜感激!谢谢!

【问题讨论】:

  • 我认为您在opt/oracle/instantclient_11_2/network/admin/tnsnames.ora 文件中缺少db 服务的连接描述,或者您可以在dbname 参数中尝试EZ 连接字符串:host:port/service
  • 感谢您的推荐。 EZ 连接字符串确实有效,但这不会使 tnsnames.ora 文件无用,因为它基本上是其中唯一的数据?
  • 是的,它确实使 tnsnames.ora 无用。您可以将您在帖子中使用的连接字符串保存在 tnsnames.ora 中,并仅使用您在 dbname 参数中放入此文件的服务名称。

标签: oracle rstudio tnsnames roracle


【解决方案1】:

我在网上看到了很多关于在 Yosemite 上添加环境变量以供 RStudio 访问的建议。至少到目前为止,唯一对我完全有效的方法是将所有环境变量添加到 plist 文件中。您可以根据需要添加任意数量的变量,@MortimorGoro 在Setting environment variables via launchd.conf no longer works in OS X Yosemite/El Capitan/macOS Sierra? 中对此进行了描述。

所以我在这里的解决方案是将 TNS_ADMIN 添加到 plist!

【讨论】:

    【解决方案2】:

    对于那些来到这里但使用 Windows 7 的人,在我的工作站上,我必须使用 TNSnames.ora 文件(也使用 TNS_ADMIN 环境变量)(位于:C:\app - 见第二张截图),我得到以下工作:

    library(RODBC)

    channel <- odbcConnect("PERMIT_DEV_odbc", uid = "POWDERED_TOAST_MAN", pwd = "dev_NONE_OF_YOUR_BEEZNEEZ", believeNRows = FALSE)

    testsql &lt;- "select sysdate from dual;"

    query <- sqlQuery(channel = channel, query = testsql)

    1 单击“开始”按钮(在 Windows 7 中)

    2 开始输入“odbc”并查找“设置数据源 (ODBC)”或类似内容。

    3 根据您的 TNS 文件添加您的连接。

    4 还有一个“测试连接”按钮,您应该使用它来验证连接!

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2014-03-02
      • 2018-07-05
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多