データ・ストアの排他的アクセス
メッセージング・エンジンは、 データ・ストア内部に保管されるデータに排他的にアクセスできるように、 データ・ストアにロックを確立します。この処理によってデータ・ストア内のデータの完全性が確保されます。 実際には、いくつかの要因が排他的アクセス・ロックに影響することに注意してください。
各メッセージング・エンジンは、 そのデータ・ストアで 排他ロックを確立します。実行されている間、メッセージング・エンジンは そのロックを維持して データ・ストア内のデータの完全性 を確保します。
データ・ストア・ロックはデータベース・ロックを使用するため、データ・ストア自体の組み込み部になっています。リレーショナル・データベース管理システム (RDBMS) は、メッセージング・エンジンまたは アプリケーション・サーバーの障害を示すために、JDBC インフラストラクチャーあるいは基盤となる TCP/IP プロトコルに 依存しています。それにより、RDBMS はデータベース内のデータ・ストア・ロック を自動的に解除することができます。
メッセージング・エンジンとそのデータ・ストア 用のデータベース・サーバーとの間のネットワーク接続の活性検査の頻度は、 クラスター内で稼働しているメッセージング・エンジンの 迅速なフェイルオーバーを可能にする上で重要な要因です。クラスター内で稼働するメッセージング・エンジンを複数のサーバー間で フェイルオーバーするように構成する場合、メッセージング・エンジンの障害を検出できるようになるまでの時間を最小限に抑えるためにデータベース・サーバー上の TCP/IP キープアライブ・パラメーターを小さくすることが必要となる場合があります。
データ・ストアの SIBOWNER テーブルは、単一行に固有 ID の対としてロックを保持します。これを開始すると、 メッセージング・エンジンは これらの 2 つの ID を使用して、その排他ロックを獲得および維持します。
- MEUUID
- メッセージング・エンジンの固有 ID であり、 メッセージング・エンジンが 停止および再始動する際に常に同じ値に維持されます。
- INCUUID
- メッセージング・エンジンのインカーネーション ID で、 メッセージング・エンジンが開始するたびに変更されます。
これらの ID によって、データ・ストアを使用するメッセージング・エンジンが決定されます。 またこれらの ID は、メッセージング・エンジンの実行インスタンスが、それが実行されていた期間に、その排他ロックを維持していたかどうかについても判別します。
データ・ストア・ロック・プロセスで使用するもう 1 つのテーブルは、SIBOWNERO テーブルです。 このテーブルは、ロックのためにのみ使用され、その 1 つの EMPTY_COLUMN カラムにはデータは保管されていません。
メッセージング・エンジンは、開 始されると、まず、SIBOWNERO テーブルの 排他テーブル・ロックを獲得します。次に、メッセージング・エンジンは、SIBOWNER テーブルの排他テーブル・ロックを獲得して、内容の検査に進みます。メッセージング・エンジンは、 テーブル内に単一行のデータがあること、またはデータがないことを予期します。既存の行がある場合 、メッセージング・エンジンは、 見つけた MEUUID がその独自の固有 ID に一致する場 合にのみ開始されます。MEUUID が一致しない場合は 、メッセージング・エンジンはエラー・メッセージ 「CWSIS1535」をサーバーのエラー・ログに書き込み、メッセージング・エンジンは開始しません。
SIBOWNER テーブルに行がない場合は、メッセージング・エンジンはその独自の MEUUID および INCUUID を含む 1 つの行を挿入します。テーブル内に単一行があり、かつ、MEUUID がメッセージング・エンジンの 固有 ID と一致する場合、メッセージング・エンジンは、独自のインカーネーション ID を用いて INCUUID を更新し、 SIBOWNER テーブルの新しい共有テーブル・ロックを獲得しようとします。 メッセージング・エンジンは、別のサーバー上で同じメッセージング・エンジンの別のインスタンスが同時に開始している場合には、INCUUID がその独自のインカーネーション ID に変わらず一致しているか再度確認します。テーブルの INCUUID が一致していない場合は、メッセージング・エンジンは開始しません。
メッセージング・エンジンが 停止するまで SIBOWNER テーブルの共有テーブル・ロックはそのまま維持され、ロックが有効のままであるように定期的にリフレッシュが行われます。 その後、SIBOWNERO テーブルの排他テーブル・ロックはリリースされます。 メッセージング・エンジンが、SIBOWNER テーブルのロックをリフレッシュできない場合、または別のメッセージング・エンジン・インカーネーション がデータ・ストアを使用していることを SIBOWNER テーブルのデータで発見した場合は、 メッセージング・エンジンはメッセージ「CWSIS1594」と「CWSIS1519」をサーバーのエラー・ログに書き込 み、メッセージング・エンジンは直ちに停止します。
場合によっては、メッセージング・エンジン がクラスター内で稼働するように構成されている際に、 メッセージング・エンジンがロックを取得できない場合、 メッセージング・エンジンは停止し、クラスター内の別のサーバーにフェイルオーバーできないようにすることもあります。 このような場合は、エラー・ログを確認する必要があります。メッセージング・エンジンの停止は、 現行のデータ・ストア構成を使用して開始することが危険または不可能であることを示しているためです。障害が起こり得る状況および考えられるソリューションの説明については、データ・ストアの排他的アクセス・ロックに関する問題の診断を参照してください。