Подключение к Microsoft SQL Server через ODBC с использованием R в Ubuntu

Мне удалось заставить его полностью работать в Windows 7, но мне нужно перенести его на сервер Linux. Я запускаю 64-разрядную версию Ubuntu 16.04.1 LTS на виртуальной машине прямо сейчас для тестирования, прежде чем реплицировать процесс на сервере.

Я почти уверен, что проблема где-то в моих настройках FreeTDS или DSN.
Следует ли мне перестать тратить свое время и просто использовать Python? Или у меня будет такая же проблема с ODBC и unixODBC?

Полный сценарий R:

library(RODBC)

#saving from a .csv to dataframe df
df <- read.csv("./Documents/test.csv")

#creating connection to db
conn <- odbcDriverConnect('myDSN')

#writing
sqlSave(conn, df, tablename = 'dbo.test0', append = F, rownames = F, verbose = TRUE, safer = true, fast = F)

R Console

> conn <- odbcDriverConnect('myDSN')

Возвращает сообщение об ошибке:

Warning messages:
1: In odbcDriverConnect("myDSN") :
  [RODBC] ERROR: state IM002, code 0, message [unixODBC][Driver Manager]Data source name not found, and no default driver specified
2: In odbcDriverConnect("myDSN") : ODBC connection failed

Вот моя конфигурация ODBC и FreeTDS:

/etc/odbc.ini

[myDSN]
APP = unixodbc
Description     = master on DBNAME
Driver          = TDSdriver
Server          = SERVNAME
Database        = DBNAME
Port            = 1433
Username = UNAME
Password = PW
#Trace           = No
#TraceFile       = /var/log/freetds/freetds--odbc.log

/etc/odbcinst.ini

[FreeTDS]
Description = v0.91 with protocol v7.2
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so


[myDSN0]
APP = unixodbc
Description     = user on DBNAME
Driver          = TDSdriver
Server          = SERVNAME
Database        = DBNAME
Port            = 1433
Username = UNAME
Password = PW
#Trace           = No
#TraceFile       = /var/log/freetds/freetds--odbc.log

/freetds/freetds.conf

[global]
        # TDS protocol version
;   tds version = 4.2

    # Whether to write a TDSDUMP file for diagnostic purposes
    # (setting this to /tmp is insecure on a multi-user system)
;   dump file = /tmp/freetds.log
;   debug flags = 0xffff

    # Command and connection timeouts
;   timeout = 10
;   connect timeout = 10

        # If you get out-of-memory errors, it may mean that your client
        # is trying to allocate a huge buffer for a TEXT field.  
        # Try setting 'text size' to a more reasonable limit 
        text size = 64512

[DSN0]
        host = IPADDRESS 
        port = 1433
        tds version = 7.2
        client charset = UTF-8

person user2990276    schedule 29.12.2016    source источник
comment
Я не думаю, что это специфично для R. Прошло некоторое время с тех пор, как я подключился к SQL Server из Linux, но не забывайте, что с Python тоже приходилось нелегко.   -  person duffn    schedule 30.12.2016
comment
Почему бы вам не использовать Microsoft ODBC Linux драйвер для SQL Server? Также обратите внимание, что ваши ini-файлы используют много разных имен - myDSN, myDSN0 и DSN0   -  person Panagiotis Kanavos    schedule 30.12.2016


Ответы (1)


У меня есть RODBC -> FreeTDS -> SQL Server, работающий на linux Mint. Прошло много времени с тех пор, как я его настраивал, но вот несколько (непроверенных) предложений:

Есть несколько полезных замечаний по установке: http://www.saltycrane.com/blog/2011/09/notes-sqlalchemy-w-pyodbc-freetds-ubuntu/

и, конечно же, RTFM: http://www.freetds.org/userguide/

Можете ли вы сузить проблему, используя isql mydsn или tsql -S mydsn из командной строки? Совершенно уверен, что это скажет вам, что ваша проблема в настройке FreeTDS.

Похоже, ваш odbcinst.ini имеет несколько отличий от моего:

[TDSDriver]
Description = TDS driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so

Мой freetds.conf такой же, за исключением tds version = 8.0, и имя моей записи на сервере такое же, как и запись в odbc.ini.

Мы надеемся, что это и другие документы помогут вам в этом.

person blongworth    schedule 30.12.2016
comment
Вам не нужно проходить FreeTDS, если Предоставляемый поставщиком драйвер ODBC доступен. - person Panagiotis Kanavos; 30.12.2016
comment
Кто-нибудь тестировал FreeTDS на MS ODBC для Linux? Мне было бы интересно посмотреть, что быстрее. - person blongworth; 30.12.2016