MS ODBC Driver pro Linux

Na začátku letošního roku byly vydány ODBC ovladače ve verzi 13 (zatím jako Preview) pro tři linuxové distribuce. Jedná se o Red Hat Enterprise Linux 7, SUSE Linux Enterprise 12 a Ubuntu 15.04. Součástí balíčku jsou dva nástroje sqlcmd a bcp. Podle sdělení Microsoftu by ovladače měly být kompatibilní s verzemi SQL Server 2008 a vyšší. Neodolal jsem tedy a vyzkoušel jsem si instalaci na dvou serverech. Ke cti Microsoftu je nutné poznamenat, že jsem nenarazil na žádné potíže, které by mně znemožnily úspěšně dokončit instalaci. Testovací distribuce byly Ubuntu 16.04 Server a CentOS 7 Core. Tam kde se spuštěné příkazy liší podle distribuce, naleznete obě varianty.

Nejprve je nutné si na server stáhnout balíčky pro zvolenou distribuci (Ubuntu, CentOS). Dále budeme potřebovat nástroje pro kompilaci zdrojů a doplňkové knihovny. Instalaci provedeme následujícím příkazem

Ubuntu 16.04

sudo apt-get install build-essential libc6 libkrb5-3 libgss3 e2fsprogs openssl

CentOS 7

sudo yum install gcc gcc-c++ make glibc e2fsprogs krb5-libs openssl

Stáhnuté balíčky si rozbalíme

tar xvzf msodbcsql-13.0.0.0.tar.gz

Uvnitř rozbaleného balíčku je skript build_dm.sh, který má za úkol stáhnout unixODBC Driver Manager a nainstalovat jej do systému. Ve výchozím nastavení se balíček stahuje z FTP. Se stahováním jsem měl problémy, proto jsem jako alternativní cestu zvolil stažení přes HTTP. Skript jsem si otevřel v textovém editoru a změnil jsem obsah proměnné ve skriptu následujícím způsobem:

dm_url="http://www.unixodbc.com/$dm_package"

Dalším krokem je spustit skript a postupovat dle instrukcí, které vypisuje na obrazovku

sudo ./build_dm.sh

MSODBCSQL Build Script

Po úspěšném dokončení předchozího kroku skript vypíše další příkaz, který je třeba spustit a posunout se v instalaci dále.

sudo sh -c "cd /tmp/unixODBC.1911.5929.7774/unixODBC-2.3.1; make install"

Činnost skriptu se vypisuje na obrazovku. Po úspěšné instalaci unixODBC můžeme pokračovat dále. Provedeme ověření, zda opravdu máme nainstalovány všechny součásti, které vyžaduje vlastní MS ODBC Driver.

./install.sh verify

MSODBCSQL Verify

Na předchozím obrázku vidíme, že je vše v pořádku. Pokračujeme tedy v instalaci.

sudo ./install.sh install

MSODBCSQL Install

Po skončení skriptu si můžeme projít instalační log. MS ODBC Driver je tedy nainstalován.

Zkusíme-li spustit sqlcmd, může se zobrazit následující chyba informující nás o chybějící knihovně.

sqlcmd: error while loading shared libraries: libodbc.so.2: cannot open shared object file: No such file or directory

Knihovna se nachází v umístění /usr/lib64, pouze systém o ní nemá žádné informace. Registraci knihovny provedeme následovně:

Ubuntu 16.04

sudo sh -c "echo '/usr/lib64' > /etc/ld.so.conf.d/libodbc.conf"
sudo ldconfig

Alternativně např. pro testovací účely lze změnit systémovou proměnnou:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
export LD_LIBRARY_PATH

CentOS 7

sudo ldconfig

Nyní je již vše připraveno pro připojení se na SQL Server 2008R2 k defaultní instanci.

sqlcmd -S 192.168.56.30 -U test -W

MSODBCSQL Connection1

Případně vyzkoušet připojení i ke druhé existující instanci SQL2008R2_1

sqlcmd -S 192.168.56.30,49165 -U test -W

MSODBCSQL Connection 2

Na začátku jsem se zmínil i o bcp, kterým můžeme provádět exporty/importy z/do dané databáze.

bcp AdventureWorks2008.Person.Person out /home/tomas/Person.dat -c -S 192.168.56.30 -U test

MSODBCSQL BCP Error

Můžeme si povšimnout, že export dat neproběhl a místo toho se nám zobrazila chybová zpráva o chybějící uložené proceduře. ODBC Driver 13 příliš nespolupracuje se staršími DB. Proto se doporučuje nainstalovat ODBC Driver 11.

Pokusíme-li se však připojit na SQL Server 2012, export již proběhne bez potíží.

bcp AdventureWorks2012.Person.Person out /home/tomas/Person.dat -c -S 192.168.56.40 -U test

MSODBCSQL BCP Export

Nainstalované soubory naleznete ve složce /opt/microsoft/msodbcsql
Konfigurační soubory se nalézají v /etc/odbc.ini a /etc/odbcinst.ini