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につなぐ