none
Azure WEBシステム(PHP版)のSQL Azure接続障害について RRS feed

  • 質問

  • 次のような構成で、1年ほど前に構築したWEBシステムを運用しています。

     「Windows Azure 上に WEB Role(PHPで実装) を立ち上げ データは SQL Azure に接続して保管するWEBシステム」

    1年間順調に稼働していたのですが、2日前から突然動作しなくなりました。

    原因は、PHPからSQL Azureを接続する際に、「SQLSTATE=IM002」という接続エラーを起こすようになりました。

    Web Roleの環境を再構築しても、この現象は解消されませんでした。

    似たような現象に遭遇された方はいませんか。

    また、解決方法があるようでしたらご教授いただけませんでしょうか。

     

    2013年7月19日 10:14

回答

  • php_sqlsrv*.dllが必要とするSQL Server Native Clientのバージョンが最新のAzure OSで変更されたようです。

    以下のどちらかの方法で問題は解決できると思われます。

    (a) 利用するMicrosoft Drivers for PHP for SQL Serverのバージョンを3.0にする
    (b) Azureのオペレーティングシステムのバージョン(osVersion)を 3.3(201305-01)か2.15(201305-01)のどちらかに固定する

    とりあえずは(b)の方法で回避し、そのままはよろしくないので(a)にするべく検証していただくのがよろしいかと思います。

    • 回答としてマーク kojima145199 2013年7月20日 4:33
    2013年7月20日 3:02
  • もう一つ対策がありました。

    (c) SQL Server Native Clientを2008対応のものにする。
       参考) Windows Azure で、Web ロールで特定のバージョンの SQL Server Native Client を常に使えるようにする方法

    マイクロソフトの中の人に教えていただきました。

    個人的には、緊急では(b)にしつつ、(c)をすぐに準備して、最終的には(a)と(c)の組み合わせにできればベストかなと思います。

    • 回答としてマーク kojima145199 2013年7月20日 4:33
    2013年7月20日 4:17

すべての返信

  • こんにちは。

    WebRoleにインストールしているPHPおよびMicrosoft Drivers for PHP for SQL Serverのバージョンはいくつでしょうか?
    また、それらのインストールはどのような方法でやっているのでしょう?

    質問返しになってしまって恐縮ですが。

    2013年7月19日 11:04
  • 早速のご返信ありがとうございます。

    WebRoleにインストールしているのは以下の通りです。

      1) PHP 5.3.6 ---非スレッドセーフWin32/VC9版

      2) php_sqlsrv_53_nts_vc9.dll (PHP5.3/スレッドセーフ/VC++6用)

      3) その他のPHP拡張モジュール(mcrypt、カレンダ)

    ちなみにですが、SQL Azure接続をPDO接続方式に変更して試したろことろ、やはり接続

    できませんでした。

    もう一つ付け加えますと、Development Fabricという機能を使って、ローカルPC上から

    Azure WebRoleをシミュレートするとSQL Azureへは問題なく接続できています

    (SQLSRV接続/PDO接続どちらの方式もOK)。

    • 回答としてマーク kojima145199 2013年7月20日 4:33
    • 回答としてマークされていない kojima145199 2013年7月20日 4:33
    2013年7月20日 1:17
  • php_sqlsrv*.dllが必要とするSQL Server Native Clientのバージョンが最新のAzure OSで変更されたようです。

    以下のどちらかの方法で問題は解決できると思われます。

    (a) 利用するMicrosoft Drivers for PHP for SQL Serverのバージョンを3.0にする
    (b) Azureのオペレーティングシステムのバージョン(osVersion)を 3.3(201305-01)か2.15(201305-01)のどちらかに固定する

    とりあえずは(b)の方法で回避し、そのままはよろしくないので(a)にするべく検証していただくのがよろしいかと思います。

    • 回答としてマーク kojima145199 2013年7月20日 4:33
    2013年7月20日 3:02
  • もう一つ対策がありました。

    (c) SQL Server Native Clientを2008対応のものにする。
       参考) Windows Azure で、Web ロールで特定のバージョンの SQL Server Native Client を常に使えるようにする方法

    マイクロソフトの中の人に教えていただきました。

    個人的には、緊急では(b)にしつつ、(c)をすぐに準備して、最終的には(a)と(c)の組み合わせにできればベストかなと思います。

    • 回答としてマーク kojima145199 2013年7月20日 4:33
    2013年7月20日 4:17
  • 回答ありがとうございます。

    (b)のAzureOSバージョン固定化でひとまず正常動作できるようになりました。

    この後、(a) と (c) を組み合わせた対策に切り替えて運用できるようにしたいと思います。

    2013年7月20日 4:33