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
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
Na předchozím obrázku vidíme, že je vše v pořádku. Pokračujeme tedy v instalaci.
sudo ./install.sh 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
Případně vyzkoušet připojení i ke druhé existující instanci SQL2008R2_1
sqlcmd -S 192.168.56.30,49165 -U test -W
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
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
Nainstalované soubory naleznete ve složce /opt/microsoft/msodbcsql
Konfigurační soubory se nalézají v /etc/odbc.ini a /etc/odbcinst.ini