SQL Azure Team Blog

The Fast Way to Move from MySQL to SQL Azure – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

SQL Server Migration Assistant(SSMA for MySQL v1.0)はアップデートされて、MySQLからSQL Azureへのマイグレーションをサポートするようになりました。今回のリリースでは、ローカルのMySQLからSQL Azureへ直接簡単にデータ移行が行えるようになりました。SQL Azureに移行することで、高いスケーラビリティと、データの集中管理や分散配置されたデータの統合管理を行えるようになります。
SQL Server Migration Assistantツールキットは、データベースのマイグレーションを行うときに、複雑な変更条件についてはマニュアルで取り組むよう設計されています。SQL Server Migration Assistantを使用することで、顧客とパートナーは結果的に時間とコストとリスクがあるマニュアル作業を減らすことができます。

SQL Azure Team Blog

A Server Is Not a Machine – SQL Azure Team Blogを簡単に翻訳したエントリーです。

サーバーはマシンではありません。
SQL Azureポータルで次の画像のように、SQL Azureにはサーバーの概念があります。

しかし、サーバーはオンプレミス環境でインストールされたSQL Serverでのサーバーとは同じではありません。オンプレミスのSQL Serverをインストールしたサーバーは、リソース、ストレージなどとセットになったマシンとほぼ同義です。その為、サーバーに追加できるデータベース数にも制限があります。

SQL AzureでのサーバーはTDSエンドポイントのことです。それぞれのデータベースは、データセンター内の複数のマシンにまたがって構成されるサーバー配下に作成されます。SQL Azureでのサーバーは、データベースの追加に制限が無く、データセンターのリソースをすべて利用することができます。つまり、あなたのSQL Azureサーバーがリソースオーバーすることはありません。

別の観点から考えると、別のデータベースを作成するとにデータセンター内に新しいサーバーを作成する必要がありません。SQL Azureは、自動的にサーバー作成を行います。オンプレミスでのSQL Serverインストールは、ロードバランスや要求の分散などを行うためにサーバー数を考慮しなければなりません。SQL Azureでは、データセンター内で必要に応じてロードバランスや要求の分散を提供します。

 

SQL Azreフロントエンド

 

SQL Azureフロントエンドサーバーは、ポート1433でTDSプロトコルを開けたインターネットに接続されているマシーンです。サービスゲートウェイの役割に加え、アカウントプロビジョニング、課金、モニタリングなどを行います。もっと重要なことは、適切なバックエンドサーバーへのルーティングを行うことです。SQL Azureに接続すると、フロントエンドサーバーは直接、あなたのサーバーを見て、リクエストをフォワードします。

 

無制限のデータベース

 

SQL Azureサーバー配下で使用できるデータベース数には制限がありません。しかし、規定では、SQL Azureアカウントには150データベース(masteデータベースもカウントに含む)に制限されています。制限数の拡大は提供していますので、必要な場合は、Microsoft Online Services Customer Portalから問い合わせしてください。

SQL Azure Team Blog

How to Tell If You Are Out of Room – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

SQL Azureデータベースはサイズ上限があります。サイズ上限がある理由の一つは、予想を超えてデータ量が拡大し、驚くべき使用料を請求するような事態を望んでいないからです。50GBを上限に、いつでもデータベースの上限を増やしたり減らしたりすることができます。しかし、これは自動ではありません。このエントリーでは、SQL Azureデータベースのサイズをハンドリングし、拡大したり、現在の上限を取得したり、現在の容量を取得したり、サイズエラーを検知したりするTipsを紹介します。

話を始める前に一つ注意しないといけないのは、データベース上限を基に課金されるのでは無く、実際に使用しているデータ量が属する、データベースのエディションの範囲に応じて課金されます。Webエディションでは、0~1GBと1~5GBの範囲でそれぞれ課金されます。ビジネスエディションでは、0~10GB、10~20GB、20~30GB、30~40GB、40~50GBの範囲でそれぞれ課金されます。

 

現在の上限

 

次のクエリを使用することで、SQL Azureデータベースの現在の上限を取得することができます。

SELECT DATABASEPROPERTYEX ('AdventureWorksLTAZ2008R2' , 'MaxSizeInBytes' )

MaxSizuInBytesプロパティの結果は、バイト数です。1GBは、1,000,000,000バイトでは無く、1,073,741,824バイトです。

 

現在のサイズ

 

次のクエリを使用することで、データベースの現在のサイズを取得することができます。

SELECT SUM(reserved_page_count) * 8192
FROM    sys.dm_db_partition_stats

このクエリの結果も、バイト数で返します。上限のサイズを取得するクエリの結果とそのまま比較することができます。

ここで簡単なクイズ。

現在のサイズが上限サイズよりも大きくなるのはいつでしょうか?

答えは、あり得ないです。もし、上限を超えるデータを追加したり更新使用とすると、SQLがエラーを返します。

 

エラーを検知する

 

SQL Azureで40544エラーを取得したら、エラーメッセージは「The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions.」となります。

SQL Managementでは次のように表示されます。

Msg 40544, Level 20, State 5, Line 1

The database has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions. Code: 524289

もしC#で、このエラーをハンドリングしたい場合は、次のようなコードになります。

try
{
    // ...
}
catch (SqlException sqlException)
{
    switch (sqlException.Number)
    {
        // The database has reached its size quota. Partition or delete data,
        // drop indexes, or consult the documentation for possible resolutions. 
        case 40544:
            break;
    }
}

 

自動的にデータベース上限を増やす

 

データベース量が増え、現在の上限を超えたとき、上限が増えたらすばらしいと思いませんか?SQL Azureは、上限ではなく使用量に応じて課金されます。例えば、0.8GBのデータ量を使用していたら、5GB上限の内、0~1GBの範囲の課金が行われます。データベースが1GBより大きくなった時、エラーは発生せず、1~5GBの範囲の課金が行われます。上限サイズの自動拡張を許可しても、課金は使用している量に応じて課金されます。もし、現在の範囲を超えても、エラー無く自動的に次の範囲の課金が行われます。

データ上限のの自動拡張は、今のところWEBエディションとビジネスエディソンの間は超えません。データベースの上限は、1、5、10、20、30、40、50GBがあります。Webエディションを使用していて、5GBに到達し、データベース上限を拡大させたいときは、ビジネスエディソンに変更する必要があります。こえは、データベースを自動拡張させていくにはエディションを変更するTransact-SQLを使用する必要があると言うことです。

 

エディションを変更するコード

 

SQL Serverエラーコード40544をキャッチしたら、エディションを変更したり、上限を自動的に増やすC#コードを書くつもりでした。Windows Azure webロールにコードを追加し、データベースサイズが自動的に増やせるようにします。

しかし、このコンセプトには問題があります。webサイトに1秒間に1000回の接続があり、ちょうどデータベースがいっぱいになり、3、4スレッドスレッドがWindows Azureサーバで40544エラーを受け取るかもしません。それらのスレッドは、データベースサイズを自動拡張させようとしますが、3回も4回も拡張が行われ必要なサイズよりもデータベースサイズが大きくなる可能性があります。解決策は、トランザクション管理をし、データベースの拡大は同時に1つしか実行できないようにすることです。しかし、SQL azure上のALTER DATABASE文は、トランザクション制御されません。

40544エラーをハンドリングし、自動的にデータベースサイズ、エディションを変更させsるソリューションの実現方法を考え続けます。これについて、何か良いアイディアをお持ちでしたら、コメントでアドバイスをください。

 

データベースサイズの変更

 

自動的にデータベースサイズを変更できない間、自分で上限を変更するTransact-SQLを流すことになります。エディションを変更する場合は、次のようなALTER DATABASE句を使用できます。

ALTER DATABASE AdventureWorksLTAZ2008R2 MODIFY (EDITION='BUSINESS', MAXSIZE=10GB)

データベースの上限はサイズを大きくしたり、減らしたりできます。もしサイズを減らそうとした時に、減らそうとしているサイズよりも現在のサイズのほうが大きい場合、次のようなエラーが出ます。

Msg 60003, Level 16, State 1, Line 1

Operation failed because the resulting cumulative database size would exceed your database sku limit

SQL Azure Team Blog

Article: Tips for Migrating Your Applications to the Cloud – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

多くの企業顧客がWindows Azureへの興味を示しているので、ジョージ・ヒューイとウェーデ・ワグナーは、Microsoft Technology CentersにWindows Azure Migration Labsを常設することを決定しました。その意図は、顧客がラボにアプリケーションを持込み、実際にSQL Azureにマイグレーションさせることです。このプロセスを通して、顧客毎にWebアプリケーションとSQLデータベースをWindows Azure Platformにマイグレーションすることに成功させることができます。その際、SQL azure Migration Wizardを使用します。

ジョージとウェーデはMSDNマガジンの記事で、マイグレーションに関する記事を掲載しています。

MSDNマガジン8月号:Windows Azure – Tips for Migrating Your Applications to the Cloud
日本語版は、まだ公開されていないので気長に待ちましょう。。。

SQL Azure Team Blog

Download: Sync Framework for SQL Azure – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳し、多少内容を追記しています。

 

Download details: Sync Framework for SQL Azure

SQL AzureとSQL Serverの同期を取るためのベストプラクティスを提供します。ホワイトペーパは、オンプレミスのSQL ServerとSQL Azure間の同期を取る為のMicrosoft Sync Framework Power Packの使用にフォーカスを当てています。

 

概要

Microsoft Sync teamはSQL Azureをサポートする為に、SQL AzureプロバイダーとData Sync tool for SQL Azureを含むMicrosoft Sync Framework Power Pack for SQL Azureをリリースしました。SqlAzureSyncProviderは、SQL Azureプロバイダーに最適化されています。

Download details: Sync Framework Power Pack for SQL Azure

Walkthrough Microsoft Sync Framework Power Pack for SQL Azure November CTP.docでは、オンプレミスのSQL ServerとSQL azureの同期設定についてステップバイステップで紹介しています。

大きなデータベースの同期を取る場合には、複数スコープを利用することを検討します。

 

参考リンク