永続性の設定
Durability
属性を使用します。この属性は、トランザクションが永続コミットの準備ログ・レコードを作成するかどうかを定義します。この属性の設定にかかわらず、DDL文を含むトランザクションは永続コミットの準備ログ・レコードをコミットします。Durability
属性では、次の2つの値がサポートされます。
Durabilityを1に設定した場合
Durability
属性を1
に設定すると、参加者が分散トランザクションの永続コミットの準備ログ・レコードおよび非永続コミット・ログ・レコードを書き込みます。Durability
属性を1
に設定すると、コミットされたトランザクションが失敗した場合にリカバリ可能になります。これは、K-safetyが1
に設定されている場合のDurability
属性のデフォルト設定です。
Durability
属性の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のDurabilityを参照してください。
Durabilityを0に設定した場合
Durability
属性を0
に設定すると、参加者が分散トランザクションの非永続コミットの準備ログ・レコードおよびコミット・ログ・レコードを書き込みます。永続性を確保するために、TimesTen Scaleoutには、通常、Durability
属性が0
に設定されているデータベース専用の次の新機能が用意されています。
エポック・トランザクション
エポック・トランザクションは、データベースのすべての要素間でグローバルに一貫性のあるポイントをマークする永続コミット・ログ・レコードを作成する分散トランザクションです。エポック・トランザクションは、データベースのすべての要素に永続的にコミットされます。エポック・トランザクションにより、エポック・トランザクションのタイムスタンプまでデータベースに一貫性があることが確認されます。つまり、エポック・トランザクションによって、すでにコミット・フェーズにあるトランザクションがリカバリ可能となります。
ノート:
TimesTen Scaleoutでは、Lamportタイムスタンプを使用して、データベースの別の要素でコミットするトランザクションの部分的な順序付けを提供します。各要素には、特に、準備とコミットの操作によって更新されるLamportタイムスタンプが含まれています。トランザクション・マネージャは、コミットされたすべてのトランザクションのLamportタイムスタンプをログに記録します。
TimesTen Scaleoutは、障害が発生した要素を含むレプリカ・セットが関与するトランザクションの、永続コミットの準備ログ・レコードを、障害が発生した要素がリカバリされるまで書き込むため、K-safetyが2
(以上)に設定されているグリッドと、Durability
属性が0
に設定されているデータベースでのトランザクションは、通常の条件下では永続的です。レプリカ・セットの両方の要素で同時に障害が発生した場合にのみ、トランザクションが非永続になります。ただし、TimesTen Scaleoutでは、トランザクションをエポック・トランザクションに昇格できます。エポック・トランザクションのエポック・コミット・ログ・レコードでマークされた一貫性のある時点にデータベースをリカバリできるため、エポック・トランザクションとその前にコミットされたすべてのトランザクションには、重大な障害に対するより高いリジリエンスがあります。
ノート:
-
レプリカ・セット内の障害が発生した要素をリカバリする方法の詳細は、「要素が停止した後のレプリカ・セットのリカバリ」を参照してください。
-
障害が発生したレプリカ・セットをリカバリする方法の詳細は、「停止しているレプリカ・セットからのリカバリ」を参照してください。
トランザクションを昇格する前に、エポック・トランザクションは、コミットの準備およびコミット・フェーズの永続ログ・レコードを作成し、トランザクションのエポック・トランザクションへの昇格の前には参加者ではなかったものを含むデータベースのすべての要素が関連するため、エポック・トランザクションのコミットは通常のトランザクションのコミットよりも負荷が高いことを考慮してください。
次の組込みプロシージャおよびシステム・ビューを使用して、エポック・トランザクションを昇格および管理します。
-
ttEpochCreate
組込みプロシージャは、読取り専用トランザクションを含むトランザクションをエポック・トランザクションに昇格します。 -
ttDurableCommit
組込みプロシージャは、書込みトランザクションをエポック・トランザクションに昇格します。 -
SYS.V$EPOCH_SESSION
システム・ビューには、接続が最後から2番目のチェックポイント処理以降に作成された最新のエポック・トランザクションのLamportタイムスタンプが格納されます。
次の例では、エポック・トランザクションへの書込みトランザクションの昇格を示し、検証します。
Command> autocommit OFF;
Command> INSERT INTO transactions VALUES (txn_seq.NEXTVAL, 189, SYSDATE, NULL, 'A', 5.49);
Command> SELECT epoch FROM sys.v$epoch_session;
< 1023.1 >
1 row found.
Command> CALL ttEpochCreate();
Command> COMMIT;
Command> SELECT epoch FROM sys.v$epoch_session;
< 1024.1 >
1 row found.
ttEpochCreate
またはttDurableCommit
組込みプロシージャの詳細は、それぞれ『Oracle TimesTen In-Memory Databaseリファレンス』のttEpochCreateまたはttDurableCommitを参照してください。
SYS.V$EPOCH_SESSION
システム・ビューの詳細は、『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』のSYS.V$EPOCH_SESSIONを参照してください。
EpochInterval属性
各エポック・コミット・ログ・レコードは、各要素の特定のチェックポイント・ファイルに関連付けられます。要素に予期しない障害が発生した場合、リカバリ・プロセスでは、最新のエポック・コミット・ログ・レコードに関連付けられている各要素のチェックポイント・ファイルを使用する必要があります。このチェックポイントは、必ずしもその要素の最新のチェックポイントではありません。
最初の接続属性EpochInterval
を使用して、指定された間隔で定期エポック・トランザクションを生成するようにデータベースを構成できます。すべてのチェックポイント処理を実行するエポック・トランザクションが少なくとも1つはあるように、EpochInterval
属性に設定された値は、最初の接続属性CkptFrequency
に設定されている値の半分未満である必要があります。CkptFrequency
属性を0より大きい値に設定し、EpochInterval
属性をCkptFrequency
属性に設定された値の半分よりも大きい値に設定すると、TimesTen Scaleoutは、EpochInterval
属性をCkptFrequency
属性に設定された値の半分に再調整します。
EpochInterval
またはCkptFrequency
属性の詳細は、それぞれ『Oracle TimesTen In-Memory Databaseリファレンス』のEpochIntervalまたはCkptFrequencyを参照してください。
CreateEpochAtCommit属性
CreateEpochAtCommit
一般接続属性を使用して、エポック・トランザクションへの接続によってコミットされたすべての書込みトランザクションを昇格するように接続を構成できます。CreateEpochAtCommit
属性を1
に設定すると、接続時にコミットするすべてのトランザクションが、障害が発生した場合にリカバリ可能になります。ただし、エポック・トランザクションと同様に、コミット操作は、通常のトランザクションよりも負荷が高いため、重要な操作のみにCreateEpochAtCommit=1
を限定することをお薦めします。
ノート:
DurableCommits
属性はTimesTen Classicのデータベースを対象としていますが、この属性は、TimesTen Scaleoutのデータベースで1
に設定されている場合、CreateEpochAtCommit
属性の動作をエミュレートします。『Oracle TimesTen In-Memory Databaseリファレンス』のDurableCommitsを参照してください。
表6-1に示すように、Durability
属性が0
に設定されている場合、トランザクション・マネージャと参加者は、CreateEpochAtCommit
属性の設定によって動作が異なります。
表6-1 CreateEpochAtCommitの設定に基づくコミットでの参加者の動作
CreateEpochAtCommit | コミット動作 |
---|---|
|
参加者は、分散トランザクションの非永続コミットの準備およびコミット・ログ・レコードを書き込みます。 |
|
すべてのトランザクションがエポック・トランザクションに昇格します。 |
Durability
およびCreateEpochAtCommit
属性の両方を0
に設定すると、最高のパフォーマンスが得られます。この場合は、ttEpochCreate
またはttDurableCommit
組込みプロシージャを呼び出して、重要なトランザクションの永続レコードがあることを確認します。
Durability
またはCreateEpochAtCommit
属性の詳細は、それぞれ『Oracle TimesTen In-Memory Databaseリファレンス』のDurabilityまたはCreateEpochAtCommitを参照してください。ttEpochCreate
またはttDurableCommit
組込みプロシージャの詳細は、それぞれ『Oracle TimesTen In-Memory Databaseリファレンス』のttEpochCreateまたはttDurableCommitを参照してください。