Linux
SQLServer
cenros

CentOSからSQL Server or Azure SQL Databaseに接続する

More than 1 year has passed since last update.

PHP+Mysqlばっかり使ってた人が
何故かAzure SQL Daatabase(Azure版SQL Server)を使わざるを得なくなって調べた産物
ODBCとか必要なのかと悩んでいましたが特に必要ないみたいです。

CentOS5をベースにしていますが、
これで絶対にLinuxから行けます!

freetdsのインストール

まずは「freetds」をいれます。

# yum install freetds freetds-devel

実はこれだけでSQL ServerやAzure SQL Databaseに繫げることが出来ます。
(tsqlというCLI用のmysqlコマンドみたいなやつでつなげます。)

# TDSVER=8.0 tsql -H 'データベースサーバIP' -p 1433 -U 'ユーザ名' -D 'データベース名'

Azure SQL Databaseの場合は[データベースサーバIP]を[hogehoge.database.windows.net]とします。
あと、Azure SQL Databaseにつなげる際は、Azure側で接続元IPを登録しないといけません。
Azure管理コンソールからSQL Database、データベースを選び、
ダッシュボードから使用できるipアドレスに
クライアントIPアドレスアドレスを登録しておきます

-Pを付けることでパスワード入力をスルーすることが出来ます

Azure SQL Databaseの場合は -Dを付けて接続時にデータベースを決めておかないといけません。
要するにSQL Serverのuseコマンドが使えないんです。
ってことは「[データベース名].[dbo].[テーブル名]」と記述する奴もAzure SQL Databaseでは使えません。。

実行例

Azure SQL Databaseにつないだ場合

# TDSVER=8.0 tsql -S 'hogehoge.database.windows.net' -p 1433 -U 'fugefuge' -P 'hagehage' -D 'bokeboke'
locale is "ja_JP.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Default database being set to bokeboke
1> select top 10 * from udauda;
2> go

設定ファイルについて

freetds.conf というファイルに設定を書いておくことも出来ます。
また、(後日書きますが)PHPからの接続の場合、
この設定ファイルが重要になったりします。

# vi /etc/freetds.conf
[dataserver]
host = データベースサーバIP
port = 1433
tds version = 8.0
charset = CP932
client charset = UTF-8
# TDSVER=8.0 tsql -S dataserver -U 'ユーザ名' -D 'データベース名'

もし、上手く行かなかった場合、
設定ファイルの場所がわかっていない可能性があるので

# export FREETDSCONF=/etc/freetds.conf

と事前に実行してあげてください。
(.bash_profileに入れとくといいですね)

以上です。

 読み込んだプラグイン:security
 インストール処理の設定をしています
 パッケージ freetds は利用できません。
 パッケージ freetds-devel は利用できません。
 エラー: 何もしません

で、入れれれへんって方はリポジトリを確認してください

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo rpm -ivh epel-release-6-8.noarch.rpm