SQL Azure のCTP版の提供が8月18日から開始されていましたが、SQL Azure CTP のinvitation code が送られてきたので、Windows Azure とSQL Azureを試しています。ストレージとして、SQL Sever のみを使っているアプリケーションの場合は容易に Windows Azure 用にに変換して公開することが可能です。

SQL Azure は、SQL Server 2008 をベースにしていますが、SQL Server Management Studio(SSMS) のオブジェクト エクスプローラ等のGUIツールは、まだ利用できないということで、クエリのみが利用できるという状況です。今後のツール類の整備に期待したいと思います。

マニュアルは、現状では Windows Azure Platform Training Kit(August 2009 Update) を見ろということのようです。SQL Azure の使い方について少しメモ書きをしておきます。

1.SQL Azure への接続

1-1.SSMS を起動します。サーバーへの接続画面が表示されますがキャンセルボタンをクリックします。
1-2.「 新しいクエリ」ボタンをクリックします。SQL Azure へ接続する場合は、常にクエリからになります。
image
1-3 サーバーへの接続画面が表示されるので、管理者でサーバーに接続します。
サーバー名は、server_name.ctp.database.windows.net server_nameは、管理画面のServer Name: で表示されるサーバー名です。
認証は、SQL Server 認証 を選択します。
ログインは、管理画面のServer Admin: に表示される管理者を入力します。
パスワードは、登録したパスワードを使用します。管理画面には「Reset Password」ボタンがあるのでいつでも変更ができます。
image 
1-4 接続できると以下のエラーメッセージが表示されますが無視します。
image 

2. データベースとユーザーの作成

SSMSで使えるのは、クエリの画面だけなので、作業はすべてコマンドベースで行います。
2-1. データベースの作成
CREATE DATABASE データベース名
2-2. データベースの一覧の表示
SELECT * FROM sys.databases
2-3. ユーザーの作成
CREATE LOGIN ユーザー名 WITH PASSWORD=’パスワード’

3. データベースへのユーザー権限の設定

Azure SQL では、USE コマンドを使ったデータベースの移動ができません。別のデータベースにアクセスしたい場合は、接続をし直す必要があります。サーバーへの接続画面で、オプションボタンをクリックして、「接続プロパティ」タブを選択して、「データベースへの接続」の項目にユーザー権限の設定をしたいデータベースの名前を入力します。
image

3-1. データベースへのログインを可能にする
CREATE USER ユーザー名 FOR LOGIN ユーザー名
3-2. データベースに所有者権限を付与する。
EXEC sp_addrolemember ‘db_owner’, ‘ユーザー名’
以上で作成したユーザーで、新規データベースにログインして、作業ができるようになります。

4. データベースの移行

既存のデータベースをSQL Azure にインポートしたい場合は、SSMS でエクスポートしたいデータベースのスクリプトを作成して、それでSQL Azure にインポートします。
4-1. スクリプトの作成
SSMSでエクスポートしたいデータベースを選択して、右クリックをして、「タスク」の「スクリプトの生成」を選択します。
image
スクリプト作成ウィザードが起動されます。ウィザードにしたがって入力しますが、スクリプトオプションの設定では次の設定を変更します。
データのスクリプトを作成 True (データもエクスポートしたいため)
UDDTs を基本データ型に変換 True (SQL Azure では、ユーザー定義型は利用できない)
USE DATABASE のスクリプトを作成 False (SQL Azure では、USE は利用できない)
拡張プロパティのスクリプトを作成 False (SQL Azure では、拡張プロパティは利用できない)

4-2 スクリプトを SQL Azure 用に修正
SQL Azure は、SQL Server 2008 のサブセットであるため、SQL Azure で定義されていない機能を削除していきます。作成したスクリプトファイルをSSMS に読み込んで、以下の変更を行います。

    • スクリプトの最初にあるユーザー定義の削除
      /****** Object:  User [NT SERVICE]    Script Date: 08/26/2009 19:53:45 ******/
      CREATE USER [NT SERVICE] FOR LOGIN [NT SERVICE\MSSQL$SQLEXPRESS]
      GO
    • CREATE TYPE の削除
    • ON [PRIMARY] の削除
    • NOT FOR REPLICATON の削除
    • WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) を
      WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) で置き換える
    • XML SCHEMA COLLECTION 文の削除
    • CREATE PRIMARY XML INDEXPress 文の削除
    • ROWGUIDCOL の削除
    • SET ANSI_NULLS の削除

  

上記以外にも定義されていない機能があるので、SQL Azure に接続して、「解析」ボタンをクリックして、結果を確認してスクリプトを修正していきます。なお、「解析」を実行してもデータベースの更新はおこなわれません。  image

4-3. SQL Azure にインポート

SQL Azure に接続して、スクリプトを実行すれば、SQL Azure のデータベースにテーブル等がインポートされます。

  1. テーブル一覧の取得 SELECT * FROM sys.objects
  2. 照合順序の変更(ALTER DATABASE は使用できないため、列単位で指定)
    ALTER TABLE テーブル名 ALTER COLUMN 列名 列型 COLLATE Japanese_CI_AS
5. SQL Azure を使ったアプリケーションの作成

ローカルのSQL Server を使ってアプリケションを作成後、Web.config の接続文字列を修正する。Web.config の修正をする場合は以下の接続文字列を参考にして修正します。アプリケーションでの接続は、簡単でした。

<add name="AdventureWorksLT2008ConnectionString" connectionString="Initial Catalog=HoLTestDB;Data Source=REPLACE_SERVER_NAME.ctp.database.windows.net;encrypt=true;User ID=HoLTestUser;Password=REPLACE_HoLTestUser_PASSWORD;TrustServerCertificate=true;" providerName="System.Data.SqlClient" />