Contained Databases を使用したログインを意識しないデータベースの移動 の続きになります。
上記の投稿では Contained Databases を使用して、データベースのユーザーにログインとしての情報を含め、データベースの移動時のログイン作成にどのように影響するかを書きました。
Contained Databases を使用することでデータベースの照合順序を一時テーブルのデフォルトの照合順序として使用できるようになります。
# 通常、tempdb の照合順序はインストール時に設定した照合順序となります。
今回はこの、Contained Database Collations について軽くまとめてみたいと思います。
■Contained Databases を使用した場合の一時テーブルの照合順序
まずは、Contained Databases を使用しない場合の一時テーブルの照合順序の動作を確認してみたいと思います。
今回のインスタンスの tempdb ですが、[Japanese_XJIS_100_CI_AS] となっています。
大文字小文字は区別しない設定となっていますので比較時に [A] と [a] は同一になります。
照合順序を [Japanese_XJIS_100_BIN2] に設定して、Contained Databases は無効の状態にしています。
このデータベースはバイナリ照合順序ですので検索時に文字の大文字小文字等が区別される設定となります。
# [A] と [a] は別になります。
このデータベースで以下のクエリを実行してみます。
USE [TEST2] |
実行しているデータベースの照合順序では大文字と小文字を区別する設定となっていますが、一時テーブルの照合順序は tempdb のものが使用されるため大文字と小文字は区別されずに検索がされます。
それでは、同様の照合順序で Contained Databases が有効になっているデータベースに対して同様のクエリを実行してみます。
USE [TEST] |
Contained Databases が有効になっている場合には選択しているデータベースの照合順序が使用されるため、[A] と [a] が区別されます。
そのため結果が変わってきます。
このあたりの設定がまとめられているのが本投稿の最初に記載したリンクになります。
以下は、リンク先から表をコピーしたものになります。
Contained Databases が有効になっている一時データは [Tempdb Collation] ではなく [DATABASE_DEFAULT] が使用されるようになります。
# テーブル変数はどちらの場合もデータベースの照合順序になるようですが。
そのため、有効になっている場合は作成した一時テーブルでデータベースの照合順序である [Japanese_XJIS_100_BIN2] が使用されることになります。
そのため、tempdb では大文字小文字を区別しない設定となっていても、バイナリ照合順序で比較が行われるため、大文字小文字の区別がされる状態となります。
このような動作をするようになることで、Contained Databases を有効にした場合にはインストール時の照合順序に依存しない比較ができるようになってきます。
他のインスタンスにデータベースを移動した際の比較順への影響が抑えられるようになるかと。
# どこまで想定通りの動作をするかは検証する必要がありますが。
Denali になると、Contained Databases を使用することでサーバーに設定に依存せずにデータベースの設定で一定の環境が作れるようになってくるようですね。
HADR (Always On) に関しても、導入を軽くまとめて以降追加の情報を書いていなかったのでぼちぼちまとめていきたいと思います。