SQLAzureを使ってみる。(テーブルを作る一歩手前編)
さて、前回の続きです。やっとです。
ごめんよ、仕事が忙しくて。今回はテーブル作って、Insertするところまでやってみましょうか。
SQLAzureってどんな環境?
さて、とりあえずバージョンを見てみましょうか。こんなSQLを実行してみましょう。
SELECT @@version
そうすると、返ってくるのはこんなバージョンです。(9月4日の時点で)
Microsoft SQL Server 2008 (RTM) - 10.0.9006.81 (X64) Aug 6 2009 12:43:32 Copyright (c) 1988-2008 Microsoft Corporation CloudDB on Windows NT 5.2 <X64> (Build 3790: Service Pack 2)
ちなみに、自分のマシン(WindowsVistaのx64版)にインストールされているSQLServer2008(x64)のバージョンはこんな感じでした。
Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64) Mar 29 2009 10:11:52 Copyright (c) 1988-2008 Microsoft Corporation Express Edition with Advanced Services (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2)
これで分かることは
- ベースはSQLServer2008。だけど、ビルド番号を見ると相当な修正が入っていそう。
- 動いているOSはWindowsServer2003の64ビット版。しかも、ビルド番号はRTMビルドと一緒。
- 「CloudDB」と名乗っているあたりが本気。
こんなところです。
実験環境を作る
さて、早速テーブルを作ってみましょう。といっても、作れません。権限が無いんです。
まず最初に権限を設定する必要がありますが、masterデータベースでできることは、かなり限られている感じです。なので、新しく実験するためのデータベースを作るところから始まります。
実験用データベースの作成
ということで、Management Studioから、こんなクエリでDBを作りましょう。
CREATE DATABASE asobi
できたかどうかを確認するために、動的管理ビュー*1からSelectしてみましょう。
SELECT * FROM sys.databases
そうすると、こんな感じでちゃんとできてるはずです。
name ------------------- master asobi
実験用データベースへのログイン
今作ったデータベースにログインし直します。一旦ログアウトして、接続ダイアログを開きます。
そうしたら、「オプション」をクリックして「データベースの接続」の所を書き換えます。
ついでに、「接続タイムアウト」を0秒にしておけば、接続がブチブチ切れなくなります。それでも、ある程度の時間がたつと切れちゃいますが・・・
実験用ログインとユーザの作成
データベースを作ったので、ログインとユーザーも作っておきましょう。
Management Studioから、こんなクエリで実験用データベースにログインを作成します。
CREATE LOGIN dareka WITH PASSWORD='P@ss1word'
パスワードはある程度の強度が要求されるポリシーが設定されています。おそらく、8文字以上で以下の種類の文字を少なくとも1文字含む文字列です。
- アルファベットの大文字
- アルファベットの小文字
- 数字
- 記号
で、次にユーザーをこんなSQLで作成します。
CREATE USER dareka FOR LOGIN dareka
こうすると、「asobi」データベースに対して、「dareka」というユーザーが「P@ss1word」というパスワードでログインできるようになります。でも、この状態だと権限がさっぱり無いので、「dareka」さんに権限を割り当てておくためにSQLを実行します。
EXEC sp_addrolemember 'db_owner', 'dareka'
これで「dareka」さんは「db_owner」のロールが割り当てられました。
CREATE TABLE して INSERT してみる
さて、それでは「dareka」さんでログインして、CREATE TABLE して INSERTしてみましょう。
CREATE TABLE でテーブル作って・・・
CREATE TABLE iremono( suuji int NULL, moji nvarchar(200) NULL )
INSERT文でレコード追加すると・・・
INSERT INTO iremono (suuji, moji) VALUES (123, 'もじもじ')
予想通り、失敗します。そして、メッセージにはこんな感じで出力されます。
メッセージ 40054、レベル 16、状態 1、行 1 Heaps can not be replicated tables. Please create a clustered index for the table.
なぜこんなメッセージで失敗するのかは、明日書きます。長くなってきたし・・・
*1:SQLServer2008と動的管理ビューの構成が明らかに違う感じなのですが、まとまってる資料が無いです。「SELECT * FROM sys.sysusers」とか実行できないし><