クラウド上のSQL AzureデータベースにDatabaseSpyを接続する方法

ニューオーリンズで開催されたTech-Edカンファレンスで、6月には、MicrosoftのクラウドベースのSQL Azureデータベースを本番環境に導入する際のヒントとテクニックが主要なテーマとして取り上げられました。SQL Azureは、Microsoft SQL Serverの技術に基づいて構築されており、Microsoftがクラウド上で提供する、高可用性と拡張性に優れたデータベースサービスです。SQL Azureにデータベースを導入する開発者は、リレーショナルデータベースソフトウェアのインストール、設定、パッチ適用、管理といった作業を行う必要がなく、自身のデータベースの構造とデータのみを管理すれば済みます。自動的な冗長化と耐障害機能が組み込まれており、物理的な管理作業は不要です。

データベース開発および保守の一般的なタスクを実行するために、SQL Serverの構文とデータ型を使用して、DatabaseSpyその他のAltovaツールをSQL Azureデータベースに接続するための接続文字列を手動で設定できます。 このブログ記事では、DatabaseSpyからSQL Azureデータベースに接続する方法を解説し、既存のデータベースをクラウドへ移行する際に、よく行われる操作をいくつか紹介します。 これらの手順を自分で試すには、SQL Azureのアカウント、またはSQL Azureのアカウント所有者によって作成されたログイン情報とパスワードが必要です。 SQL Azureアカウントの設定方法の詳細については、Microsoftのウェブサイトをご覧ください SQL Azure のホームページ. また、SQL Server Native Client 10.0 (またはそれ以降のバージョン) をインストールする必要があります。 SQL Azureは、ローカルのSQL Serverデータベースとは完全に同じように動作しないため、Altova SQL Server接続ウィザードを使用することはできません。 代わりに、ODBC接続を使用します。

ここでは、新しい接続文字列を作成するプロセスの詳細をすべて説明することはいたしません。 上に表示されているダイアログに、既存の接続文字列を貼り付けてください。

SQL Azureに初めて接続すると、DatabaseSpyのプロジェクトファイルを使用することで、接続設定に加え、よく使用するSQLスクリプト、データベース設計ファイル、データベースの比較結果などをまとめて保存できます。後で簡単に再利用できるようになります。以下に示されたスクリーンショットは、MySQLのSakilaデータベースと、SQL Azure上のクラウド環境のSakilaデータベースの、両方を同時に接続した新しいDatabaseSpyプロジェクトの例です。

Microsoftは、既存のデータベースをSQL Azureプラットフォームへ移行する際に役立つ、様々な変換ツールを提供しています。弊社では、Microsoftの MySQLデータベースからSQL Serverへの移行アシスタント ローカルのMySQL Sakilaサンプルデータベースを、当社のSQL Azureアカウントに移行するために、DatabaseSpyを使用します。DatabaseSpyは、異なる種類のデータベースに対しても、同時に複数の接続を開くことができます。DatabaseSpyのデータベース比較機能は、Sakilaの移行結果を確認するのに最適なツールです。まず、データベーススキーマの比較を開き、MySQLデータベースからいくつかのテーブルを選択して、比較の左側に配置します。

SQL Azure版から適切なテーブルを選択すると、それらのテーブルがデータベーススキーマ比較ウィンドウで開きます。

ウィンドウの左上にある緑色の「比較」ボタンをクリックすると、DatabaseSpyはデータベースの構造を比較し、差異を強調表示し、メッセージウィンドウにその概要を表示します。

いくつかの違いは、データベース間で異なるデータ型定義によるものです。例えば、MySQLの「unsigned small int」型には、SQL Serverに完全に一致するものが存在しないため、変換ツールは「film_id」列を「int」型に変換しました。また、MySQLの「release_year」列に割り当てられているデータ型は、SQL Azureでは「smallint」型に変換されています。これにより、SQL Azure版のデータベースは、MySQLにおける「year」データ型の最大値である2155ではなく、32,767年までの映画に対応できるようになり、より将来的な互換性が高まる可能性があります。2つのデータベースに含まれるデータを比較するには、右クリックのコンテキストメニューから選択し、選択したテーブルを新しいデータ比較ウィンドウで開くことができます。

データ比較の結果、テーブルの内容が完全に一致していないことがわかります。

結果ウィンドウを開くと、説明欄が正常に移行されていないことがわかります。

データベーススキーマ比較ウィンドウを振り返ると、説明列の長さがゼロに設定されていることがわかります。これが、結果ウィンドウで、MySQLの「説明」列からSQL Azureの「説明」列へ向かう赤い矢印が表示される理由です。長さがゼロに設定された列には、テキストをコピーすることはできません。そこで、新しいデザインウィンドウで、SQL Azure版の「film」テーブルを開いてみましょう。

プロパティウィンドウの「説明」フィールドのサイズを大きくし、その変更を適用するスクリプトを実行することができます。

次に、データ比較を再度実行したところ、データは変換されているものの、以前に定義されていたフィールドの長さがゼロであったため、データが非表示になっていました。

遅延の問題 DatabaseSpyを使用することで、クラウドデータベースとローカルコピーの間での遅延の問題を調査できます。 上記のデータ比較から、2つのデータベースにあるテーブルには、1,000行の同一データが含まれていることがわかります。 SQL AzureとローカルのMySQLデータベースからデータを取得するためのSELECT文を繰り返し実行し、その結果の処理時間を計測することができます。 DatabaseSpyのSQLエディタのメッセージウィンドウには、実行時間が表示されます。

上記のSELECT文を、SQL Azure版のsakilaデータベースに対して5回連続して実行した結果、処理時間は60.632秒から63.851秒の範囲でした。同じ映画テーブルに対して、ローカルのMySQLデータベースでSELECT文を実行した結果は以下の通りです

ローカル環境でのテストを繰り返した結果、同様の結果が得られました。開発者にとって重要な点は、データベースを利用したアプリケーションの場合、クラウドへデータを移行する際に、遅延を考慮する必要があるということです。Altova DatabaseSpyの無料トライアルを利用して、SQL Azureへの接続を試してみてください。