SQL Server のデータベース オプション フラグの収集
By Shawn Aebi - Microsoft Federal Systems
SQL Server にはサーバー自体とデータベースの両方についての管理設定があります。これらの設定の一部は、任意のデータベース管理者が利用可能な sp_configure オプションを通じて制御することができます。しかし、より詳細なパラメータはシステム テーブルに格納され、master データベース内でアクセスする必要があります。この設計により、システム管理者 (SA) およびデータベース所有者 (DO) のみがこの情報にアクセスできます。これらの管理者は sp_dboption システム プロシージャを使って処理を行います。
現在、sp_dboptionは 6 つの設定についての情報スイッチを保持します。
DBO USE ONLY |
データベースの使用を DBO に限定します。 |
NO CHKPT ON RECOVERY |
回復時にサーバーがトランザクション ログにチェックポイント レコードを書き込まないようにします。 |
READ ONLY |
すべてのデータベースを読み取り専用モードにします。これによりユーザーはデータベースの内容を変更できなくなります。 |
SELECT INTO/BULKCOPY |
ログなし処理を許可します。bcp によるデータのインポート/エクスポートや select into により一時テーブルを作成する処理でよく使われます。 |
SINGLE USER |
データベースに同時にアクセスできるユーザーをただ 1 人に限定します。 |
TRUNC. LOG ON CHKPT. |
各チェックポイントにおいて、トランザクション ログのアクティブでない部分を強制的にクリアします。 (既定では 5 分おきに行います) |
これらのオプションは sysdatabase システム テーブル内の status フィールドに保持されます。各パラメータにはビット エントリに等しい番号が割り当てられています。番号には間隔が空いていますが、これは予約されたものです。
Bulkcopy |
4 |
Trunc.Log |
8 |
No Chkpt |
16 |
ReadOnly |
1024 |
DBOOnly |
2048 |
Single Use |
4096 |
(たとえば、Trunc.Log と DBOOnly 設定が ON のデータベースのステータスは 8 + 2048 = 2056 となります)
システム管理者にとって、各データベースでどの設定が ON になっているかを知ることは有益です。処理によっては、たとえば、事前に select into/bulkcopy を OFF にする必要があります。サーバー全体に関してこれらの統計をグローバルに監視することは明らかにシステム管理者の責任です。sp_helpdb などのプロシージャを使って、 (1) データベースを一覧表示する、および (2) 個々のデータベースについてのデータベース オプション設定を一覧表示することはできますが、これら 2 つを組み合わせ、すべてのデータベースに関するすべてのデータベース オプション設定を表形式にする操作は存在しません。
以下のプロシージャは sysdatabases システム テーブル内の各エントリについてステータスを調べ、No または Yes に区別します。結果は表形式で印刷されます。
select "Name" = db.name,
"Bulkcopy" =
substring("NY", (db.status / 4 % 2) + 1, 1),
"TruncLog" =
substring("NY", (db.status / 8 % 2) + 1, 1),
"NoChkpt" =
substring("NY", (db.status / 16 % 2) + 1, 1),
"ReadOnly" =
substring("NY", (db.status / 1024 % 2) + 1, 1),
"DBOOnly" =
substring("NY", (db.status / 2048 % 2) + 1, 1),
"SingleUse" =
substring("NY", (db.status / 4096 % 2) + 1, 1),
from sysdatabases db
このルーチンは substring を用いて、 0 を「N」(No) に、1 を「Y」(Yes) に一致させています。結果の表は以下のようになります。
Name |
Bulkcopy |
TruncLog |
NoChkpt |
ReadOnly |
DBOOnly |
SingleUse |
---|---|---|---|---|---|---|
master |
N |
Y |
N |
N |
N |
N |
model |
N |
N |
N |
N |
N |
N |
pubs |
N |
N |
N |
N |
N |
N |
tempdb |
Y |
N |
N |
N |
N |
N |
test |
N |
N |
N |
N |
N |
N |
wisc |
Y |
N |
N |
N |
N |
N |
(6 row(s) affected)
この Transact SQL ステートメントにより、システム管理者はサーバーのデータベース オプション パラメータのスナップショットを取得したり、定常的な保守処理にこのプロシージャを組み入れたりすることが可能になります。