2017-10-30 9 views
1

Linuxサーバーで異なるrプログラムを実行しています。プログラムはデータベース接続に失敗し、以下のエラーが発生します。 -LinuxでRODBCを使用してSQL Serverに接続する際にエラーが発生しました

1: In odbcDriverConnect(paste0("DRIVER={SQL Server}; server=", server, : [RODBC] ERROR: state 08001, code 0, message [unixODBC][FreeTDS][SQL Server]Unable to connect to data source

2: In odbcDriverConnect(paste0("DRIVER={SQL Server}; server=", server, : [RODBC] ERROR: state 01000, code 20002, message [unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed

3: In odbcDriverConnect(paste0("DRIVER={SQL Server}; server=", server, : [RODBC] ERROR: state 01000, code 20017, message [unixODBC][FreeTDS][SQL Server]Unexpected EOF from the server

4: In odbcDriverConnect(paste0("DRIVER={SQL Server}; server=", server, : ODBC connection failed Execution halted

時々、プログラムはエラーを起こすことなく完全に実行されます。ときには失敗することもあります。私は問題が何であるかを正確に把握することができません。

私はそれが動作していますかを確認するためにコードの一部をテストした:

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環境では直面しませんでした。

この場合、問題が何であるか正確に知りたいです。それは何かネットワーク、ドライバ、私の接続文字列またはデータベースに関連しています。

この問題の解決策は何でしょうか。

+0

これは役に立ちます:https://stackoverflow.com/questions/24493749/rodbc-ms-sql-access-from-ubuntu-using-freetds –

+0

@NeerajKumar、odbc.inst.iniのTDSバージョンを更新しました。しかし、それは役に立たなかった。 – suchait

+0

@NeerajKumar、odbc.iniとfreetds.confも更新されました。それでもエラーが出ます。 – suchait

答えて

0

私はと設定ファイルの接続文字列はだと思います。

おそらくネットワークの問題があり、開いているのはRODBCの接続です。

私は、このソリューションを試みた: - 私のdbhandleがクラス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 
      } 
     } 

を。

データベース接続が必要な場所であれば、私のプログラムにこのコードを組み込むことで、エラーメッセージを表示せずにプログラムを実行することができました。

関連する問題