前にOracleを使っていたころは、データベースやテーブル作成といった操作は、もっぱらSQL*Plusというコマンドベースのインタフェースから行っていました。その際は、結構SQL文にも気を使っていて、テーブルやインデックスは、どの表領域に配置するかとか、ファイルは幾つ割り当てるか、とか、色々物理(?)方面にも気を遣っておりました。
その後、SQL Serverに移ってからは、GUIのManagement Studioでの操作が中心となりました。こちらの操作に慣れると、本当に楽。いつのまにか、ほとんどGUIで、しかもあまりカスタマイズせずにデータベースを作成することが多くなりました。
さて、先日、データベースのメンテナンスをしようと思ったのですが、「せっかくだから読み取り専用で上げておこうかな~」と考え、Management Studioからデータベースにアクセスしました。
そこで、「あれれ?」と思ったことが。
GUIでデフォルトでデータベースを作成すると、読み取り専用に変更できないんでしょうか?
Oracleの場合は、ALTER TABLESPACE xxxxxx READ ONLY(今は違うかもしれません)という感じで、テーブルの入った表領域を指定して読み取り専用に出来ました。
で、同じようにSQL Serverでも可能だろうと思っていたんですが、SQL Serverの場合、
- 表領域ではなく、「ファイルグループ」単位で指定
- PRIMARYファイルグループについては、読み取り専用には出来ない
と、いうことのようなんですね…(x_x)
対象のデータベースは、デフォルトで作ったままだったので、テーブルなどのオブジェクトも、PRIMARYのファイルグループに格納されてしまっている状態。GUIのオプションでも「読み取り専用」は選択出来ないし、コマンドラインからも、
メッセージ 5047、レベル 16、状態 1、行 1
PRIMARY ファイル グループの READONLY プロパティは変更できません。
と、正しくお叱りの言葉を頂戴してしまいました。
今更ですが、ちゃんとデータ格納用のファイルグループを作っておこうと思ったのでした....。(オブジェクト作成時にもファイルグループを指定しないとダメですよね)