RODBC не распознает мои настройки odbc
Я запускаю R 2.15.2 на сервере Red Hat Linux 6. Моя цель - подключиться к базе данных MS SQL Server на другой машине через RODBC. Я провел исследование и загрузил и установил версию Linux драйвера ODBC MS SQL из веб-сайта поддержки Microsoft. Я должен был создать версию unixODBC версии 2.3.0 из источника, потому что это требуется драйверу Windows и еще не находится в репозиториях RHL (версия репо 2.2.14).
Во всяком случае, после небольшой работы я наконец установил и правильно установил драйвер, и я могу успешно подключиться к базе данных SQL Server с помощью команды isql
:
$ isql -v test testuser testpass
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
поэтому я знаю, что мои файлы odbc.ini
и odbcinst.ini
правильно настроены.
Однако, когда я пытаюсь получить доступ к ODBC-соединению из R, произойдет следующее:
> 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
Здесь результат команды odbcDataSources
в R:
> odbcDataSources()
named character(0)
Я занимаюсь некоторыми исследованиями, и я думаю, что решение (хотя я и ошибаюсь) может иметь какое-то отношение к правильной настройке переменных среды ODBC, чтобы RODBC знал, куда идти, чтобы найти odbc.ini
. Основываясь на моих исследованиях, я нашел следующие переменные среды, которые могут быть релевантными: $ODBCINI, $ODBCSYSINI, $ODBC_ROOT $ODBC_INCLUDE, and $ODBC_LIBS.
У меня есть разумное представление о том, для чего они должны быть установлены, но я не уверен, как их устанавливать постоянно, и поэтому RODBC может распознать где найти соответствующие файлы.
Может ли кто-нибудь пролить свет на это для меня? Я не уверен, что правильно понимаю, как переменные среды работают в Linux, и особенно почему isql
не имеет проблем с подключением, но RODBC
не может даже найти драйвер/источник данных.
ПРИМЕЧАНИЕ. Когда у меня была установлена версия unixODBC для репо, RODBC установил просто отлично, используя команду install.packages('RODBC')
в R. Однако после того, как я установил unixODBC 2.3.0 из исходного кода, установка RODBC завершилась неудачно из-за зависимости и мне пришлось установить RODBC из источника, используя руководство, размещенное здесь. Возможно ли, что я не смог правильно настроить ODBC для начала и почему у меня сейчас проблемы?
Ответы
Ответ 1
Вау, я думал, что я единственный человек, работающий над такими вещами. Я должен был решить ту же проблему и нашел, что лучшим решением было использование rjdbc. Это намного проще настроить, поскольку ODBC на linux или osx был очень пятнистым. Производительность RJDBC велика, поскольку для выполнения запроса используется встроенный мс sql server jar. Вот пример из одного из наших сценариев. Вам просто нужно загрузить sqljdbc4.jar из microsoft, а затем 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]"));
Ответ 2
На сервере Ubuntu я установил такой
Тогда RODBC работает хорошо.
Ответ 3
Он не может найти драйвер, потому что вы его не указали! Я не понимаю, как должен работать материал DSN, но это работает для меня в аналогичной ситуации:
ch <- odbcDriverConnect('driver={SQL Server};server=servername;database=databasename;uid=username;pwd=password;')
sqlQuery(ch,'sql script',stringsAsFactors = FALSE)
Это должно быть точно, конечно. И замените {SQL Server} любым драйвером, который у вас есть. Это сложная часть. Имя сервера - это то же самое, что появляется в Management Studio в раскрывающемся списке, возможно, "тест" в вашем случае. isql должен автоматически использовать правильный драйвер.
то есть. для MySQL это может быть:
Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=myDataBase;User=myUsername;Password=myPassword;Option=3;
Я просто ищу "строку соединения mysql odbc", а не что-то конкретное R.