セーブポイントは、データベースシステムが ONLINE 操作状態のとき、および再起動したときに自動的に実行されます。セーブポイントでは、最後のセーブポイント以降に実行されたデータ変更が、データベースシステムによってデータキャッシュ (ワークメモリ) からデータ領域 (永続記憶域) に書き込まれます。
セーブポイントでデータ領域に書き込まれたデータは、常にデータベースの整合性のある状態を表しています。これにより、たとえば停電の後などに、ログバックアップをインポートすることなく、いつでもデータベースインスタンスを整合性のある状態で起動することができます。
セーブポイントでは、前回のセーブポイントで書き込まれたデータ領域のページは上書きされません。変更されたデータは、空いている場所に書き込まれます。これは、新しいセーブポイントの実行中にシステムが停止した場合、データベースシステムを再起動するときに前回のセーブポイントの情報が必要になるためです。
新しいセーブポイントの処理が正常に完了した後で初めて、データベースシステムによってデータ領域内の古いセーブポイントのページがリリースされて、上書き可能になります。
セーブポイントは、以下の状況でデータベースシステムによって実行されます。
● 最後のセーブポイント以降の REDO ログエントリによって、データベースシステムのログ領域の 2/3 が使用された場合に実行されます。
● 最後のセーブポイント以降、データベースシステムで 5000 回のログ I/O 操作が実行され、サポートデータベースパラメータ_RESTART_TIME に定義されている以上の時間が経過した場合に実行されます。
_RESTART_TIME の値を増やすと、セーブポイントの数を減らして、ワークロードを減らすことができますが、システム停止後の再起動が遅くなります。
● 起動やデータバックアップなどの、さまざまなデータベースアクティビティにおいて、暗黙的にセーブポイントがリクエストされます。すべてのセーブポイントおよびそれによってトリガされたアクションは、データベースシステムによってカーネルログに記録されます。
セーブポイントは、データベースシステムによってサーバタスク (セーブポイントコーディネータ) を使用して制御されます。この処理は、以下のように実行されます。
...
1. すべての変更された永続データページが、データキャッシュからデータ領域に書き込まれます。
2. システムは、セーブポイントと同期する必要があるすべての操作、たとえば B* ツリーへのデータレコードの挿入などが終了するまで待機します。このタイプの操作を新しく行うことは、データベースシステムによって許可されません。
3. システムでは、すべてのトランザクションの開始および終了が許可されません。
4. 通常のデータベース操作中のセーブポイントの場合:
REDO ログエントリが書き込まれます。これは、後でこのセーブポイントのデータを使用して再起動を行う場合に、どの時点からのログエントリをインポートする必要があるかを示します。
再起動中のセーブポイントの場合:
ログリーダの現在位置が特定されて、再起動情報に入力されます。
5. 未完了のトランザクションについての情報がデータページに保存されます。再起動中にトランザクションを再実行またはロールバックするときに、この情報を使用することができます。
6. 履歴情報が、データキャッシュにインポートされます。
7. ステップ 1 以降データキャッシュ内で変更されたすべての永続データページがマークされます。
8. ステップ 2 および 3 に一覧表示されているすべての操作が許可されます。
この時点以降にデータベースユーザが行う変更は、ステップ 7 でマークされたデータに影響を与えません。これらの変更は、現在のセーブポイント完了後は、データ領域にのみ書き込まれます。
9. ステップ 7 でマークされたデータページが、データ領域に書き込まれます。この内容には、COMMIT で完了した変更以外に、再起動時にシステムで必要となる未完了のトランザクションの UNDO ログファイルも含まれています。
10. 内部ファイルディレクトリのすべての変更されたページが、データ領域に書き込まれます。
11. すべての変更されたコンバータページが、データ領域に書き込まれます。
12. 再起動情報が更新されます。再起動情報には、特に、セーブポイントバージョン (= コンバータバージョン) が含まれています。
これで実際のセーブポイント処理が完了しました。
13. データ領域内の、必要のなくなったすべてのページがリリースされて上書き可能になります。
14. セーブポイントをリクエストまたは待機していたタスクが再開されます。
セーブポイントが、OFFLINE 操作状態への切替中にトリガされた場合は、データベースカーネルが停止されます。
参照:
データベースマネージャ CLI、db_restartinfo