Windows Azure

image

Windows Azure ASP.NET MVC 3 Web Role で使っているプロバイダ « ブチザッキで、

どうもこのASP.NET MVC 3 Webロールテンプレートで使っているセッションやメンバシッププロバイダ等各種プロバイダはEntityFrameworkベースのSystem.Web.Providersだそうです。

なんて紹介されています。
System.Web.Providersって、何やつ?どー使ってあげれば良いの?
ってことで、答えを「Deploying the Windows Azure ASP.NET MVC 3 Web Role」から拝借してきました。

MVC 3テンプレートでは、ASP.NET Universal Providerを使用しています。
セッションステートの格納先が初期設定では、SQL Expressを使用するようにしているASP.NET Universal Providerをテンプレートでは、使用しています。

<sessionState mode="Custom" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider"
         type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
         connectionStringName="DefaultConnection"
         applicationName="/" />
  </providers>
</sessionState>

さて、ベストな対応はなんでしょうか?

SQL Azureにシンプルなデータベース「UniversalProviders」を作成します。

image

接続文字列をコピーし、所りゅーしょんのApplicationServiesDefaultConnection接続文字列をSQL Azureの接続文字列に変更します。

接続文字列では、MultipleActiveResultSets=True と設定する必要があります。

<connectionStrings>
  <add name="ApplicationServices"
       connectionString="Server=tcp:YOURDB.database.windows.net,1433;Database=UniversalProviders;User ID=YOURLOGIN@YOURDB;Password=YOURPWD;Trusted_Connection=False;Encrypt=True;MultipleActiveResultSets=True;"
       providerName="System.Data.SqlClient" />
  <add name="DefaultConnection"
       connectionString="Server=tcp:YOURDB.database.windows.net,1433;Database=UniversalProviders;User ID=YOURLOGIN@YOURDB;Password=YOURPWD;Trusted_Connection=False;Encrypt=True;MultipleActiveResultSets=True;"
       providerName="System.Data.SqlClient" />
</connectionStrings>

後は、Windows Azureにデプロイすれば動作します。

動作させた後、データベースを確認すると「dbo.Sessions」テーブルが作成されています。

ログオンし、ユーザのセットアップをすると、Windows Azureで動作するMVCアプリケーション内のメンバーシップとロールがすべてSQL Azureに格納されます。

Picture

SQL Azure

Handling Error 40552 IN SQL Azureをざっくりと日本語訳した投稿です。

エラー40552が発生する理由

SQL Azureは、サーバを複数ユーザで共有するクラウドデータベースサービスです。
全ユーザが等しくSQL Azureを快適に使えるように、一部のユーザがリソースを占有しないように幾つかのセーフ機能を持っています。

セーフ機能の1つに、トランザクションで大量にアクティブトランザクションログを生成していないか監視しています。
大量のトランザクションログ容量を使用するトランザクションを実行しているアプリケーションは、SQL Azureから次のエラーを受け取ることになります。

Msg 40552, Level 20, State 1, Line 1
The session has been terminated because of excessive transaction log space usage. Try modifying fewer rows in a single transaction.

インデックスの作成、再構築、削除をする際に40552を回避する方法

インデックスの削除、再構築、作成は、大量のトランザクションログレコードを生成するので、大きなテーブル上でこのエラーメッセージを受け取る可能性があります。

この問題を回避する為に、新しいテーブルを作成しインデックスのレイアウトを完成され、その新しいテーブルに小さな粒度でデータを移行します。
しかし、たいていの場合、ONLINEオプションを使用してインデックス操作をするほうが、必要なトランザクションログスペースを少なくすることができます。
ONLINE=ONを指定して、CREATEやALTER、DROP INDEX操作をすると、実行方法が変わります。
一つの大きなトランザクションに変わって、長時間広いロックを取得することなく、裏側で複数の小さなトランザクションを実行する操作になります。

どちらの方法でも、操作に必要なトランザクションログ容量を減らすことができ、操作を実行している間でも、対象テーブルの使用を継続できます。

SQL Azure

Tech Ed North America 2011で、次期サービスアップデート時にリリースすると予告されていたSQL Azure のCo-Admin機能が使用できるようになっています。

Windows Azure管理ポータルにログインし、左側メニューから「Database」をクリックします。

image

データベースセクションに移動したら、上部メニューの「User Management」をクリックします。

image

ユーザ管理画面では、利用可能なすべてのサブスクリプションのサービス管理者とCo-Adminを確認することができます。

image

「Add New Co-Admin」をクリックし、Co-Adminユーザを追加します。

image

Co-Adminに追加したいユーザのWindows Live IDを入力し、管理を委任するサブスクリプションを選択し、「OK」ボタンをクリックします。

image

追加すると、Co-AdminのWindows Live IDが表示され、管理することができるサブスクリプションが表示されます。

image

Co-Adminに指定したWindows Live IDで、Windows Azure管理ポータルにログインし、ユーザ管理画面を参照します。次のように、Co-Administratorと表示され管理できるサブスクリプションとして表示されていることを確認できます。

image

SQL Azure

バージョン番号の変更

SQL Azureのバージョン番号が今月のアップデートで変更されます。

SQL Azureのデータベースエンジンのバージョンは「10.25.9644」ですが、今月のアップデートで「11.XX.XXXX」に更新されます。

SQL Azureのデータベースエンジンが、現状の2008 R2からDenali相当へ更新されることに伴った処置です。

影響

SQL Server Management StudioでSQL Azureに接続したときにエラーが発生するようになります。

解決方法

接続問題に遭遇した場合、SQL ServerとSQL Azureを管理するためのSQL Server Management Studioの最新アップデートをダウンロードし適用する必要があります。

SQL Server 2008 R2 SP1は最新バージョンの更新ファイルは、

から、ダウンロードすることができます。

SMOを利用するアプリケーションは、SQL Server 2008 R2の累積更新パッケージ7を適用する必要があります。

確認方法

SQL Server Management Studioで、SQL Azureの接続問題に今後数週間以内に遭遇した場合、最新バージョンに更新したかを確認してください。

SQL Server Management Studioのメニューバーの「ヘルプ」→「バージョン情報」を選択してください。

image

SQL Server Management Studioのバージョン番号が10.50.1777.0以降になっているかを確認してください。

情報源

Windows Azure Team Blogに投稿された「Announcing: SQL Azure July 2011 Service Release」を参照してください

SQL Azure

Enzo Backup for SQL Azureの紹介については、「蒼の王座 » [ツール紹介]Enzo Backup for SQL Azure」を参照してください。

アプリケーションを起動するとWindows Azure Storageアカウント設定情報の入力を求められます。

image

Connection→Register Database Server…を選択して、バックアップしたいデータベースに接続します。

image

SQL AzureとSQL Serverの両方をバックアップ・リストア対象にすることができます。ここでは、SQL Azureの接続情報を入力します。

image

SQL Azureへ接続できると左側ツリーにSQL Azureのデータベース一覧が表示されます。ツリーを展開し、データベース名を選択すると、右側ペインにスキーマ一覧が表示されます。

image

スキーマ上で右クリックするか、メニューバーのOperations→Backupを選択すると、TO FileとTo Azure Blobの選択肢が表示されます。
Enzo Backup for SQL Azureでは、ローカルファイルへのバックアップと、Blobへのバックアップを選択することができます。ここでは、Azure Blobを選択します。

image

image

バックアップウィザード画面が表示されます。一つ目のタブは、バックアップ対象のデータベースサーバ情報を入力します。データベースサーバをすでに登録している場合は、初期表示されます。
Backup Nameはバックアップファイル名を指定します。

image

二つ目のタブは、拡張オプションです。特定スキーマーのみをバックアップしたいときは、Schema to Backupに対象のスキーマー名を入力します。Data Syncサービスが使用しているオブジェクトをバックアップ対象に含めるかどうかを選択することができます。トランザクション整合性の考慮、Worker Roleで実行するかどうかを選択することができます。

image

シノニムが空だと、エラーが出るバグがあるようなので、フィードバックを実施。