2015-11-02 37 views
2

我们采用RJDBC的速度(超过RODBC),但遇到了一些问题,确保在R会话结束时关闭所有打开的数据库连接。问题是,批量运行后,我们通常会有100多个睡眠数据库连接。我们的服务器正在运行Microsoft SQL Server 2012如何显示和关闭所有活动的RJDBC连接

连接字符串的形式为:

drv <<- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver", "C:/Program Files/Microsoft JDBC Driver 4.2 for SQL Server/sqljdbc_4.2/enu/sqljdbc42.jar") 
dbConnection <<- dbConnect(drv, "jdbc:sqlserver://s26",integratedSecurity=TRUE,databaseName="XXXXXX") 

如何去确保所有活动的数据库连接被关闭?我发现了一个函数,如果我使用RMySQL,它似乎会起作用,但我不是。 RJDBC文件也没有描述任何列出连接的方法,因此可以关闭它们。此外,常见的DBI函数dbListConnections()似乎不适用于RJDBC。

你的帮助是apprecciated!

+0

我没有用过RJDBC(不知道为什么你认为它的速度更快) 我在我的情况下,做的是我在RODBC使用与SQL Server 2012 上.exit(odbcClose('')),它几乎可以确保没有打开的连接 – Bg1850

+0

嗯,感谢您的输入@ Bg1850。我正在考虑转向RODBC,因为RJDBC的dbWriteTable功能和缺乏连接跟踪都证明相当麻烦。我听说RODBC速度很慢,而RJDBC速度很快,反之亦然,但在这一点上功能比速度更重要。一些较新的软件包,如rsqlserver,速度更快,但不够健壮。再次感谢。如果我确实转向RODBC,我会用你的贡献。谢谢! – Abe

回答

2

我知道这个问题前一段时间被问到过,但我回答它以防其他人在寻找解决方案。

您可以检查全局变量是否为JDBC连接并关闭它。
这里是我做的一个示例代码:

var <- as.list(.GlobalEnv) 
    var_names <- names(var) 

    for (i in seq_along(var_names)){ 
     if (class(var[[var_names[i]]]) == "JDBCConnection"){ 
      dbDisconnect(var[[var_names[i]]]) 
     } 
    }