Inside SQL Azure – データベース

ユーザーごとに割り振られるSQL Azureサーバには、必ずmasterデータベースが含まれています。SQL Azureサーバーには、最大149個までデータベースを追加することができます。(ソフトウェア的な制御なので、マイクロソフトに連絡を取り、与信をクリアすれば制限を緩和することが可能)
データベースはSQL Azure Portalを使用して作成するか、Transact-SQL CREATE DATABASEコマンドで作成します。
SQL Server Management Studioでは、データベース作成をするためのGUIが提供されいません。 SQL Azureサーバーに接続して、クエリテンプレートを使用して、Transact-SQLを使用してデータベースを作成できます。SQL Server Management Studioでクエリテンプレートを開く為には、データベースを右クリックし、新しいデータベースをクリックします(図1)。

000003
図1:SQL Server Management Studioでの新規データベースの作成

 

SQL Azure Portalでデータベースを作成する場合は、図2のようになります。データベース名とエディション、データベースの最大サイズを指定します。

図2:WebエディションのSQL Azureデータベースの新規作成

SQL Azureデータベースには、WebとBusinessエディションの2つのエディションがあります。SQL Azure Portalを使用してデータベースを作成する際に、作成するデータベースのエディションと最大サイズを指定します。

Webエディションのデータベースは、最大サイズに1GBか5GBを選択できます。Businessエディションのデータベースは、最大サイズに10GB、20GB、30GB、40GB、50GBを選択できます。
もしデータ量が指定した最大サイズを越える処理をすると、40544エラーが返ってきます。このエラーが発生したときは、データの挿入、データの更新、新しいデータベースオブジェクトの作成はできません。しかし、データの参照や削除、テーブルのtruncate、テーブルやインデックスの削除、インデックスの再構築はできます。データを削除したり、オブジェクトを削除して、ストレージスペースを確保したら、15分程度で新しいデータを挿入したり、既存データの更新ができるようになります。

データベースを作成後に、データベース名やエディション、最大サイズを変更するには、ALTER DATABASE コマンドを使用します。SQL AzureのALTER DATABASEコマンドは、名前と最大サイズをエディションの3つのオプションのみ対応しています。

ALTER DATABASE database_name
{

MODIFY NAME = new_database_name
|MODIFY (MAXSIZE = {1 | 5 | 10 | 20 | 30 | 40 | 50} GB)
|MODIFY (EDITION = {‘web’ | ‘business’})
}

課金

SQL Azureサブスクリプションは、エディション別のデータベース毎に課金されます。データベースごとの課金は、日次で課金し、一か月分をまとめて清算します。ユーザーデータベースを使用した日数分支払います。masterデータベースは課金されません。注意が必要なのは、一日の間に、同じデータベース名のデータベースを削除し、再度作成した場合、新しいデータベースが作成したとしてカウントされます。(1/12にtestデータベースを作成し、削除。再度、作成すると、1/12はデータベースを2つ使用した(=2つ分の課金)ことになります。)

個々のデータベースの課金は、エディションと最大使用量で決定します。Webエディションのデータベースを使用していて、データ使用料が100MBの場合は、図3の一番上の課金料金となります。(お値段は変動するので、ブランクにしています。)
Bussinesエディションのデータベースを使用していて24GBのデータを使用している場合は、Bussinesエディションの上から3番目の20~30GBの課金となります。
ちなみに0~10GBの課金量を1とすると、10GB~20GBの課金量は2、20GB~30GBの課金量は3と使用量に応じて比例するようになっています。

 20110112053946
図3:データベースの課金体系

さらに、データ転送量に応じて課金されます。データ転送量は、データセンターから送信されたデータ量と、データセンターで受信したデータ量に課金されます。
アプリケーションをオンプレミス環境で動作させ、オンプレミスな環境からSQL Azureへ接続させるか、または、SQL Azureと同じデータセンターにあるWindows Azureでアプリケーションを動作させるかを考慮する必要があります。後者の場合は、SQL Azureデータ転送量の課金が発生しません。 前者の場合は、オンプレミス環境でのプログラミングですみます。

20110112052953 
図3:SQL Azureの課金体系の概念図

データアクセスモデル

現時点では、SQL Azureのデータアクセスモデルは、複数のデータベースにまたがるクエリに対応していません。また、USEコマンドにも対応していません。1つの接続では、1つのデータベースにしか接続できません。他のデータベースからデータを取得する場合は、新しい接続を開かなければなりません。SQL Server Management Studioでは、データベースに接続する際に、接続するデータベースを指定します。サーバーへの接続ダイアログオプションをクリックし設定します(図4)。

20110112050253_thumb[1]
図4: SQL Server Management Studioでの接続するデータベースの指定

プログラミングで接続するデータベースを指定する場合は、接続文字列で設定します。複数データベースのデータを結合したり、比較する場合は、データベースからそれぞれデータを取得した後、アプリケーション側で対応することになります。

masterデータベース

SQL Azureサーバを作成したとき、一番最初は、masterデータベースと呼ばれるデータベースが1つだけ提供されます。
SQL Azureのmasterデータベースは、SQL Serverのmasterデータベースと比較すると多少の違いがあります。SQL Serverのmasterデータベースのように、SQL Azureのmasterデータベースは、ログイン名を保存していますが、それは限られた類似点です。SQL Azureはサーバーレベルのロールに対応していません。しかし、SQL Azureには、masterデータベースのみに対応した2つの新しいデータベースロールが提供されています。dbmanagerloginmanagerです。

  • dbmanager – SQL Azureの dbmanager ロールは、オンプレミスのSQL Serverで提供されている dbcreator ロールに似ています。データベースを作成するのに必要なロールです。
  • loginmanager – オンプレミスのSQL Serverの securityadmin ロールに似ており、 loginmanager ロールは、SQL Azureでログインを作成するのに必要なロールです。

SQL Azureの master データベースには、オンプレミスのSQL Serverのmasterデータベースと異なる特徴がいくつかあります。

  • SQL Azureのmasterデータベースには、オンプレミスのSQL Serverでは提供されていないビューがいくつか含まれています。(sys.firewall_rulesとsys.bandwidth_usage、sys.database_usage)
  • SQL Azureにmasterデータベースにcreateをすることはできますが、masterデータベースのフル権限はありません。ユーザーは、masterデータベースの所有者ではありません。
  • masterデータベースへのゲストアクセスは無効化されています。(SQL Azure上のすべてのデータベースでもゲストアクセスは無効化されています。)

参考情報

TechNet WikiのTectNet Articlesで公開されているInside SQL Azureを元情報にした投稿です。

本投稿は、Inside SQL Azureを分割して、シリーズとして掲載していきます。また、単純に翻訳するだけだと、微妙なので適宜補足説明を追加しております。