トランザクションのロギング
TimesTenでは、トランザクションがロールバックされた場合に更新内容を元に戻すことができるように、データベースごとにトランザクション・ログが保持され、各トランザクション内で行われた更新がすべて追跡されます。
システム障害発生後の最後のチェックポイント処理の時点から書き込まれた、最新のチェックポイント・ファイルと最新のトランザクション・ログの両方を使用して、トランザクションがリカバリされます。
トランザクション・ログ・レコードは、データベースの変更、コミットおよびロールバックごとに作成されます。ただし、読取り専用のトランザクションにトランザクション・ログ・レコードは生成されません。ログ・レコードはまず、データベースと同じ共有メモリー・セグメントに格納されているトランザクション・ログ・バッファに書き込まれます。その後、ログ・バッファの内容は最新のトランザクション・ログ・ファイルにフラッシュされます。
トランザクション・ログは、論理的に順序付けされた一連のトランザクション・ログ・レコードですが、物理的には、1つ以上の一連のトランザクション・ログ・ファイルと、TimesTenデータベース内のインメモリー・ログ・バッファで構成されています。このログは、すべての同時接続によって共有されます。
次の項では、トランザクション・ログ・バッファおよびファイルの構成方法について説明します。
トランザクション・ログのバッファおよびファイルの管理
トランザクション・ログのバッファおよびファイルの構成オプションについて説明します。
-
トランザクション・ログ・バッファ: トランザクション・ログ・バッファはデータベースごとに1つあり、トランザクション・ログ・バッファのサイズはDSN接続属性
LogBufMB
を使用して構成できます。ストランドにより、トランザクション・ログ・バッファの使用可能メモリーがいくつかの異なる領域に分割され、これらの領域には異なる接続によって同時にアクセスできます。トランザクション・ログ・バッファのストランド数は、
LogBufParallelism
接続属性で構成します。その後、各接続は、それぞれに独自のトランザクション・ログ・バッファがあるかのように、これらのストランドを使用してデータに依存しないDML文をパラレルで実行できます。『Oracle TimesTen In-Memory Databaseリファレンス』のLogBufParallelismを参照してください。 -
トランザクション・ログ・ファイル: トランザクション・ログ・ファイルは、
LogDir
接続属性で指定された場所に作成されます。ノート:
LogDir
接続属性はオプションであり、指定されていない場合、トランザクション・ログ・ファイルは、チェックポイント・ファイルと同じディレクトリに作成されます。ただし、TimesTenでは、パフォーマンスを最適にするため、LogDir
接続属性を使用して、トランザクション・ログ・ファイルをチェックポイント・ファイルとは別の物理デバイスに格納することをお薦めします。別の場所に格納することで、チェックポイントのI/O操作とトランザクション・ログに対するI/O操作が相互にブロックすることがなくなります。データベースがすでにRAMにロードされており、データベースのトランザクション・ログ・ファイルとチェックポイント・ファイルが同じ物理デバイス上にある場合、TimesTenはデーモン・ログ・ファイルにメッセージを書き込みます。
『Oracle TimesTen In-Memory Databaseリファレンス』のLogDir、および『Oracle TimesTen In-Memory Databaseモニタリングおよびトラブルシューティング・ガイド』のファイル・システム領域のトランザクション・ログ・ファイル使用の確認を参照してください。
トランザクション・ログ・ファイルの最大サイズは、
LogFileSize
DSN接続属性で構成できます。『Oracle TimesTen In-Memory Databaseリファレンス』のLogFileSizeを参照してください。トランザクション・ログ・ファイル名は、
dsname
.log
n
という形式になっています。dsname
は、DSN接続属性DataStore
によって指定され、データベースのDSN内で示されるデータベース・パス名です。接尾辞のn
は、トランザクション・ログ・ファイル番号で、0から始まります。データベースが作成されると、TimesTenは
dsname
.res0
、dsname
.res1
、dsname
.res2
という名前の予約ファイルを作成します。これらのファイルには、予約済トランザクション・ログ領域として機能する事前割当て済の領域が含まれています。予約済トランザクション・ログ領域によって、トランザクション・ログ・ファイルを保持するファイル・システムが一杯になった場合に、トランザクションのロギングを制限付きで継続できます。トランザクション・ログを含むファイル・システムが一杯になった場合は、データベースによって、新しいトランザクションの開始が許可されません。進行中のトランザクションは、コミットまたはロールバックされるまで、予約ファイルを使用して続行できます。進行中のトランザクションがあり、予約ファイルがすべて消費されると、ログ・ファイルを生成するすべてのデータベース操作がブロックされます。
NFSでマウントされたシステムをチェックポイント・ファイルおよびトランザクション・ログ・ファイル用に使用
NFSでマウントされたファイル・システム上(Linuxプラットフォーム上のみ)に、TimesTenのチェックポイント・ファイルおよびトランザクション・ログ・ファイルを配置できるようにするには、timesten.conf
ファイルでallow_network_files=1
を確認します。allow_network_files=1
構成がデフォルト設定です。
『Oracle TimesTen In-Memory Databaseリファレンス』のTimesTenインスタンスの構成ファイルを参照してください。
トランザクション・ログ・ファイルの蓄積の監視
トランザクション・ログ・ファイルが過度に蓄積されないよう、保持されているトランザクション・ログがないことを頻繁に確認することが重要です。
非常に多くのトランザクション・ログ・ファイルが蓄積され、利用可能なファイル・システム領域がなくなると、トランザクション・ログの保持が進行して、次のチェックポイント処理によってトランザクション・ログ・ファイルがパージされるまで、TimesTenデータベースでは新しいトランザクションを開始できません。
次の項では、トランザクション・ログ操作、ログの保持、ログ・ファイルの蓄積について説明します。
TimesTenのコンポーネントまたは処理によるログの保持
TimesTenのいくつかのコンポーネントまたは処理によって、トランザクション・ログが保持される場合があります。ある時点以降、トランザクション・ログの保持により、ログ・ファイルは不要になるまでパージされなくなります。
標準の場合は、ログの保持の位置は定期的に進行し、ログ・ファイルは適切にパージされます。ただし、処理が正常に動作せず、保持の位置が進まないと、その保持の位置以降にログ・ファイルが過度に蓄積されてパージができなくなり、利用可能なファイル・システム領域がなくなってしまいます。
これらのコンポーネントおよび操作は、次のとおりです。
-
トランザクション・ログ・ファイルにログ・レコードを書き込むトランザクションがコミットされるか、ロールバックされたとき。これは、ローカル・データベース・トランザクションまたはXAトランザクションのいずれでもかまいません。
-
トランザクション・ログ・ファイルに記録された変更が、両方のチェックポイント・ファイルに書き込まれたとき。
-
レプリケーション: 受信側のホストがログ・ファイルを完全に処理したことを送信側のレプリケーション・エージェントが確認するまでトランザクション・ログは保持されます。
次のようなときに、障害状態となることがあります。
-
ネットワークが停止しているか、スタンバイがクラッシュし、1つ以上のサブスクライバにデータを配信できないとき。必要に応じ、ログをこれ以上保持しないようアプリケーションが指示を出し、標準の処理が再開されたらスタンバイにマスター・データベースを複製するようにできます。これの実行の基準は、複製に必要な時間、ログ・ファイルに利用可能なマスター上のファイル・システム領域量、トランザクション・ログの増加率などになります。
-
レプリケーションでアクティブ・データベースおよびスタンバイ・データベースの同期を保つことができないほど、データベース全体のトランザクション率が高くなっているとき。アプリケーションで、アプリケーションのトランザクション率またはレプリケートされる表数を削減できます。
『Oracle TimesTen In-Memory Databaseレプリケーション・ガイド』のレプリケーションのパフォーマンスの向上、および『Oracle TimesTen In-Memory Databaseモニタリングおよびトラブルシューティング・ガイド』のレプリケーションのトラブルシューティングを参照してください。
-
-
XLA: XLAブックマークが進行するまでトランザクション・ログは保持されます。
XLAアプリケーションが予期せず終了したり、そのブックマークが削除されないまま切断されたり、変更トラッキングを無効にせずにブックマークがスタックとなると、障害状態になる場合があります。ブックマークが遅すぎた場合は、アプリケーションで削除できます。XLAリーダー・プロセスがまだアクティブな場合は、別のXLAプロセスが接続しブックマークを削除できるよう、まず終了する必要があります。
-
AWTキャッシュ・グループをレプリケートするアクティブなスタンバイのペア: ログが保持されているトランザクションがOracle Databaseでコミットされたことをレプリケーション・エージェントが確認するまで、トランザクション・ログは保持されます。アクティブ・スタンバイ・ペアでは、通常、アクティブ・データベースがスタンバイ・データベースから確認を受信します。スタンバイ・データベースが停止している場合、レプリケーション・エージェントはOracle Databaseから直接確認を受け取ります。
次のようなときに、障害状態となることがあります。
-
Oracle Databaseが停止またはロックされているか、リソースの競合があります。
-
ネットワークが停止しているか、遅いか、飽和しています。
-
アクティブ・スタンバイ・ペアで、スタンバイ・データベースに対するレプリケーションが遅れています。スタンバイ・データベースでチェック・ログが保持されています。
-
TimesTenがOracle Databaseに継続的に伝播できる最大の率よりもTimesTenへのトランザクション率が高くなっています。
『Oracle TimesTen In-Memory Databaseキャッシュ・ガイド』のAWTキャッシュ・グループの監視、および『Oracle TimesTen In-Memory Databaseモニタリングおよびトラブルシューティング・ガイド』のAWTキャッシュ・グループのトラブルシューティングを参照してください。
-
-
AUTOREFRESH
が構成されたキャッシュ・グループ: アクティブ・データベースのレプリケーション・エージェントが、ログ・ファイルがスタンバイ・データベースによって正常に処理されたことを確認するまで、トランザクション・ログは保持されます。次のようなときに、障害状態となることがあります。
-
AUTOREFRESH
モードの結果による大量のワークロードにより、アクティブ・データベースからスタンバイ・データベースへのレプリケーションでスタンバイ・データベースに遅れが生じています。 -
停止またはリカバリ中のスタンバイ・データベースが、ユーザー・アプリケーションまたはOracle Clusterwareから開始される
ttRepStateSave
組込みプロシージャへのコールを介してFAILED
とマークされていません。アクティブ・データベースは、スタンバイ・データベースの状態がFAILED
とマークされるまで、Oracle Databaseへの伝播を引き継ぎません。スタンバイ・データベースが停止またはリカバリ中の場合、トランザクション・ログ・ファイルはOracle Databaseのために保持されます。
『Oracle TimesTen In-Memory Databaseモニタリングおよびトラブルシューティング・ガイド』の自動リフレッシュを使用したキャッシュ・グループの監視を参照してください。
-
-
TimesTenの増分バックアップ: 増分バックアップを手動で実行するまで、およびそのバックアップが完了するまでログは保持されます。
障害が発生する可能性が高いのは、増分バックアップ(ログ・ファイルを保持しているTimesTenを起動する)を構成しているが、実際には増分バックアップを実行していないため、ログ・ファイルの保持が解放される場合です。
その他には、トランザクション・ログの最新のエントリに対して、増分バックアップが大きく遅れるとき、障害が発生することがあります。たとえば、トランザクション・アクティビティが予期せずに激増した場合、バックアップが非常に古いログ・ファイルを保持しているために、利用可能なトランザクション・ログ用のファイル・システム領域が一杯にならないようにする必要があります。この問題を解決するには、アプリケーションで再度増分バックアップを実行します。
-
長時間実行のトランザクションまたはXAトランザクション: トランザクションがコミットまたはロールバックされるまで、トランザクション・ログは保持されます。
アプリケーション・トランザクションが長時間コミットまたはロールバックされず、アプリケーションが長時間実行のトランザクションを終了しなければならない場合、障害状態になる場合があります。
または、
ttXactAdmin
ユーティリティを-xactIdRollback
オプションを使用して実行すると、トランザクションをロールバックできます。『Oracle TimesTen In-Memory Databaseリファレンス』のttXactAdminを参照してください。 -
最も古いトランザクションを元に戻す: まだコミットまたはロールバックされていない各トランザクションはログを保持しています。この保持は、トランザクションの最初(最も古い)のログ・レコードから開始され、チェックポイント・ログ・パージ処理が通過できないトランザクションのポイントがマークされます。このログ保持情報は、
SYS.GV$CKPT_HISTORY
またはSYS.V$CKPT_HISTORY
システム・ビュー、あるいはttCkptHistory
組込みプロシージャの出力から取得できます。
トランザクション・ログ・ファイルのパージ
いずれのトランザクション・ログ・ファイルも、TimesTenによってパージ可能と判断されるまで保持されます。標準のTimesTenの処理では、不要なトランザクション・ログ・ファイルはチェックポイントが開始されるたびにパージされます。
チェックポイント処理は、CkptFrequency
接続属性を使用して構成可能な時間間隔で開始することも、CkptLogVolume
接続属性を使用して構成可能なログ・ボリュームで開始することもできます。TimesTen Classicでは、ttCkpt
組込み関数を使用して、チェックポイント処理(手動またはバックグラウンドのチェックポイント・アプリケーション・スレッドを使用)を開始することもできます。
ログ・ファイルの累積のためにファイル・システム領域がなくなっている場合は、CkptFrequency
接続属性のかわりにCkptLogVolume
接続属性を使用します。また、SYS.GV$LOG_HOLDS
またはSYS.V$LOG_HOLDS
システム・ビューから頻繁に選択する場合や、ttLogHolds
組込みプロシージャを頻繁にコールする場合は、再利用をブロックするかどうかを指定できます。
ノート:
パフォーマンスを向上させるために、チェックポイント・ファイルがある物理デバイスとは別の物理デバイスにログ・ファイルを配置します。「トランザクション・ログのバッファおよびファイルの管理」を参照してください。
チェックポイント処理に関する一般情報は、『Oracle TimesTen In-Memory Databaseイントロダクション』のチェックポイント処理を参照してください。CkptFrequency
接続属性およびCkptLogVolume
接続属性の詳細は、「バックグラウンドのチェックポイント処理の構成または無効化」を参照してください。
ログの保持の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス』のSYS.GV$LOG_HOLDSまたはSYS.V$LOG_HOLDS、または『Oracle TimesTen In-Memory Databaseリファレンス』のttLogHoldsを参照してください。
『Oracle TimesTen In-Memory Databaseリファレンス』のCkptFrequency、CkptLogVolumeおよびttCkptを参照してください。
ログの保持とログ・ファイルの蓄積の監視
トランザクション・ログが過度に蓄積されていないか定期的に監視するためのオプションについて説明します。
-
すべてのログの保持の詳細は、
SYS.GV$LOG_HOLDS
またはSYS.V$LOG_HOLDS
システム・ビューから選択するか、ttLogHolds
組込みプロシージャをコールします。該当する場合、この情報は次になります。-
ログ・ファイルの番号、保持されている位置のオフセット、およびチェックポイント、レプリケーション、バックアップ、XLA、長時間実行のトランザクションまたは長時間実行のXAトランザクションの種類の保持
-
チェックポイントによる保持の場合のチェックポイント・ファイル名
-
サブスクライバ名およびレプリケーションで使用するパラレル・トラックID
-
バックアップによる保持の場合のバックアップ・パス
-
永続サブスクリプション名およびXLA用にオープンする最後のプロセスのプロセスID
-
長時間実行のトランザクションのトランザクションID
-
長時間実行のXAトランザクションのXA XID
『Oracle TimesTen In-Memory Database SQLリファレンス』のSYS.GV$LOG_HOLDSまたはSYS.V$LOG_HOLDS、または『Oracle TimesTen In-Memory Databaseリファレンス』のttLogHoldsを参照してください。
-
-
SYS.GV$CKPT_HISTORY
またはSYS.V$CKPT_HISTORY
システム・ビューから選択するか、ttCkptHistory
組込みプロシージャをコールして最後の複数のチェックポイントを確認し、返されたすべての行のステータスがFAILED
でないことを確認します。『Oracle TimesTen In-Memory Database SQLリファレンス』のSYS.GV$CKPT_HISTORYまたはSYS.V$CKPT_HISTORY、または『Oracle TimesTen In-Memory Databaseリファレンス』のttCkptHistoryを参照してください。
-
操作メトリックについては、
SYS.SYSTEMSTATS
表を確認してください。各トランザクション・ログ・ファイルには、一意の順序番号があります(最初のログ・ファイルが0で開始し、以降の各ログ・ファイルは1ずつ増分します)。現在のログ・ファイルの番号は、SYS.SYSTEMSTATS.log.file.latest
にあります。まだ消去されていない一番古いログ・ファイルの番号は、SYS.SYSTEMSTATS.log.file.earliest
にあります。順序番号の差が不適切しきい値を超過した場合、エラーまたは警告が発生するようにします。『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』のSYS.SYSTEMSTATSを参照してください。
-
XLAについては、ブックマークがスタックまたは遅行している原因の診断の助けとなる、接続されているアプリケーションのプロセスIDなどのブックマークの情報が記載されている
SYS.TRANSACTION_LOG_API
表を確認してください。『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』のSYS.TRANSACTION_LOG_APIを参照してください。