# CHAPTER 9: データベース管理

## 9.1 はじめに

この章ではデータベース管理ユーティリティ `empadm`の機能について説明します。 このユーティリティはデータベースの管理機能を実行するために利用されます。 `empadm`を使って、データベース管理者(DBA)は以下のことが可能です。

- DBAモードおよびシングルユーザーモードによるデータベースアクセスの制限
- アクティブロック情報の取得
- ロックマネージャの統計の参照とリセット
- 途中終了したプロセスのロックの削除（無効なロックの削除)
- ディスク上のロックファイルの削除
- シェアードメモリーの作成
- 保護されていないシェアードメモリの削除
- すべてのシェアードメモリの削除
- シェアードメモリのリフレッシュ
- シェアードメモリのクリア
- シェアードメモリ情報の参照
- シェアードメモリ統計の参照
- シェアードメモリ統計のリセット
- シェアードメモリへのテーブルのマップ
- コーディネイター情報の参照
- コーディネイター情報のクリア
- データ辞書エントリの再コンパイル
- 論理データベースの物理位置（パス）の決定
- プロセス制限の設定

## 9.2 DBA モードとシングルユーザーモード

`empadm`ユーティリティは 他のユーザーのデータベースアクセスを制限するための データベース管理者に許可する２つのオプションを提供します。

- `dbamode` オプションはデータベースにアクセスする複数の DBAプロセスを許可します。 すべての 非DBAプロセスはデータベースアクセスを制限されます。

- `シングルモード`オプションは 1つのDBA プロセスのみ、 データベースアクセスを許可します。 他のプロセスはデータベースアクセスを制限されます。

### 9.2.1 DBA モード

DBA モードは データベース管理者(DBA)のみにデータベースアクセスを 制限することを意味します。 その際、DBA プロセスは複数、同時にデータベースにアクセスすることができます。 以下のコマンドはデータベース管理者のみ発行することができます。

       empadm database_name dbamode [on] [-i N| -q]

ここでのポイントは、

- DBA プロセスのみデータベースにアクセスすることができます。
- 新しい非DBAプロセスはデータベースにアクセスすることはできません。
- `empadm` プログラムは すべての非DBAプロセスがデータベースのアクセスを終了する まで待ちます。
- DBAモードに入ることに成功した場合、 `empadm`は、"DBA モードになりました。データベースアクセスは、DBA のみに制限されます。" というメッセージを出力し、終了します。
- データベースは、この状態においてDBA モードであり、 DBAプロセスのみデータベースをアクセスすることができます。

`empadm`が、すべての非DBAプロセスがデータベースのアクセスを 終了するのを待っている間、 データベースに現在アクセスしているユーザーリストを `N` 秒ごとに出力します。 その秒数は`-i`オプションで定義され、デフォルトでは 10 秒です。 `empadm`は、ユーザーに対してデータベースへのアクセスを 終了させるための通知をしません。よって、DBAは、ユーザーに直接伝えるか、 待つことを選ぶことになります。

報告する間隔は、`N`秒ですが、 `empadm`は、非DBAプロセスを毎秒ごとにチェックします。 `N`に "0" または "-q"が指定された場合、 `empadm`はユーザーリストを出力しません。

特権の持つすべてのユーザーにデータベースを有効にするためには (DBAモードを終了するには）、 以下のコマンドを使います。

       empadm database_name dbamode off

### 9.2.2 シングルユーザーモード

シングルユーザーモードは、 データベースアクセスを要求した単一のDBAプロセスのみに 制限すること意味します。

       empadm database_name singlemode [-i N| -q] ["shell_command"]

ここでのポイントは、

- 新しいプロセスはデータベースにアクセスできません。
- `empadm`プログラムは 他のプロセスがデータベースをアクセスしていない時に シングルユーザーモードに入り、実行を続けます。
- シングルユーザーモードに入ることに成功した場合、 `empadm`は、 "シングルユーザモードになりました。本ユーザのみがこのデータベースにアクセス可能です。" というメッセージを出力し、子プロセスとしてシェルを起動します。
- この専用のDBAプロセスは、この状況において唯一データベース上で 作業することができます。
- DBAプロセスがシェルを終了することで、 `empadm`は終了し、データベースは再び他のユーザーにより 利用することができます。

`empadm`が、すべてのプロセスがデータベースのアクセスを 終了するのを待っている間、 データベースに現在アクセスしているユーザーリストを `N` 秒ごとに出力します。 その秒数は`-i`オプションで定義され、デフォルトでは 10 秒です。 `empadm`は、ユーザーに対してデータベースへのアクセスを 終了させるための通知をしません。よって、DBAは、ユーザーに直接伝えるか、 待つことを選ぶことになります。

報告する間隔は、`N` 秒ですが、 `empadm`は、プロセスを毎秒ごとにチェックします。 `N` に "0" または "-q"が指定された場合、 `empadm`はユーザーリストを出力しません。

`shell_command`が指定されていない場合、 `empadm`は対話モードで実行し、 シェルコマンドが指定された場合はバッチモードで実行します。

## 9.3 アクティブロック情報

データベースのアクティブロック情報は`empadm`ユーティリティの以下のオプションを 使うことでレポートされます。

- `"lockinfo"` アクティブロック情報とロックに関連したプロセス、 ロックマネージャ情報を含む 長いリストのレポートを生成します。
- `"lockbrief"` アクティブロック情報とロックに関連したプロセスを含む 短いリストのレポートを生成します。
- `"lockmanagers"` ロックマネージャとアクティブロックのレポートを生成します。
- `"locksactive"` アクティブロックのみのレポートを生成します。

`"lockinfo"`オプションは、アクティブロックおよび これらのロックを保持するプロセス、 またロックマネージャについての情報を提供します。

         empadm database_name lockinfo [table_name ...]

  以下にサンプル出力を示します。

         Lock Managers

         Table name              Lock Man. Name  Type           MAXPROCS NBUCKETS   NLOCKS
         sys_attr_privs          00005.lck       F                    32       11      200
         sys_attrs               00003.lck       F                    32       11      200
         sys_dictionary          00001.lck       F                    32       11      200
         sys_privs               00004.lck       F                    32       11      200
         sys_tables              00002.lck       F                    32       11      200
         t1                      00006.lck       F                    32       11      200
         t2                      00007.lck       F                    32       11      200

         Active Locks

         Table name              Type       Record#      Status     Empress ID

         sys_dictionary          ADMIN          ---      r          2086626528
         sys_dictionary          ADMIN          ---      r           957829758
         sys_dictionary          RECORD           6      r          2086626528
         sys_dictionary          ALLRECS        ---      rr         2086626528
         sys_dictionary          ALLRECS        ---      rr          957829758
         sys_dictionary          RECORD           7      r           957829758
         t1                      ALLRECS        ---      rr         2086626528
         t1                      ADMIN          ---      r          2086626528
         t1                      RECORD           2      r          2086626528
         t1                      RECORD           1      r          2086626528
         t2                      ADMIN          ---      r           957829758

            Empress ID   Process ID      Username
             957829758         4261      joe@gold.empress.com
            2086626528         4281      joe@gold.empress.com

  最初に表示されるロックマネージャのレポートは、 各テーブルのロックマネージャについての情報を表示します。

  - `Lock Man. Name`は、テーブルのロック情報を管理するファイル名。

  - `Type`フィールドはロックマネージャの種類を指します。

    - `F`は、ファイルロック。
    - `P`は、シェアードメモリロック。

  - `MAXPROCS`は、同時にテーブルにアクセス可能な最大プロセス数。

  - `NBUCKETS`は、ロックマネージャのハッシュバケット数。

  - `NLOCKS`は、ロックマネージャによって管理可能な同時ロック最大数。

  次に表示されるアクティブロックのレポートは、データベース内のすべてのアクティブなロックに ついての情報を表示します。

  - `Type`は、ロックタイプ。種類として`ADMIN`, `CRIT`、 `RECORD`、 `ALLRECS`があります。

  - `Record#`フィールドは、 ロックされているテーブルのレコードを示します。 "---" は、ロックがテーブル全体に適用していることを意味しています。

  - `Status` フィールドは、 `"r"` (read)、 `"rr"`(deferred read)、 `"u"` (update)、 `"uu"` (deferred update) の１つになります。

  - `Empress ID` フィールドは、 このロックを保持しているEmpressプロセスを示します。

  最後に表示されているレポートは EmpressプロセスのオペレーティングシステムID を表示することでユーザーを支援します。

  - `Empress ID`フィールドは、ロックを保持している Empressプロセスを示します。

  - `User name` は、 Empressプロセスを実行しているオペレーティングシステムの ユーザー名。

  - `Process ID`は、EmpressプロセスのオペレーティングシステムID。

  - `Host ID`は、Empressプロセスを実行している マシンのネットワークアドレス。

`"lockbrief"`オプションは、アクティブロックおよび これらのロックを保持するプロセスについての情報を提供します。

         empadm database_name lockbrief [table_name ...]

  以下にサンプル出力を示します。

         Active Locks

         Table name              Type       Record#      Status     Empress ID
         sys_dictionary          ADMIN          ---      r          2086626528
         sys_dictionary          ADMIN          ---      r           957829758
         sys_dictionary          RECORD           6      r          2086626528
         sys_dictionary          ALLRECS        ---      rr         2086626528
         sys_dictionary          ALLRECS        ---      rr          957829758
         sys_dictionary          RECORD           7      r           957829758
         t1                      ALLRECS        ---      rr         2086626528
         t1                      ADMIN          ---      r          2086626528
         t1                      RECORD           2      r          2086626528
         t1                      RECORD           1      r          2086626528
         t2                      ADMIN          ---      r           957829758

            Empress ID   Process ID      Username
             957829758         4261      joe@gold.empress.com
            2086626528         4281      joe@gold.empress.com

  最初に表示されているレポートは、 データベース内のすべてのアクティブなロック についての情報を表示します。

  - `Type`は、ロックタイプ。種類として`ADMIN`, `CRIT`、 `RECORD`、 `ALLRECS`があります。

  - `Record#`フィールドは、 ロックされているテーブルのレコードを示します。 "---" は、ロックがテーブル全体に適用していることを意味しています。

  - `Status` フィールドは、 `"r"` (read)、 `"rr"`(deferred read)、 `"u"` (update)、 `"uu"` (deferred update) の１つになります。

  - `Empress ID`フィールドは、ロックを保持している Empressプロセスを示します。

  最後に表示されているレポートは EmpressプロセスのオペレーティングシステムID を表示することでユーザーを支援します。

  - `Empress ID`フィールドは、ロックを保持している Empressプロセスを示します。

  - `User name` は、 Empressプロセスを実行しているオペレーティングシステムの ユーザー名。

  - `Process ID`は、EmpressプロセスのオペレーティングシステムID。

  - `Host ID`は、Empressプロセスを実行している マシンのネットワークアドレス。

`"lockmanagers"` オプションは、 ロックマネージャとアクティブロックついての情報を提供します。

         empadm database_name lockmanagers [table_name ...]

  以下にサンプル出力を示します。

         Lock Managers

         Table name              Lock Man. Name  Type     MAXPROCS NBUCKETS   NLOCKS
         sys_attr_privs          00005.lck       F              32       11      200
         sys_attrs               00003.lck       F              32       11      200
         sys_dictionary          00001.lck       F              32       11      200
         sys_privs               00004.lck       F              32       11      200
         sys_tables              00002.lck       F              32       11      200
         t1                      00006.lck       F              32       11      200
         t2                      00007.lck       F              32       11      200

         Active Locks

         Table name              Type       Record#      Status     Empress ID
         sys_dictionary          ADMIN          ---      r          2086626528
         sys_dictionary          ADMIN          ---      r           957829758
         sys_dictionary          RECORD           6      r          2086626528
         sys_dictionary          ALLRECS        ---      rr         2086626528
         sys_dictionary          ALLRECS        ---      rr          957829758
         sys_dictionary          RECORD           7      r           957829758
         t1                      ALLRECS        ---      rr         2086626528
         t1                      ADMIN          ---      r          2086626528
         t1                      RECORD           2      r          2086626528
         t1                      RECORD           1      r          2086626528
         t2                      ADMIN          ---      r           957829758

  `Lock Managers`のレポートでは、各テーブルのロックマネージャの情報を表示します。

  - `Lock Man. Name`は、テーブルのロック情報を管理するファイル名。

  - `Type`フィールドはロックマネージャの種類を指します。

    - `F`は、ファイルロック。
    - `P`は、シェアードメモリロック。

  - `MAXPROCS`は、同時にテーブルにアクセス可能な最大プロセス数。

  - `NBUCKETS`は、ロックマネージャのハッシュバケット数。

  - `NLOCKS`は、ロックマネージャによって管理可能な同時ロック最大数。

  `Active Locks`のレポートでは、 データベース内のすべてのアクティブロックについての情報を表示します。

  - `Type`は、ロックタイプ。種類として`ADMIN`, `CRIT`、 `RECORD`、 `ALLRECS`があります。

  - `Record#`フィールドは、 ロックされているテーブルのレコードを示します。 "---" は、ロックがテーブル全体に適用していることを意味しています。

  - `Status` フィールドは、 `"r"` (read)、 `"rr"`(deferred read)、 `"u"` (update)、 `"uu"` (deferred update) の１つになります。

  - `Empress ID`フィールドは、ロックを保持している Empressプロセスを示します。

`"locksactive"`オプションは、アクティブロックのみの情報を提供します。

         empadm database_name locksactive

  以下にサンプル出力を示します。

         Active Locks

         Table name              Type       Record#      Status     Empress ID
         sys_dictionary          ADMIN          ---      r          2086626528
         sys_dictionary          ADMIN          ---      r           957829758
         sys_dictionary          RECORD           6      r          2086626528
         sys_dictionary          ALLRECS        ---      rr         2086626528
         sys_dictionary          ALLRECS        ---      rr          957829758
         sys_dictionary          RECORD           7      r           957829758
         t1                      ALLRECS        ---      rr         2086626528
         t1                      ADMIN          ---      r          2086626528
         t1                      RECORD           2      r          2086626528
         t1                      RECORD           1      r          2086626528
         t2                      ADMIN          ---      r           957829758

  `Active Locks`のレポートでは、 データベース内のすべてのアクティブロックについての情報を表示します。

  - `Type`は、ロックタイプ。種類として`ADMIN`, `CRIT`、 `RECORD`、 `ALLRECS`があります。

  - `Record#`フィールドは、 ロックされているテーブルのレコードを示します。 "---" は、ロックがテーブル全体に適用していることを意味しています。

  - `Status` フィールドは、 `"r"` (read)、 `"rr"`(deferred read)、 `"u"` (update)、 `"uu"` (deferred update) の１つになります。

  - `Empress ID`フィールドは、ロックを保持している Empressプロセスを示します。

## 9.4 ロックマネージャ統計情報

データベースのロックマネージャについての統計情報は、`empadm`の `"lockstats"`オプションを使うことでレポートされます。

       empadm database_name lockstats [table_name ...]

デフォルトでは、これらの統計情報は利用できません。 統計情報の収集を始めるためには、 データベース管理者は、データ辞書`"tabzero"`ファイル内の `MSDBLOCKSTATS`変数に設定する必要があります。

統計情報の収集を始めるために この変数に何かの値を(例えば`MSDBLOCKSTATS=on`)設定します。 デフォルトでは、この変数は設定されていません。理由として 統計情報の収集の要求はオーバヘッドになるためです。

累積したロックの統計情報をリセットするには `"lockrststats"`オプションを使用します。

       empadm database_name lockrststats

このコマンドの実行後、すべてのロックの統計情報は "0" に 初期化され、そして、再び収集を始めます。

以下に`"lockstats"`のサンプル出力を示します。

       Table name: temperatures

       Lock Man. Name  Type     MAXPROCS NBUCKETS    NLOCKS
       00018.lck       F              32       11       200

       NPROCS  MAXNPROCS       CURNLKS MAXNLKS  EFFICIENCY
            1          2             0       4        100%

       # buckets       % of hits
               2             73%
               3             87%
                             97%

       # hits          # buckets       bucket #
            0                  6         0,   1,   3,   4,   5,
                                         9
           14                  1        10
           54                  1         2
           74                  1         7
          150                  1         8
          244                  1         6

       Max. chain length       # buckets       bucket #
                       0               6         0,   1,   3,   4,   5,
                                                 9
                       1               4         2,   8,   7,  10
                       2               1         6

以下は各フィールドの説明です。

- `Lock Man. Name`は、ロックマネージャ名です。 ロックマネージャがファイルの場合は、 `database/_lock/`ディレクトリのファイル名になります。 ロックマネージャがシェアードメモリの場合は、 シェアードメモリロックマネージャパーティション名になります。

- `Type`は、ロックマネージャのタイプです。 ファイルの場合、`"F"`になり、 シェアードメモリの場合は`"P"`です。

- `MAXPROCS`は、 このロックマネージャに同時に使用可能な 最大Empressプロセス数です。

- `NBUCKETS`は、 ロックマネージャのハッシュバケット数です。 この値は、ロックを管理するための適切な数として Empressによって計算された値です。 そのため、この値はEmpress Software Inc.の コンサルティングなしに変更すべきではありません。

- `NLOCKS`は、 ロックマネージャによって管理可能な同時ロックの総数です。

- `NPROCS`は、現在、ロックマネージャにアクセスしているプロセス数です。

- `MAXNPROCS`は、ロックマネージャを同時に 利用した最大プロセス数です。

- `CURNLKS`は、 現在、ロックマネージャによって管理されているアクティブロック数です。

- `MAXNLKS`は、ロックマネージャによって管理された最大同時ロック数です。

- `EFFICIENCY`は、 理想的なハッシュバケットのチェーンの長さがどのくらいの数の操作によって、 越えたのかを示します。 理想的なハッシュバケットのチェーンの長さは、 アクティブロック数をバケット数で割り、 Empress変数`MSTHRESCHAINLEN`の値を 掛けた値になります。 例として、99% の"EFFICIENCY"は、 理想的なハッシュバケットのチェーンの長さを越えたロック操作は1% 存在するという意味になります。 この数字が70%未満に下がる場合、 Empress Software Inc.に コンサルティングを要請したほうがよいかもしれません。

- `# buckets` と`% of hits`は、 どのくらいの数のバケットが、ロックをあるパーセンテージ（90%以上の値まで） で保持するために必要とされるかを示すことにより、 ロックがハッシュバケットによってどのように分配されるかを示します。 例えば、ロックの 73% は、2 つのバケット内で見つかり、ロックの97% は 4 つのバケット内で見つかったことを表します。 これは、どの程度うまくロックがハッシュバケット間で配分されるかを 指示するために提供されています。 それぞれのバケットが、同じヒット数を持つことが理想的な配分になります。 例えば、2 つのバケットがロックの 73% を保持し、4 つのバケットがロックの 97%を保持していますが、これは非効率的に見えているかもしれませんが、 アクティブロックの最大数が 4 であることに注意すべきです。 言い換えれば、すべてのバケットを使用するロックは非常に少ないということに なります。

- `# hits`、 `# buckets` と `bucket #`は、 各ハッシュバケットのヒット総数を示します。 2 つ以上のバケットが、同じヒット数である場合、 カンマによって分けられリスト表示されます。 例として、2つのバケット (#6 と #8)は、 最も多くのヒット数(それぞれ 244 と150)を占めています。 この数は、上の表でレポートされた数(# buckets vs. % of hits) のヒット総数(394 / 合計)の 73% と一致します。

- `Max. chain length`, `# buckets` と `bucket #` は、各ハッシュバケットの最大チェーン長を示します。 2 つ以上のバケットが同じ最大チェーン長である場合、 カンマによって分けられリストされます。 バケットのチェーン長が理想的なチェーン長を超えた場合、 `EFFICIENCY`フィールドは、100%より少ない値になります。

## 9.5 途中終了したプロセスのロックの削除（無効なロックの削除)

途中終了したプロセスのロック (ダングリング・ロックとして表現されることがあります。)とは、 プロセスがロックをかけた状態で そのプロセスがシステムエラーおよびプロセスのクラッシュにより、 途中終了した場合にテーブル内にロックが残ることがあります。 `"lockclear"` オプションは、このような状況で残ってしまったロックを削除する ために利用します。

       empadm database_name lockclear [-f] [empress_id ...]

`"lockclear"`は、`"-f"`オプション(強制的なクリアロック)を 指定しない限り、アクティブロックを削除しません。

`"-f"`オプションが指定された場合、 プロセスがアクティブな状態であっても、ロックはクリアされます。 そのため、このオプションを使用する場合は注意が必要です。 Empressのプロセスがアクティブな状態である場合、 そのプロセスのロックを削除すべきではありません。

引数の`empress_id`リストは、途中終了した Empressプロセスのリストを指定します。 通常、この途中終了した`empress_id`のリストは、 `empadm database_name lockinfo`のレポートから 取得します。

途中終了したプロセスのリストが指定されない場合、このコマンドを実行する ユーザーIDは、データベース管理者と一致しなければなりません。また、 途中終了したプロセスのリストが指定された場合は、 DBAか、あるいはロックを保持した`empress_id`の所有者と 一致しなくはなりません。

## 9.6 ディスクロックファイルの削除

`"lockremove"` オプションは、データベースロックディレクトリ`"_lock"` 以下のロックファイルを削除するために使用されます。

       empadm  database_name lockremove

シェアードメモリ・ロックマネージャが利用されている場合、 ディスクロックファイルはもはや必要ではありませんが、 このコマンドは有用です。 シェアードメモリロックにおいて、 これらのロックファイルを削除する必要はありませんが、 これを実行することは一般的な保守管理ではよいことです。 （余計なファイルをデータベース内に残さないという意味で）

## 9.7 シェアードメモリの作成

`"shmcreate"`オプションは、 データ辞書 "tabzero"ファイル内に定義された シェアードメモリパーティションを作成するために 利用されます。

       empadm database_name shmcreate

シェアードメモリパーティションは、 それぞれのシェアードメモリパーティション定義ブロック によって作成されます。それが定義されない場合、作成されません。 シェアードメモリパーティションが既に存在している場合、 "empadm"はエラーメッセージを出力し、終了します。

このコマンドはデータベース管理者が 実行しなくてはならないことに注意してください。 また、シェアードメモリの詳細な情報はこのマニュアルの シェアードメモリ を参照してください。

## 9.8 保護されていないシェアードメモリの削除

`"shmremove"`オプションは、 データ辞書に定義されたシェアードメモリパーティションを 削除するために利用されます。

       empadm database_name shmremove

シェアードメモリパーティションは、 それぞれのシェアードメモリパーティション定義ブロック によって削除されます。それが定義されない場合、削除されません。 シェアードメモリパーティションが存在しない場合、 "empadm"はエラーメッセージを出力し、終了します。

保護されたパーティションは、このコマンドでは削除されないことに 注意してください。 言いかえれば、パーティション記述ブロックの `MSSHMPROTECTION`に値を設定することで シェアードメモリパーティションは削除されません。 また、このコマンドはデータベース管理者が 実行しなくてはならないことに注意してください。

## 9.9 すべてのシェアードメモリの削除

`"shmrmall"`オプションは、すべてのシェアードメモリパーティションを削除します。

|  |  | `empadm database_name` | `|shmrmall |shmzap` | `| |`

`"shmrmall"`は、 `"shmremove"`オプション と同じ機能を実行します。 また、保護されたパーティションを削除します。 言い換えれば、 データ辞書"tabzero"ファイルに定義された シェアードメモリをすべて削除し、 `MSSHMPROTECTION`が設定されたものでさえ削除します。

`"shmzap"`は、 `"shmrmall"`と 同じ機能を実行しますが、 `"tabzero"`ファイルのパーティション定義も 合わせて削除します。

また、このコマンドはデータベース管理者が 実行しなくてはならないことに注意してください。

## 9.10 シェアードメモリのリフレシュ

`"shmrefresh"` オプションは以下になります。

- シェアードメモリが存在する場合

  - シェアードメモリパーティションを削除します。 これは`"shmrmall"`オプションと同じ処理になります。
  - シェアードメモリパーティションを再作成します。 これは`"shmcreate"`と同じ処理になります。

- シェアードメモリが存在しない場合、 シェアードメモリパーティションを作成します。 これは`"shmcreate"`と同じ処理になります。

このコマンドの構文は、以下のようになります。

       empadm database_name  shmrefresh

## 9.11 シェアードメモリのクリア

`"shmclear"`オプションはデータ辞書 `tabzero`ファイルに 定義されたシェアードメモリパーティションの内容をクリアします。

       empadm database_name  shmclear

実行することにより、tabzeroファイル中の シェアードメモリパーティション定義ブロックが見つかるごとに クリアします。定義されていない場合は削除もされません。 シェアードメモリパーティションが存在しない場合は、 `empadm`は、エラーメッセージを出力し、終了します。

このコマンドはマップファイルおよびグローバルバッファパーティションのみを クリアし、ロックは削除しません。 また、このオプションはシェアードメモリパーティションを削除しないことに注意してください。 単にデータを空にするだけです。（tabzeroのシェアードメモリ定義を削除するだけです。)

保護されたパーティションはこのコマンドによってクリアされないことにも注意してください。 つまり、`MSSHMPROTECTION`が設定されている場合、パーティション記述ブロックは クリアされません。

## 9.12 シェアードメモリ情報

`"shminfo"`オプションは、 データ辞書 `tabzero`ファイル中のシェアードメモリパーティション定義ブロック に関係したシェアードメモリパーティションについての情報を表示します。

       empadm database_name shminfo

以下は`repairs`データベースのサンプル出力です。

       Database: repairs

       Partition name                               Size     Type
       mapf1                                       22592     Mapped File
       gbuf1                                      161200     Global Buffers
       lock1                                        4784     Lock Manager

       Mapped File Partition

       Partition name             SIZE   START
       mapf1                     22528       0

               Statistics

               Read hit ratio: 100%    Read ratio: 83%

       Global Buffers Partition

       Partition name          BLOCKSIZE       NBLOCKS
       gbuf1                        1024           150

       Lock Manager Partitions

       Partition name : lock1

               MAXPROCS        NBUCKETS        NLOCKS
                     32              11           200

レポートの最初のセクションは、このデータベースのシェアードメモリパーティション のリストで、各パーティションのサイズおよびタイプを表示します。 このデータベースでは、 `mapf1`と名づけられたマップファイルパーティション、 `gbuf1`と名づけられたグローバルバッファパーティション、 `lock1`と名づけられたロックマネージャパーティション の3つのパーティションを持っています。

次の出力は各シェアードメモリパーティションについての情報を表示します。 マップファイルパーティションでは、サイズおよび開始オフセットが表示され、 またいくつかの基本統計情報が表示されます。

`Read hit ratio`フィールドは、 ディスクからではなくマップファイルパーティションからの情報を取得し、 マップファイルへのアクセスのパーセンテージを表示します。 このパーセンテージが低い場合、マップファイルパーティションのサイズを増加するか あるいは、マップファイルの開始オフセットを変更することを考慮する必要があります。

`Read ratio`フィールドは、 読み込みと書き込み操作の合計中の 読み込み操作が行われたパーセンテージを表示します。 ほとんどの操作においてファイルへの書き込みが行われた場合は このパーセンテージは低くなります。

`Read hit ratio`と`Read ratio`は、シェアードメモリの 最適なパフォーマンスを得るために（値を）高くする必要があることに注意してください。

グローバルバッファパーティションは、 パーティションのブロックサイズおよびブロック数が表示されます。

ロックマネージャパーティションのレポートは同時にロックマネージャにアクセスが 可能な最大プロセス数、およびロックマネージャのバケット数、 またこのロックマネージャによって管理できる最大同時ロック数を表示します。

## 9.13 シェアードメモリ統計情報

`"shmstats"` オプションは、シェアードメモリの利用についての 詳細な統計情報を提供します。

       empadm database_name shmstats

`"lockrststats"`オプションは、シェアードメモリー統計情報の累計を リセットするために用います。

       empadm database_name shmrststats

このコマンドの実行した後に、すべてのシェアードメモリファイルとグローバルバッファの 統計情報は、 "0"にリセットせれ、再び情報の蓄積を始めます。

以下は`"shmstats"`オプションのサンプル出力です。

       Database: repairs

       Partition name                                 Size     Type
       mapf1                                         22592     Mapped File
       gbuf1                                        161200     Global Buffers
       lock1                                          4784     Lock Manager

       Mapped File Partition

       Partition name             SIZE   START
       mapf1                     22528       0

               Statistics

               Bytes used: 3072  Reads: 5  Read-nexts: 0 Writes: 1
       Write-nexts: 1

       Global Buffers Partition

       Partition name          BLOCKSIZE       NBLOCKS
       gbuf1                        1024           150

               Statistics

               File name                   DIN    DOUT     PIN    POUT
               cdinator                      4      14      14      35
               0001.rel                      2       0       0      21
               00010004.dtf                  9       0       0      23
               00010001.ix                   3       0       0      24
               0006.rel                      2       0       0       5
               0007.rel                      2       0       0       6

       Lock Manager Partition

       Partition name : lock1

               MAXPROCS        NBUCKETS        NLOCKS
                     32              11           200

               NPROCS  MAXNPROCS       CURNLKS MAXNLKS EFFICIENCY
                    0          0             0       0          -

               # buckets       % of hits

                       -               -

               # hits          # buckets       bucket #
                    0                 11         0,   1,   2,   3,   4,
                                                 5,   6,   7,   8,   9,
                                                10

               Max. chain length       # buckets       bucket #
                               0              11         0,   1,   2,   3,   4,
                                                         5,   6,   7,   8,   9,
                                                        10

`"shminfo"`のレポートとして、 最初のセクションは、データベースのシェアードメモリパーティションのリストと 各パーティションのサイズとタイプを表示します。

マップファイルパーティションのレポートの最初のフィールドは、 実際に使用しているマップファイルのバイト数を示しています。 `Reads`フィールドは、 シェアードメモリパーティション中から 情報を検索することができた 読み込み操作の回数を示しています。 `Read-nexts`フィールドは、ディスクから情報を 検索しなければならなかった読み込み操作の回数を含みます。 シェアードメモリ上にファイルの全部をマップした場合は この数字は常に "0" になります。 ファイルの一部分だけをマップした場合、この数字は ファイルのマップしていない部分がどのように頻繁に利用されたか を反映します。

`Writes`フィールドは、マップファイルバッファへのデータ書き込み 操作の回数を示します。 `Write-nexts`フィールドはディスクへのデータ書き込み操作の回数を 示します。 `Write-nexts`は、 Empressが、ライトスルーキャッシュを使う場合は、 通常`Writes`と同じ値になります。 `MSPARTMAPFNOWRITETHROUGH`変数がセットされた場合、 `Write-nexts`の値は予測ができず、 キャッシュがファイルに書き出されたかどうかを反映します。

グローバルバッファ・パーティションは、各ファイルの統計情報が表示されます。 `DIN` と`DOUT`フィールドは、それぞれ ディスクからバッファへ、またバッファからディスクへと データ転送を要求した操作がどのくらいの数かを示します。 `PIN` と `POUT`は、それぞれ プロセスからバッファへ、またバッファからプロセスへの データ転送の同様な統計情報をレポートします。

`PIN`、`POUT`、`DIN` 、`DOUT` およびグローバルバッファ間の関係は以下のように見えます。

  図 9-1: `PIN`、`POUT`、`DIN` 、`DOUT` およびグローバルバッファ間の関係

ロックマネージャ・パーティションのレポートのフォーマットは、 `empadm database_name lockstats`によって出力した内容と同じです。

## 9.14 シェアードメモリへのテーブルマップ

`"params"`オプションは、 指定されたシェアードメモリパーティションへ データベースファイルをマップします。

       empadm database_name params params_file table_name [table_name ...]

パラメータファイル(`params_file`)は、 `empshm params`コマンドによって作成されます。 `"params"`オプションは、 Empressは、テーブルをロックし、アクセスする際に シェアードメモリパーティションを利用するために テーブルへのパラメータファイルを適用します。

1 つのパラメータファイルは、 テーブル名のリストが指定された場合において シェアードメモリへのいくつかのテーブルを マップするために利用することができます。 1度実行することで、 テーブルへのすべてのアクセスは、パラメータファイルによって指定された 自動的にシェアードメモリへ経由されます。 対話型 SQL インターフェイス内の `DISPLAY table ALL`コマンドは、 シェアードメモリへのマッピングの場所を表示します。

シェアードメモリからテーブルをアンマップする場合は、 そのテーブルに空のファイルをマップする必要があります。 例えば

       empadm repairs params /dev/null loans personnel

`loans`テーブルと`personnel`テーブルをシェアードメモリから アンマップします。

## 9.15 コーディネイター情報

`"coordinfo"`オプションは、 コーディネイターについての情報を提供します。

       empadm database_name coordinfo

レポートは、 作成されているコーディネータがどのような構成であるか、あるいは 現在のオンライン・バックアップの状態、 リカバリーログバージョン番号、 コーディネータに登録されたプロセスの 詳細なプロセス情報ブロックのリストを含んでいます。

以下はデータベース`"movies"`のサンプル出力です。

       Database: movies

       Header
           Max clients    Number of clients
                  1024              1

       On-line Backup Status    Recovery Log
           Inactive
           Recovery Log Version Number = 0

       Process Information Blocks
          User Name   Client ID       Proc ID       Machine ID  Status
              smith    490243111        24669*    127.0.0.1      Inactive

出力の最初のセクションは 最大1024プロセスが、同時にコーディネイターにアクセス可能であり、 また、現在、１プロセスがデータベースにアクセスしていることを 示しています。

次のセクションでは、 誰かがオンラインバックを実行中であり、 そのリカバリーログのバージョンが "0" であることを示しています。

最後のセクションでは、現在、コーディネータにアクセス中のそれぞれのプロセスの情報の リストを表示します。 `User Name`フィールドはカレントプロセスの所有者である オペレーティングシステムのユーザー名を示しています。 `Client ID`フィールドは、 カレントプロセスのEmpress ID を示しています。 `Proc ID`フィールドはこのプロセスのオペレーティングシステムのプロセス IDを 示しています。 `Machine ID`フィールドは、そのプロセスが実行しているマシンの ネットワークアドレスを示しています。 最後に`Status`フィールドは、カレントプロセスのコーディネータでの状態 （コーディネータ・ステイタス）を示しています。

## 9.16 コーディネイター情報のクリア

`"coordclear"`オプションは、 指定されたEmpressプロセスIDに関連したクライアントを コーディネイター情報から削除します。

       empadm database_name coordclear [-f] [empress_id ...]

`"-f"`なしで指定された場合の `"coordclear"`は、 アクティブではないクライアントプロセス（defunctしたプロセス) のみを削除します。 クライアントプロセスID(`empress_id`)が、 指定されない場合、すべての非アクティブクライアント情報は、 コーディネイターから削除されます。

`"-f"`(強制削除)オプションが使われた場合、 すべてのクライアント情報はコーディネイターから削除されます。 データベース整合保証チェックユーティリティ(`empclean`)を実行しているときに クライアント情報がコーディネイターからクリアされた場合、 `"empclean"`は、クライアントは存在しないと仮定して、 クライアントプロセスを削除します。
このオプションを使う場合、注意が必要です。

この途中終了した(defunct)`empress_id`のリストは `empadm database_name coordinfo` コマンドにより 表示することができます。

## 9.17 データ辞書エントリの再コンパイル

処理速度を向上するために、 Empressはテーブルについての すべての情報をコンパイルし、 そのデータをデータ辞書中に格納します。 `"recompile_all"` と `"recompile"` オプションは、 データ辞書エントリの再コンパイルを強制的に行うために使うことができます。

       empadm database_name recompile_all
       empadm database_name recompile [table ...]

`"recompile_all"`オプションは、 データベース内のすべてのテーブルのデータ辞書情報を再コンパイルします。 実行するとコンパイルされたそれぞれのテーブル名が表示されます。

`"recompile"`オプションは、 データ辞書を除く コンパイルされたテーブルのエントリ のデータ辞書情報を再コンパイルします。 テーブルのリストが指定された場合、指定されたテーブルのエントリのみを 再コンパイルします。

## 9.18 データベースの物理位置

`"dblocation"`オプションは、論理データベースの 物理的な位置（パス）を表示します。

       empadm database_name dblocation

データベースがサーバーを通してアクセスされる場合、 `"dblocation"`は、またサーバーが実行されている ホスト名を表示します。

以下にユーザーのホームディレクトリの下にある `"repairs"`データベースを例に挙げます。 ホームディレクトリの物理パス名は`"/home/staff/joe"`であり、 論理名を`"repairs_db"`とする場合、

       empadm repairs_db dblocation

以下を出力します。

       /home/staff/joe/repairs

`"repairs"`データベースが ホスト名`"gold"`のマシン上にあるとした場合、 上記のコマンドの出力は次のとおりです。

       gold:/home/staff/joe/repairs

## 9.19 プロセス制限

`"maxprocs"`オプションは、データベースの最大同時プロセス数を 変更するために使用されます。 このコマンドの構文は以下のとおりです。

|  |  | `empadm database_name maxprocs` | `|licence |license |[N] |keep` | `| [-f] | | |`

`"licence"` または `"license"`が指定された場合、 データベースの最大同時プロセス数はライセンスキーで許可された値 が設定されます。

`empadm database_name maxprocs`が、 `N`数の指定なしに使用された場合、 データベースの最大同時プロセス数は以下の値の最小値が設定されます。

- (`$EMPRESSPATH/config/initfile`ファイルまたは環境変数に定義された) システム変数`MSDBMAXPROCS`の値か、 または
- ライセンスキーによって許可された値

`N`数が指定され、`N`がライセンスキーで許可された プロセス数と同じかそれより小さい場合は、 データベースの最大同時プロセス数は、`N`を設定します。 それ以外の値の場合は`empadm`は、エラーメッセージを出力し、終了します。

プロセス制限が変更した時は必ず、 データ辞書ファイル "tabzero"ファイル中の`MSDBMAXPROCS`の値もまた 現在の値に反映するために変更されます。 `"keep"`オプションは、 データ辞書`tabzero`ファイル中の`MSDBMAXPROCS`の値として データベースの最大同時プロセス数で再設定します。

`"maxprocs"`コマンドが実行された場合、 データベースへの最大同時プロセス数の設定後、 合わせて以下の箇所に影響があります。

- データベース内の`_lock`ディレクトリの下のロックファイルは削除されます。 ロックがファイルロックである場合は、再び自動的にロックファイルは生成されます。
- シェアードメモリパーティションが存在している場合、それらのパーティションは 削除され、再作成されます。
- データベース・コーディネータファイルは削除され、再作成されます。

より大きな`MSDBMAXPROCS`の値は、 コーディネータファイルとロックファイルの最大の値となります。 これは、`MSDBMAXPROCS`のより小さな値との比較おいて パフォーマンスに影響します。 同時ユーザーアクセスが少ないデータベースにおいては より小さいプロセス制限の設定により、パフォーマンスを 向上します。

`empadm database_name maxprocs` コマンドは、 アクティブなプロセスが存在しないときにのみ実行することができます。 `empadm`が、アクティブなプロセスの存在を検出した場合は、 エラーメッセージを出力し、終了します。 `"-f"`オプション(強制実行)が指定された場合、 `empadm`は、警告メッセージを出力し、変更する処理を続けます。 このオプションを使用する場合は注意してください。

## 9.20 データベース管理ヘルプコマンド

`empadm`ユーティリティの `"-help"` オプションは、 有効なすべてのオプションを表示します。 以下に実行例を示します。

       empadm -help

       *** Usage ***  empadm  [オプション] DATABASE コマンド

       オプション:
       -help                     コマンド記述を表示する
       コマンドは以下より１つを指定:
       coordinfo                 コーディネータ情報を表示
       coordclear [-f] [EID ...] コーディネータを削除、EID は Empress ID
       dbamode [on] [-i N|-q]    DATABASE へのアクセスを DBA だけに制限
       dbamode off               DATABASE への DBA だけのアクセス制限を解除
       dblocation                データベースの物理位置を表示
       lockbrief [TBL ...]       ブリーフロック情報を表示
       lockclear [-f] [EID ...]  ロックを削除、EID は Empress ID
       lockinfo  [TBL ...]       ロック情報を表示
       lockmanagers [TBL ...]    ロックマネージャ情報を表示
       lockremove                ロックとロックファイルを削除
       lockrststats              ロック統計のリセット
       locksactive [TBL ...]     アクテイブロックの簡略表示
       lockstats [TBL ...]       ロック情報の詳細表示
       maxprocs [-f]             データベースの最大プロセス数を省略値にセット
       maxprocs licence [-f]     データベースの最大プロセス数をセット
       maxprocs license [-f]     データベースの最大プロセス数をセット
       maxprocs N [-f]           データベースの最大プロセス数を N にセット
       maxprocs keep [-f]        現在の最大値を使用しコーディネータを再作成
       params FILE TBL ...       パラメータファイル FILE を使用してデータベース
                                 ファイルを共有メモリにマップする
       recompile [TBL ...]       システムテーブル内の TBL レコードを再構築
       recompile_all             システムテーブル内の全レコードを再構築
       shmclear                  データベースに対する共有メモリを消去
       shmcreate                 DATABESE の共有メモリセグメントを作成
       shminfo                   共有メモリ情報を表示
       shmrefresh                DATABASE の共有メモリセグメントを再作成
       shmremove                 DATABASE の共有メモリセグメントを削除
       shmrmall                  DATABASE の全共有メモリセグメントを削除
       shmrststats               DATABASE の共有メモリ統計をリセット
       shmstats                  DATABASE の共有メモリ統計を表示
       shmzap                    共有メモリのセグメントと設定を削除
       singlemode [-i N | -q] ["shell_command"]
                                 シングルユーザモードでの DATABASE に対するアクセス
                                 を許可する
       vsize TBL ... [-NNN]       このコマンドは、V8.60 からサポートされません。
                                'alter' コマンドで add/drop checksum を行ってください

       vsize_all [-NNN]          このコマンドは、V8.60 からサポートされません。