如何使用 DB2/AS400 通过 R ODBC 和 DBI 传递隔离级别

How to pass isolation level through R ODBC and DBI with DB2/AS400

提问人:Ian Hunter 提问时间:12/22/2021 更新时间:12/28/2021 访问量:268

问:

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

我可以使用以下链接中的说明更改 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      = 
                    
)
R ODBC DB2-400 隔离级别 自动提交

评论

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

答:

1赞 Ian Hunter 12/26/2021 #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)