【问题标题】:How to pass isolation level through R ODBC and DBI with DB2/AS400如何使用 DB2/AS400 通过 R ODBC 和 DBI 传递隔离级别
【发布时间】:2022-01-23 06:43:39
【问题描述】:

我正在尝试找出一种通过 R DBI/ODBC 为 DB2/AS400 连接字符串传递隔离级别的方法。我什至不确定我的问题是否正确。

我可以使用以下链接中的说明更改 Windows ODBC 服务器设置中的提交模式,但如果可能,我需要将设置放入连接字符串中。: https://www.ibm.com/support/pages/ibm-i-access-odbc-commit-mode-data-source-setting-isolation-level-and-autocommit

这是我们的 DBA 允许我们这些小数据科学家写入 DW 的唯一方式。

当然必须有一种方法可以通过“*NONE”又名“立即提交(*NONE),但是 ODBC 文档(第 21 页)不包括以下设置: https://cran.r-project.org/web/packages/odbc/odbc.pdf

连接字符串:

con <- DBI::dbConnect(odbc::odbc(),
                      SYSTEM = "system",
                      Driver    = "{iSeries Access ODBC Driver}", 
                      #Server    = "server",
                      #Database  = "",
                      UID       = "uid",
                      PWD       = rstudioapi::askForPassword("password"),
                      DBQ =   "MYLIB"
                      #Port      = 
                    
)

【问题讨论】:

  • 并不是说它有多大帮助,但odbc 文档中的缺席并不意味着很多:该包是访问其他软件中的 ODBC 连接器的通用包;它通常将它不知道的参数传递给驱动程序,因此请查看iSeries Access ODBC Driver 的文档以了解它可能需要的参数,然后开始四处寻找。我曾问过question 寻找以编程方式确定这些参数的方法,但底层的FR at nanodbc 已经停滞不前。 :-(
  • (过去,我能够在 Windows ODBC 驱动程序“设置”页面中看到可用的选项,并且通过大量的反复试验,找到能够在 R 中使用。至少我认为我做到了,现在不完全确定我正在测试哪个驱动程序,也不能确定我找到了什么选项。但这听起来像是一个不可怕的想法,尽管效率低下。)
  • @r2evans 非常感谢您的 cmets 和链接。你给了我正确的术语来开始进一步挖掘。就 DB2 的 iSeries 驱动程序而言。我能够通过 ODBC API 找到驱动程序支持的所有参数。再次感谢! ibm.com/docs/en/i/7.4?topic=details-connection-string-keywords

标签: r odbc db2-400 isolation-level autocommit


【解决方案1】:

ISeries ODBC 驱动程序 API 文档: https://www.ibm.com/docs/en/i/7.4?topic=details-connection-string-keywords 转到第二部分以查找所有提交模式选项。

用于更改提交模式的连接字符串:

con <- DBI::dbConnect(odbc::odbc(),
                      SYSTEM = "system",
                      Driver    = "{iSeries Access ODBC Driver}", 
                      #Server    = "server",
                      #Database  = "",
                      UID       = "uid",
                      PWD       = rstudioapi::askForPassword("password"),
                      DBQ =   "MYLIB",
                      CMT = 0
                      #Port      = 
                    
)
Possible values:
0 = Commit immediate (*NONE)
1 = Read committed (*CS)
2 = Read uncommitted (*CHG)
3 = Repeatable read (*ALL)
4 = Serializable (*RR)

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2011-02-11
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多