unixODBC + FreeTDS + perlで、MS SQL Serverに接続する



本当はやりたくないのですが・・・Debianのサーバーから
SQL Server 2005に接続する必要が出てきました。

最終目標はPythonかphpからのアクセスですが、まずはperlからの
接続を調査してみます。

今回採用した方式は、

unixODBC - FreeTDS - SQL Server
という接続方法です。

まずはモジュールの取得


cd /usr/local/src
wget http://www.unixodbc.org/unixODBC-2.2.14.tar.gz
wget http://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz



unixODBCのインストール
--disable-gui をつけて、インストール画面を表示しないようにしています。


tar zxvf unixODBC-2.2.14.tar.gz
cd unixODBC-2.2.14
./configure --disable-gui
make
make install



次にMS SQL ServerのODBCドライバFreeTDSをインストール


tar zxvf freetds-stable.tgz

#この操作は不要かも
export LD_LIBRARY_PATH=/usr/local/lib
export LD_RUN_PATH=/usr/local/lib

./configure --with-unixodbc=/usr/local/src/unixODBC-2.2.14 --with-msdblib --with-libiconv-prefix=/usr/local/lib
make
make install


--with-unixodbcでunixODBCを解凍したフォルダを指定していないと


configure: error: sql.h not found

というエラーと共にconfigureが失敗します。


これでインストールは完了です。
odbc接続の設定を行います。


vi /usr/local/etc/odbc.ini

[ODBC Data Sources]
freetds = FreeTDS ODBC Driver

[freetds]
Driver = /usr/local/lib/libtdsodbc.so
Description = Microsoft SQL Server
Servername = sqlserver
Database = test_database
Port = 1433


[freetds]、Servernameは好きな名前を設定します。
Databaseは、実際に接続するDatabaseの名前を設定します。

次にFreeTDSの設定を行います。


vi /usr/local/etc/freetds.conf

[sqlserver]
host = 192.168.1.1
instance = instance_name
port = 1433
tds version = 8.0
charset = utf8
client charset = utf8



[sqlserver]は、/usr/local/etc/odbc.iniに書いたServernameと
一致させます。
instanceは、SQL Serverのインスタンスを指定します。
既定のインスタンスでインストールされていれば指定する必要はありません。


早速テストして見ます。


# isql -v freetds username password
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>


isql -v freetds username password
freetds:/usr/local/etc/odbc.iniに書いたセクション名
username:SQL ServerへのログインID
password:SQL Serverへのログインパスワード

SQL文を書いて実行すると、ちゃんと結果が表示されます。



perlから触ってみます。

参考にさせていただいたサイトはこちら。
http://rebecca.ac/milano/mt/archives/001412.html


unixODBCを使用するため、CPANからモジュールのインストールを行います。

CPANを使ったことがなかったので、こちらを参考に初期設定を行いました。
http://bob777.net/2007/08/cpan.html
http://www.crimson-snow.net/tips/unix/cpan.html



export ODBCHOME=/usr/local
perl -MCPAN -e shell
cpan> install DBD::ODBC





# vi odbc.pl
--
#!/usr/bin/perl

use strict;
use DBI;
use Data::Dumper;

my $dbh = DBI->connect('dbi:ODBC:freetds', 'username', 'password') or die $!;
my $sth = $dbh->prepare("select id,name from TABLE_NAME") or die $dbh->errstr;
$sth->execute or die $dbh->errstr;
while (my $arrayref = $sth->fetchrow_arrayref) {
my($id, $name) = @$arrayref;
print "$id,$name\r\n";
}
$sth->finish;
$dbh->disconnect;



これでとりあえず接続が確認できました。
しかし、perlを書いたことがないので、perlを覚えるか、
PythonでunixODBCを使用する方法を探すか・・・迷いどころです。



【参考URL】
unixODBC+FreeTDS+DBD::ODBCでSQL Serverに接続する
http://rebecca.ac/milano/mt/archives/001412.html

【Linux】LinuxでSQL Serverにアクセスする
http://blog.livedoor.jp/akf0/archives/51618402.html

FreeTDSとunixODBCを使ったSQL Server 2000のデータベース操作
http://yokote.net/tech/linux/freetds/



もどる