ma-100140 @ ウィキ unixODBC
※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

unixODBCの設定

DB2(UDB)

CentOS release 4.8 (Final)

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