
以下の例では、システムのローカルバッファの同期方法について示します。サーバ
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 に関する情報は、両方のサーバとデータベースとで一致します。