バッファの同期化の例 

以下の例では、システムのローカルバッファの同期方法について示します。サーバ 1 および サーバ 2 という名前の 2 つのアプリケーションサーバから構成されるシステムを前提とします。

初期状況 : どちらのサーバもフルバッファリングされたテーブル TAB のレコードにまだアクセスしていません。両方のサーバのローカルバッファには、テーブルのレコードがまだ格納されていません。

最初のイベント : サーバ 1 により、データベースのテーブル TAB からレコードを読み込みます。

2 番目のイベント : テーブル TAB がサーバ 1 のローカルバッファに全部ロードされます。サーバ 1 によりテーブル TAB のデータにアクセスすると、このサーバのローカルバッファが使用されるようになります。

3 番目のイベント : サーバ 2 がテーブルのレコードをアクセスします。この段階でサーバ 2 のローカルバッファにはテーブルは格納されていないので、レコードはデータベースから直接読み込まれます。

4 番目のイベント : テーブル TAB がサーバ 2 のローカルバッファに全部ロードされます。サーバ 2 は、次回の読込時にローカルバッファを使用して TAB のデータにアクセスします。

5 番目のイベント: サーバ 1 がテーブル TAB からレコードを削除し、データベースを更新します。

6 番目のイベント サーバ 1 が同期化テーブルにエントリを書き込みます。

7 番目のイベント : サーバ 1 がローカルバッファを更新します。

8 番目のイベント 削除されたデータレコードにサーバ 2 がアクセスします。テーブル TAB はサーバ 2 のローカルバッファ内にあるので、アクセスはこのローカルバッファを介して行なわれます。

つまり、この段階でレコードはデータベーステーブルから削除されていますが、サーバ 2 はバッファ内にレコードを見つけることができます。

サーバ 1 でアプリケーションプログラムから同じアクセスを実行した場合は、このプログラムはこのレコードが存在しないことを認識します。したがって、この場合のアプリケーションプログラムの動作は、そのプログラムが実行されているサーバに依存します。

9 番目のイベント ここで同期化が行なわれます。両方のサーバは同期化テーブルをチェックして、いずれかのローカルバッファ内のテーブルが一定の間に変更されたかどうか調べます。

10 番目のイベント : サーバ 2 がテーブル TAB が一定の間にサーバ 1 により変更されたことを見つけます。したがって、サーバ 2 はそのローカルバッファに格納されているテーブルを無効化します。次にサーバ 2 がテーブル TAB のデータにアクセスするときはデータベースが使用されます。サーバ 1 では、テーブル TAB を変更したのでそのバッファのテーブルを無効化する必要はありません。したがって、サーバ 1 では、次回にテーブル TAB のレコードにアクセスするときはそのローカルバッファが使用されます。

11 番目のイベント : サーバ 2 がテーブル TAB のレコードに再度アクセスします。 TAB がサーバ 2 のローカルバッファで無効化されたので、データベースにアクセスが行われます。

12 番目のイベント: 再びサーバ 2 のローカルバッファにテーブルがロードされます。これでテーブル TAB に関する情報は、両方のサーバとデータベースとで一致します。