レプリケートされたデータベースのトランザクション・ログの管理

レプリケートされたデータベースのトランザクション・ログを管理できます。

この項の内容は次のとおりです。

ログ・バッファのフラッシュについて

専用のサブデーモン・スレッドはログ・バッファの内容を定期的にファイル・システムに書き込みます。これらの書込み操作は、同期化またはバッファリングできます。

サブデーモン・スレッドは、ログ・バッファに同期化することなく、システムI/OバッファがLogFileSize初期接続属性の値を超えるトランザクション・ログ・データで一杯にならないようにします。

データベースがLogFlushMethod=2で構成されている場合、ファイル・システムに対する書込み操作はすべて同期書込み操作になり、書込みコールが返される前にデータがファイル・システムに永続的に書き込まれます。データベースがLogFlushMethod=1で構成されている場合には、アプリケーションから同期書込み操作の特定のリクエストがないかぎり、書込み操作はバッファリングされます。

定期的な書込み操作に加えて、アプリケーションはサブデーモン・スレッドをトリガーして、バッファの内容をファイル・システムに書き込むこともできます。次に、アプリケーションがファイル・システムへの同期書込み操作をトリガーする場合を示します。

  • 永続コミットをリクエストしたトランザクションがコミットされた場合。ttDurableCommit組込みプロシージャをコールするか、DurableCommits接続属性を1に設定することによって、トランザクションは永続コミットをリクエストできます。

  • レプリケーション・エージェントがサブスクライバにトランザクションのバッチを送信する際に、マスターがレプリケーションに対してTRANSMIT DURABLE属性(デフォルト)で構成されている場合。

  • マスター・データベースがTRANSMIT DURABLEで構成されているかどうかに関係なく、レプリケーション・エージェントが定期的に永続コミットを実行する場合。

また、永続コミットが戻りサービス失敗ポリシーの一部として構成されており、障害が発生した場合にも、トランザクションは永続的にファイル・システムに書き込まれます。

前述の場合、ログ・バッファのサイズは、TimesTenによるファイル・システムへのデータの書込みに影響しません。

マスター・データベースでのトランザクション・ログの増大について

レプリケーションを使用しないデータベースでは、トランザクション・ログAPI (XLA)、キャッシュ・グループまたは増分バックアップ、ログ・バッファ内の不要なレコード、および不要なトランザクション・ログ・ファイルは、チェックポイントが開始されるたびにパージされます。

不要なトランザクション・ログ・ファイルは、自動バックグラウンド・チェックポイント処理スレッドによって、またはアプリケーションでのttCkptまたはttCkptBlocking組込みプロシージャのコールによってパージされます。

レプリケート・データベースでは、トランザクションがサブスクライバで完全に処理されたことをマスター・レプリケーション・エージェントが確認するまで、トランザクションはログ・バッファおよびトランザクション・ログ・ファイルに保持されます。マスターは、これを確認した時点でのみ、ログ・バッファおよびトランザクション・ログ・ファイルからのパージが必要であると認識します。

サブスクライバの状態が変わると、マスター・データベースのトランザクション・ログが、レプリケートされていないデータベースのログより大幅に大きくなる可能性があります。サブスクライバがstart状態の場合、マスターはサブスクライバからの情報の受信確認を受信した後、ログされているデータをパージできます。ただし、サブスクライバが使用不能またはpause状態になると、マスター・データベースのログはフラッシュできず、ログに使用する領域が使い果たされる可能性があります。ログ領域を使い果たすと、マスター・データベースでの後続の更新が強制終了されます。SYS.GV$LOG_HOLDSまたはSYS.V$LOG_HOLDSシステム・ビューから選択するか、ttLogHolds組込みプロシージャをコールして、レプリケーション・ログの保持に関する情報を取得します。

ノート:

『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』トランザクション・ログ・ファイルの蓄積の監視を参照してください。

このマニュアル内の「レプリケーション・ログ保持によるレプリケーションの監視」『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』SYS.GV$LOG_HOLDSまたはSYS.V$LOG_HOLDS、あるいは『Oracle TimesTen In-Memory Databaseリファレンス』ttLogHoldsを参照してください。

ロギング用の接続属性の設定

LogBufMBでは、インメモリー・ログ・バッファの最大サイズを指定します(MB単位)。このバッファは、一杯になると、トランザクション・ログ・ファイルにフラッシュされます。

LogBufMBの最小サイズは、LogBufParallelismの値の8倍です。

トランザクション・ログ・ファイルのために十分な領域を確保する必要があります。ログで使用される領域の量を管理する場合、次の2つの設定があります。

  • DSNのLogFileSize設定では、トランザクション・ログ・ファイルの最大サイズを指定します。ロギング要件がこの値を超えると、同じ最大サイズを持つ追加のトランザクション・ログ・ファイルが作成されます。最適なパフォーマンスを実現するには、LogBufMBおよびLogFileSizeを最大値に設定します。

  • ログの障害しきい値の設定では、マスターがサブスクライバで障害が発生したと想定するまでに累積できるトランザクション・ログ・ファイルの最大数を指定します。このしきい値は、最後に書き込まれたトランザクション・ログ・ファイルと、サブスクライバ用に最初に保存されたトランザクション・ログ・ファイルの間のトランザクション・ログ・ファイルの数です。たとえば、すべてのサブスクライバが受信に成功した最後のレコードがログ・ファイル1にあり、ファイル・システムに書き込まれた最後のログ・レコードがログ・ファイル4の先頭にある場合は、2つ以上のトランザクション・ログ・ファイル(ログ・ファイル2および3の内容)がレプリケートされていません。しきい値が2の場合、マスターは、しきい値を超えたことを検出した後にサブスクライバをfailed状態に設定します。これには10秒かかる場合があります。「トランザクション・ログ障害しきい値の設定」を参照してください。

トランザクションはファイル・システムに記録されるため、ブックマークを使用して、サブスクライバにレプリケートされた更新レコードおよびファイル・システムに書き込まれた更新レコードのログ・レコード識別子を検出できます。masterDSNに関連付けられているサブスクライバのブックマークの位置を表示するには、ttBookmark組込みプロシージャを使用します(「レプリケートされたログ・レコードの表示」を参照)。

サブスクライバが停止して、しきい値に達する前に再起動した場合、ブックマークの後に続くトランザクション・ログ・ファイル内のコミット済トランザクションが自動的に送信されるため、レプリケーションは自動的にキャッチアップします。ただし、しきい値を超えると、マスターはサブスクライバをfailed状態に設定します。障害が発生したサブスクライバは、ttRepAdmin -duplicateを使用してマスター・データベースをコピーし、処理を最初から再実行します(データベースのフェイルオーバーおよびリカバリの管理を参照)。

『Oracle TimesTen In-Memory Databaseリファレンス』接続属性を参照してください。