17

Red Hat Linux 6 サーバーで R 2.15.2 を実行しています。私の目標は、RODBC を介して別のマシン上の MS SQL Server データベースに接続することです。私は調査を行い、Microsoft サポート Web サイトから Linux バージョンの MS SQL ODBC ドライバーをダウンロードしてインストールしました。ソースから unixODBC バージョン 2.3.0 をビルドする必要がありました。これは Windows ドライバーで必要であり、RHL リポジトリにはまだ含まれていないためです (リポジトリ バージョンは 2.2.14 です)。

isqlとにかく、少し作業した後、最終的にドライバーをインストールして適切に構成し、コマンドを介して SQL Server データベースに正常に接続できます。

$ isql -v test testuser testpass
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

odbc.iniodbcinst.iniファイルが適切に設定されていることがわかります。

ただし、R 内から ODBC 接続にアクセスしようとすると、次のようになります。

> test <- odbcDriverConnect('DSN=test;Database=RSQLTest01;Uid=testuser;Pwd=testpass')
Warning messages:
1: In odbcDriverConnect("DSN=test;Database=RSQLTest01;Uid=testuser;Pwd=testpass") :
   [RODBC] ERROR: state IM002, code 0, message [unixODBC][Driver Manager]Data 
   source name not found, and no default driver specified
2: In odbcDriverConnect("DSN=test;Database=RSQLTest01;Uid=testuser;Pwd=testpass") :
   ODBC connection failed

odbcDataSourcesRでのコマンドの結果は次のとおりです。

> odbcDataSources()
named character(0)

私はいくつかの調査を行ってきましたが、解決策 (間違っている可能性があります) は、ODBC 環境変数を適切に構成して、RODBC がodbc.ini. 私の調査に基づいて、関連する可能性のある次の環境変数を見つけました:$ODBCINI, $ODBCSYSINI, $ODBC_ROOT $ODBC_INCLUDE, and $ODBC_LIBS. これらを何に設定するかについて合理的な考えがありますが、それらを永続的に設定する方法がわかりません。適切なファイル。

誰かが私のためにこれに光を当てることができますか? isqlLinuxで環境変数がどのように機能するか、特に接続に問題RODBCがないのに、ドライバー/データソースさえ見つからない理由を正しく理解しているかどうかはわかりません。

注: unixODBC のリポジトリ バージョンをインストールした場合、RODBC はinstall.packages('RODBC')R のコマンドを使用して問題なくインストールされます。しかし、ソースから unixODBC 2.3.0 をインストールした後、RODBC のインストールは依存関係の問題のために失敗し、ここに掲載されているガイドを使用して、ソースから RODBC をインストールします。最初に ODBC を適切に構成できなかった可能性があります。それが原因で、現在問題が発生していますか?

4

4 に答える 4

6

うわー、私はこの種のものに取り組んでいる唯一の人だと思っていました。私は同じ問題を解決しなければなりませんでしたが、最良の解決策は rjdbc を使用することであることがわかりました。Linux または osx の ODBC は非常にむらがあったため、これは構成がはるかに簡単です。RJDBC のパフォーマンスは、ネイティブの ms sql サーバー jar を使用してクエリを実行するため、優れています。これは、私たちのスクリプトの 1 つからの例です。Microsoft から sqljdbc4.jar をダウンロードしてから、環境に install.package("RJDBC") をインストールするだけです。あなたが ODBC を動作させようとしていることに気付きました。私はそれを osx で動作させましたが、Linux の時間があったためあきらめました。

library(RJDBC);  

drv <- JDBC('com.microsoft.sqlserver.jdbc.SQLServerDriver', '/usr/local/project/dataproviders/jdbc/sqljdbc4.jar', identifier.quote="'"); 

ch <- dbConnect(drv, 'jdbc:sqlserver://the.server.address.net;databaseName=DataWarehouse', 'USERNAME', 'PASSWORD'); 

allsupp_allprod_allproc <- dbGetQuery(ch, paste("SELECT  [Date], Sum([Fail]) as Numerator, Sum([Pass] + [Fail]) as Denominator,'' as Annotation,'True'  as 'Use for CL' FROM [PSU_YieldData] Group by [Date] Order by [Date]")); 
于 2013-02-23T21:48:52.390 に答える
2

ドライバーが指定されていないため、ドライバーが見つかりません! DSN がどのように機能するのかはわかりませんが、これは同様の状況で機能します。

ch <- odbcDriverConnect('driver={SQL Server};server=servername;database=databasename;uid=username;pwd=password;')
sqlQuery(ch,'sql script',stringsAsFactors = FALSE)

もちろん正確である必要があります。{SQL Server} をお持ちのドライバーに置き換えます。それはトリッキーな部分です。サーバー名は、Management Studio のドロップダウンに表示されるものと同じで、おそらく「test」です。isql は、正しいドライバを自動的に使用する必要があります。

つまり、MySQL の場合は次のようになります。

Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=myDataBase;User=myUsername;Password=myPassword;Option=3;

R固有のものではなく、「mysql odbc接続文字列」を検索するだけです。

于 2015-02-20T01:07:27.370 に答える