[SQL Azure] 接続系の問題に対処する編:アプリケーションのエラーハンドリングへの考慮事項


SQL Server を利用していた際には、アプリケーションからSQL Serverへの接続に関する問題に対し、トレースを仕掛けるなど、様々なトラブルシューティングの手法が用意されていました。SQL Azureでは、SQL Azureのサーバーはマイクロソフトのデータセンターに配置されており、現在個々サーバートレースを仕掛けて調査を行うことはできません。したがって従来のトラブルシューティングの手法とは違う考慮が必要になってきます。ここでは、Activity IDを取得することで、接続系のトラブルに備える方法を紹介します。

Activity IDとは

例えば、SQL Azureのサーバーを作成しようとしたときに、たまたま以下のようなエラーに遭遇して作成できなかったとします。

image

上記のエラーの詳細情報(赤字の情報)にある activity id ‘fF1b03f47-ddd0-40d8-c13-26b5cc6143f1’ が Activity IDと呼ばれるものになります。この Activity IDは、全てのSQL Azureの接続時に生成されるユニークな GUID で、セッション コンテキスト 情報、トレースID、またはセッショントレースIDとも呼ばれることがあります。マイクロソフトのSQL Azure Developerサポートは、このActivity IDを追跡して、エラーの発生した理由を探ることができる場合があります。その際には、以下の情報もわかる範囲でお知らせください。

  • Activity ID
  • エラーの発生時刻(上記の例ではUTC Timestampで表記されている時刻となります。)
  • 利用しているデータセンター名
  • SQL Azureのサーバー名(取得済みである場合)
  • SQL Azure に接続を実施したユーザー名
  • SQL Azure 上の接続先のデータベース名

Activity IDはSQL Server Management Studioでどうやってみることができる?

image

上記の図のように、CONTEXT_INFO()関数を使って、現在のセッションのActivity IDを確認することができます。Activity IDは、現在の接続に関するプロパティでは、Session Tracing ID(黄色でハイライトした部分)として表示されています。

アプリケーション内でActivity IDを取得する例

以下はコードサンプルになりますが、黄色でハイライトした部分を実行することにより、ログに記録することができます。アプリケーションを設計する際には、エラーハンドリングを考慮する必要がありますが、Activity IDの取得をアプリケーションの実行ログに記録するようにすることで、トラブルシューティングに備えることができます。

sessionId = null;
using (SqlConnection conn = new SqlConnection(…))
{
    // Grab sessionId from new connection
    using (SqlCommand cmd = conn.CreateCommand())
    {
        conn.Open();
        cmd.CommandText ="SELECT CONVERT(NVARCHAR(36), CONTEXT_INFO())";
        sessionId = new Guid(cmd.ExecuteScalar().ToString());
    }

    // continue processing
    ...
}

さらに詳しい情報は、以下のサイト(英語のサイトになります)をご覧ください。

また、Windows Azure / SQL Azure のサポートについては、以下を参照ください。

--
Kayoko Gray

Comments (0)

Skip to main content