クラウドで利用できるRDBMSとしてのSQL Azure
SQL Azureに接続する
第3回ではクラウドで本格的なSQLを使えるSQL Azureについて解説します。
なお、本記事で使用している「SQL Azure」は、正確には「SQL Azure Database」となります。8月のCTPでトライアルが開始されたのはSQL AzureのDatabaseの部分だけですが、SQL AzureシリーズとしてはReporting、BI、Data Syncなどの機能も計画されており、現状の雰囲気としては、SQL AzureとはSQL Server製品事業部のテリトリーというように感じられます。
それでは、今回もSQL Azureについて実際の操作とともに説明を進めていくことにします。
Windows Live(http://sql.azure.com/)にてサインイン後、左メニューの「SQL Azure」を選択、[SDS-only CTP ProjectのAction:Manage]をクリックした後の画面が図1-1になります。
朱文字の「サーバー名」は自動的に指定されたものですが、Server Adminは初回にTokenを入力した後、自身で作成した管理者「ユーザー名」です。「サーバー名」の右の「Connection Strings」をクリックすると、次のような接続文字列のサンプルが表示されるのには感心させられます。
---------------------------------------------------
ADO.NET : Server=tcp:[サーバー名].ctp.database.windows.net;Database=master;User ID=[ユーザー名];Password=myPassword;Trusted_Connection=False;
ODBC : Driver={SQL Server};Server=tcp:[サーバー名].ctp.database.windows.net;Database=master;Uid=[ユーザー名];Pwd=myPassword;
OLE DB : Provider=SQLNCLI10;Server=tcp:[サーバー名].ctp.database.windows.net;Database=master;Uid=[ユーザー名];Pwd=myPassword;
---------------------------------------------------
この時点でFirewallなどの障壁がなければ、SQL Serverのクライアント・ツールがインストールされたパソコンから次のコマンド実行で接続してテーブルを確認(select * from INFORMATION_SCHEMA.TABLES)できます。図1-2をご参照ください。
C:\>sqlcmd -S[サーバー名].ctp.database.windows.net -U[ユーザー名]@[サーバー名]-d master
【注意】ユーザー名の後ろに“@サーバー名”が必要です。また、単にサーバー名のタイプミスでも次のようなエラーメッセージが返ってきますので、慌てないようにしてください。
---------------------------------------------------
Sqlcmd: エラー: Microsoft SQL Native Client: サーバーへの接続確立時にエラーが発生しました。接続先が SQL Server 2005 である場合は、既定の設定では SQL Server がリモート接続を許可していないことが原因である可能性があります。
---------------------------------------------------
SQL Azureにデータベース、テーブルを作成する
Training Kit[※1]を参考にSQL Server Management Studio(以降SSMS)を利用し、解説を行います。
まずsqlcmdで利用した「サーバー名」を指定してSSMSで接続しようとすると「Invalid Object name‘sys.configurations’」エラーとなりますが、これは無視します。画面を起動した後、「新しいクエリ」を実行して、再度「サーバー名」「ユーザー名」(SSMSではユーザー名の後の@サーバー名は不要)を入力し接続します。
ここでまた‘ANSI_NULL’is not a recognized SET option.と表示されますが無視します。ログイン後、テーブル名検索を実行した結果が図1-3となります。
以下は、Training Kitに従った一連の作業と、それに使用したSQLです。
1)新しいデータベースを作成
Create Database HoLTestDB
2)作成したデータベースの確認
SELECT * FROM sys.databases
3)SQL Server Loginを作成(接続ユーザーの作成関連はSQL Server独特の手続きとなります)
CREATE LOGIN HoLTestUser WITH PASSWORD='REPLACE_HoLTestUser_PASSWORD'
4)データベースユーザーを作成し、SQL Server Loginとひも付ける
CREATE USER HoLTestUser FOR LOGIN HoLTestUser
5)一旦ログアウトし既定のデータベースをHoLTestDBに設定し再ログイン後、ユーザーに権限を付与
EXEC sp_addrolemember 'db_owner', 'HoLTestUser'
6)ログアウトしHoLTestUserにて再接続
7)テーブル作成
CREATE TABLE HoLTestTable(MyRowID int PRIMARY KEY CLUSTERED)
8)データ登録
INSERT INTO HoLTestTable VALUES (1)
9)テーブル作成
CREATE TABLE [Customer](
[CustomerID] [int] IDENTITY(1,1)NOT NULL PRIMARY KEY CLUSTERED,
[Title] [nvarchar](8)NULL, [FirstName] [nvarchar](50)NOT NULL,
[LastName] [nvarchar](50)NOT NULL, [EmailAddress] [nvarchar](50)NULL,
[Phone] [nvarchar](30)NULL, [Timestamp] [timestamp] NOT NULL)
10)インデックス追加
CREATE INDEX IX_Customer_EmailAddress ON Customer(EmailAddress)
#削除は drop index IX_Customer_EmailAddress on Customer
11)データ登録
INSERT INTO [Customer]
([Title],[FirstName],[LastName],[EmailAddress],[Phone]) VALUES
('Mr','David','Alexander','davida@fabrikam.com','555-1234-5555')
12)データを登録用のPROCEDUREを作成
CREATE PROCEDURE AddData @NumRows int AS
DECLARE @counter int
SELECT @counter = 1
WHILE (@counter
BEGIN
INSERT INTO [Customer] ([Title],[FirstName],[LastName],[EmailAddress],[Phone]) VALUES
('Mr','David','Alexander',CAST(@counter as nvarchar)+'davida@fabrikam.com','555-1234-5555')
SELECT @counter = @counter + 1
END
13)作成したテーブルに10,000行のデータを登録
Execute the query EXEC AddData 10000
操作中の注意事項として、SMSSで新規に作成したユーザー、HoLTestUserでログインする際には「サーバーへの接続画面での[オプション]->[接続プロパティ]タブの[既定のデータベース]をHoLTestDBに設定する必要がある」とありますが、これ以外は通常のSQL Serverと同じようにSQL Azureを操作することができました。
※1 Windows Azure Platform Training Kit - August Update(http://www.microsoft.com/DownLoads/details.aspx?familyid=413E88F8-5966-4A83-B309-53B7B77EDF78&displaylang=en)(アクセス:2009.09)