あれとアレは混ぜるな危険

日々精進をしているふり

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
実験用データベースへのログイン

今作ったデータベースにログインし直します。一旦ログアウトして、接続ダイアログを開きます。
そうしたら、「オプション」をクリックして「データベースの接続」の所を書き換えます。
f:id:haru-tama:20090904231352j:image:h300
ついでに、「接続タイムアウト」を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」とか実行できないし><