unixODBC + FreeTDS + perlで、MS SQL Serverに接続する |
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/