SQL Azure Team Blog

SQL Azureのセキュリティガイドラインが、マイクロソフト ダウンロードセンターにて提供されています。このホワイトペーパーでは、SQL Azureにセキュアに接続する為に、サーバサードとクライアントサイドで必要な基本的な設定について説明されています。

管理者ログインとSQL Azureファイヤーウォールと内部ファイヤーウォールのベストプラクティスを学べます。

 

Download details: Security Guidelines for SQL Azure

SQL Azure Team Blog

SQL Azureの水平パーティショニングと垂直パーティショニングによるスケールアウトについて、Dinakar Nethiが執筆したホワイトペーパーです。
このホワイトペーパーでは、 スケールアウトの概要と、オンプレミスへのスケールアウトの試みと、SQL Azureでのスケールアウトの利点について学ぶことができます。

 

Download details: Scaling out with SQL Azure

SQL Azure Team Blog

Creating a SQL Azure Database with SQLCMD – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

一度、SQL Azure Portalでサーバを配置すれば、sqlcmd.exeを使用してデスクトップのコマンドラインからデータベースを作成したり、削除することができます。スクラッチでデータベースを作成し、スキーマをアップロードし、きれいな環境でテストしたり、それらを繰り返しテストするときに便利です。

注意すべき事は、データベースを作成したり削除したりするときはマスターデータベースに接続する必要があることです。また、 -Nパラメータを使用して接続を暗号かあすることも重要です。暗号化に関する詳細情報は、こちらを参照してください。

 

データベースの作成

 

最初に、データベースを作成するためのTransact-SQLコマンドを含む.sqlファイルを作成します。例えば、次のようなクエリになります。

CREATE DATABASE Test

これは、デフォルトサイズの1ギアバイトのデータベースが作成されます。コマンドをCreateDatabase.sqlというファイル名に保存したとします。コマンドラインからコマンド(ファイル)を実行するコマンドは次の用になります。

sqlcmd -SyourSeverdatabase.windows.net -UyouLogin@yourServer -PyourPassword -dmaster -i –N CreateDatabase.sql

ユーザ名は、「ログイン@サーバ名」の形式にする必要があります。ログインは、SQL Azureサーバ上の管理者ログインを使用し、マスターデータベースに対して発行します。

 

データベースを削除する

 

データベースの削除も同様の方法で行います。スクリプトは次の用になります。

DROP DATABASE Test

コマンドをDropDatabase.sqlというファイル名に保存したとします。コマンドラインからコマンド(ファイル)を実行するコマンドは次の用になります。

sqlcmd -SyourSeverdatabase.windows.net -UyouLogin@yourServer -PyourPassword -dmaster -i –N DropDatabase.sql

 

検証

 

SQL Azureの最小課金単位は、一日です。1ギガバイトのデータベースで一ヶ月に$9.99(日本の場合は、979円ぐらい。詳細は、ここで。) 一日あたり33セント(日本の場合は、33円ぐらい)です。データベースを作成し、すぐに削除すれば33セントかかります。詳細は、Windows Azure Pricing | Windows Azure Services | Windows Azure Platformで確認できます。

SQL Azure Team Blog

Finding Your Clustered Indexes – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

SQL Server から SQL Azureにマイグレーションする前に全てのテーブルにクラスターインデックスを作成する必要があります。その理由については、このエントリーを参照してください。このエントリーでは、クラスターインデックスが無いテーブルを見つける方法を紹介します。

SQL Serverデータベースから更新しマイグレーションするテクニックの一つは、スクリプ生成ウィザードを使用して、SQL Azureに同じスキーマを転送することです。それに関しては、このエントリーで書きました。このテクニックを使用する場合は、SQL Serverで次のスクリプトを実行して、クラスターインデックスのないテーブルを探します。

SELECT DISTINCT [TABLE] = OBJECT_NAME(OBJECT_ID)
FROM SYS.INDEXES
WHERE INDEX_ID = 0 AND OBJECTPROPERTY(OBJECT_ID,'IsUserTable') = 1
ORDER BY [TABLE]

クラスターインデックスの無いテーブルリストを取得できます。クラスターインデックスを簡単に作成する方法は、非クラスタインデックスをクラスタインデックスに変更することです。SQL Server Management Studioで実行することができます。

1.オブジェクトエクスプローラーで、テーブルのツリーを開き、テーブルのインデックスを拡げます。

2. クラスターインデックスに変更したい、非クラスタインデックスを選択します。

3. 右クリックをし、「インデックスをスクリプト化」の「Drop toおよびCreate To」を選択します。

vs07

4. SQL Serverはインデックスを削除し、再作成するTransact-SQLを生成します。

5. CREATE INDEX文からNONCLUSTEREDを探し、CLUSTERDに変更します。

6. スクリプトを実行します。

 

次のクエリは、SQL Server Management Studioによって生成されたスクリプト例です。

/****** Object:  Index [PK_GroupFeature]  
  Script Date: 06/01/2010 17:00:47 ******/
IF  EXISTS (SELECT * FROM sys.indexes 
    WHERE object_id = OBJECT_ID(N'[dbo].[GroupFeature]') 
    AND name = N'PK_GroupFeature')
ALTER TABLE [dbo].[GroupFeature]
 DROP CONSTRAINT [PK_GroupFeature]
GO

USE [Kulshan]
GO

/****** Object:  Index [PK_GroupFeature] 
   Script Date: 06/01/2010 17:00:48 ******/
ALTER TABLE [dbo].[GroupFeature] ADD
  CONSTRAINT [PK_GroupFeature] 
  PRIMARY KEY CLUSTERED 
(
    [GroupFeature_Id] ASC
)WITH (PAD_INDEX  = OFF, 
    STATISTICS_NORECOMPUTE  = OFF,
    SORT_IN_TEMPDB = OFF,
    IGNORE_DUP_KEY = OFF, ONLINE = OFF, 
    ALLOW_ROW_LOCKS  = ON,
    ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO

SQL Server から SQL Azureにマイグレーションしたいテーブル全てにクラスタインデックスを作成してしまえば、SQL Azureでの開発に一歩近づきます。

SQL Azure Team Blog

SQL Azure and Session Tracing ID – SQL Azure Team Blog – Site Home – MSDN Blogsを簡単に翻訳したエントリーです。

もし注意を払っていたら、SQL Azureに接続しているとSQL Server Management Studio 2008 R2に新しいプロパティ(セッショントレースID)が追加されていることに気がついたかもしれません。

セッショントレース識別子は、全てのSQL Azureの接続時に生成されるユニークなGUIDです。サーバサイド上で、SQL Azureチームは、セッショントレースIDによって全ての接続の記録と追跡をしています。つまり、もしセッション識別子とエラーが起こったことがわかれば、Azure Developerサポートは、エラーを探し、エラーの原因を追及することができます。

 

SQL Server Management Studio

 

SQL Server Management Studioで、接続プロパティウィンドウでセッショントレース識別子を取得することができます。

vs03

 

Transact-SQL

 

下のクエリを使用してTransact-SQLでセッショントレースID識別子を取得することができます。

SELECT CONVERT(NVARCHAR(36), CONTEXT_INFO())

 

C#

 

またはC#でも取得することができます。

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());
    }
}

重要なことは、セッショントレースIDは、クライアントサイド上のADO.NETコネクションプールとサーバへの接続ごとに発行されます。コネクションプールがリサイクルされ、接続し直すまで、SqlConnectionのインスタンスは同じセッショントレースIDになります。

 

まとめ

 

もし、セッショントレースIDとサーバネーム、おおよその時間を用意し、Azure Developer サポートに電話すると、デバッグプロセスを早めることができ、貴重な時間を守ることができます。