我在linux服务器上运行不同的r程序。程序因数据库连接失败而导致以下错误: -
1:在odbcDriverConnect中(paste0(“DRIVER = {SQL Server}; server =”,服务器,:[RODBC]错误:状态08001,代码0,消息[unixODBC] [FreeTDS] [SQL Server]无法连接到数据源
2:在odbcDriverConnect中(paste0(“DRIVER = {SQL Server}; server =”,服务器,:[RODBC]错误:状态01000,代码20002,消息[unixODBC] [FreeTDS] [SQL Server] Adaptive Server连接失败
3:在odbcDriverConnect中(paste0(“DRIVER = {SQL Server}; server =”,服务器,:[RODBC]错误:状态01000,代码20017,消息[unixODBC] [FreeTDS] [SQL Server]来自服务器的意外EOF
4:在odbcDriverConnect中(paste0(“DRIVER = {SQL Server}; server =”,服务器,:ODBC连接失败)执行暂停
有时,程序运行完全没有任何错误。有时会失败。我无法确切地知道问题是什么。
我测试了一段代码,看看它是如何表现的:
library(RODBC)
library(RODBCext)
for (i in 1:100){
dbhandle <- odbcDriverConnect(paste0("DRIVER={SQL Server}; server=",server,"; database=",dbname,"; uid=",username,"; pwd=",password, "; TDS_Version=8.0; Port=1433;", sep=""))
query <- "select * from analysis"
analysis <- sqlExecute(dbhandle, query = query, fetch = T)
odbcClose(dbhandle)
}
有时它会被完全执行。有时它介于两者之间失败(例如第45次连接数据库失败)
我从未在Windows环境中遇到过这个问题。
我想知道在这种情况下究竟是什么问题。它是与网络,驱动程序,我的连接字符串或数据库相关的东西。
什么可以解决这个问题。
我想我的连接字符串和配置文件看起来不错。
也许有一个网络问题,正在放弃一个开放的RODBC
连接。
我试过这个解决方案: -
repeat
{
dbhandle <- odbcDriverConnect(paste0("DRIVER={SQL Server}; server=",server,"; database=",dbname,"; uid=",usernm,"; pwd=",passwd, "; TDS_Version=8.0; Port=1433;", sep=""))
if(class(dbhandle) == "RODBC"){
break
}
}
有了这个,我不会继续,直到我的dbhandle
是班级RODBC
。
通过在我的程序中将此代码集成到需要数据库连接的任何地方,我能够运行程序而不会收到这些错误消息。