CentOS
sudo yum install freetds unixODBC unixODBC-devel wget http://pkgs.repoforge.org/perl-DBD-ODBC/perl-DBD-ODBC-1.23-1.el6.rf.x86_64.rpm sudo rpm -ivh perl-DBD-ODBC-1.23-1.el6.rf.x86_64.rpm
проверяем установлен ли модуль, если нет сообщения об ошибке - значит модуль установлен
perl -e 'use DBD::ODBC;'
проверяем версию модуля
perl -MDBD::ODBC -e 'print $DBD::ODBC::VERSION;'
драйвер к базе MSSQL FreeTDS
wget ftp://ftp.astron.com/pub/freetds/stable/freetds-0.91.103.tar.gz tar zxvf freetds-0.91.103.tar.gz cd freetds-0.91.103 ./configure --prefix=/usr/local/freetds --enable-msdblib make make install cp include/tds.h /usr/local/freetds/include cp src/tds/.libs/libtds.a /usr/local/freetds/lib echo "/usr/local/freetds/lib" >> /etc/ld.so.conf echo "export FREETDSCONF=/usr/local/freetds/etc/freetds.conf" >> /etc/profile ln -s /usr/local/freetds/lib /usr/local/freetds/lib64
поиск установленной библиотеки
sudo updatedb locate libtdso /usr/local/freetds/lib/libtdsodbc.so.0 /usr/local/freetds/lib/libtdsodbc.so.0.0.0
echo "[FreeTDS] > Description = FreeTDS > Driver = /usr/local/freetds/lib/libtdsodbc.so.0" >> tds.driver.template
подключение ODBC
sudo odbcinst -i -d -f tds.driver.template
при успешном подключении
odbcinst: Driver installed. Usage count increased to 1. Target directory is /etc
проверяем успешность подключения
odbcinst -q -d
вывод команды
[PostgreSQL] [MySQL] [FreeTDS]
настройка ODBC MS SQL
sudo su - echo "[MSSQL] Driver = FreeTDS Address = IPADDRESSOFMSSQL Port = 1433 TDS_Version = 8.0 Database = MYDATABASENAME" >> /etc/odbc.ini
Тестируем ODBCconnect к MSSQL базе
isql -v -s MSSQL SQLUSERNAME SQLUSERPASSWORD
вывод
+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
пример перл программы
#!/usr/bin/perl use DBI; use strict; use DBI; my @dsns = DBI->data_sources('ODBC'); foreach my $d (@dsns) { print "$d\n"; } my $dbh = DBI-> connect('dbi:ODBC:DSN=MSSQL;UID=SQLUSERNAME;PWD=SQLUSERPASSWORD') or die "CONNECT ERROR! :: $DBI::err $DBI::errstr $DBI::state $!\n"; if ($dbh) { print "There is a connection\n"; my $sql = q/SELECT * FROM dbo.users/; my $sth = $dbh->prepare($sql); $sth->execute(); my @row; while (@row = $sth->fetchrow_array) { # retrieve one row at a time print join(", ", @row), "\n"; } $dbh->disconnect; }