ma-100140 @ ウィキ
unixODBC
最終更新:
ma-100140
unixODBCの設定
DB2(UDB)
SQL Server
以前からSQLServerをLinuxサーバーからアクセスしたいとは思っていましたが、なかなかうまくいかない。
まずはFreeTDSをインストール。インストールできたのだが、設定がうまくいかない。
>./tsql -S main -U uid
Password:
locale is "ja_JP.eucJP"
locale charset is "EUC-JP"
using default charset "UTF-8"
Error 20009 (severity 9):
Unable to connect: Adaptive Server is unavailable or does not exist
OS error 111, "接続を拒否されました"
There was a problem connecting to the server
http://www.freetds.org/userguide/confirminstall.htm
を見るとなにやら設定を確かめる方法が記載してある。さっそく確かめよう。
>./tsql -LH 192.168.2.51
ServerName myServerName
InstanceName SQLEXPRESS
IsClustered No
Version 10.50.4000.0
tcp 52225
おお。なんとポートが違う1433じゃない。では設定を変えよう。
なお、設定ファイルは以下のコマンドで確認できる。
>./tsql -C
Compile-time settings (established with the "configure" script)
Version: freetds v0.91.100
freetds.conf directory: /usr/local/freetdsetc
MS db-lib source compatibility: no
Sybase binary compatibility: no
Thread safety: yes
iconv library: yes
TDS version: 5.0
iODBC: no
unixodbc: yes
SSPI "trusted" logins: no
Kerberos: no
設定は以下
>cat freetds.conf
[main]
host = 192.168.2.51
instance = SQLEXPRESS
port = 52225
tds version = 7.3 ## ##SQL Server2005は7.2 2008は7.3 2012は7.4
client charset = UTF-8 ##Client(Linux)側の文字コードセット
では、もう一度実行してみる。
>/tsql -S main -U uid
Password:
locale is "ja_JP.eucJP"
locale charset is "EUC-JP"
using default charset "UTF-8"
Error 20017 (severity 9):
Unexpected EOF from the server
OS error 115, "現在処理中の操作です"
Error 20002 (severity 9):
Adaptive Server connection failed
There was a problem connecting to the server
まだ、エラーですねぇ。
そう言えば、SQL Serverは2008R2だったなぁ。2008は7.3で2012が7.4か、R2はどこだろう?
仕方がない、tds versionを小刻みに変えてみよう。まずは8.0
>./tsql -S main -U uid Password: locale is "ja_JP.eucJP" locale charset is "EUC-JP" using default charset "UTF-8" 1>
ビンゴ!! 8.0でOKです。
やっとつながった。
ではPHPから読んでみよう。
手動で確認するなら、tsqlで対話型でも悪くはない。しかし、シェスクリプトの中で使って
自動化したい。そうすると、コマンドライン版のPHPで行うのがいいでしょう。
PHPからFreeTDSにつなぐ。DB2でも使ったunixODBC経由がすでにあるDB2読み込み用PHPを使えるので便利だろう。
まずは、unixODBCに設定を追加しよう。
/usr/local/etc/odbcinst.iniにFreeTDSの設定を追加
[FreeTDS] Description = FreeTDS Driver Driver = /usr/local/freetds/lib/libtdsodbc.so Setup = /usr/local/freetds/lib/libtdsodbc.so FileUsage = 1 CPTimeout = 5 CPReuse = 5
/usr/local/etc/odbc.ini
[SQLServer] Driver = FreeTDS Protocol=TCPIP Servername = main Port = 52225 System = 192.168.2.51 UserID = uid Password = pass Database = mydb
>/usr/local/bin/isql -v SQLServer uid pass +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
やっとつながった。 次へ phpからFreeTDSにつなぐ