トランザクション マネージャー (TM) は、ログのインスタンスです。 KTM では、TM オブジェクトは、ログと TM の機能の一部を指定します。 通常、特定のノードには多くの TM オブジェクトがあります。 リソース マネージャー (VM) は、特定の TM に関連付けられている必要があります。 次の 3 種類の VM があります。
- 揮発性 TM。ログはありません。
- ログを持ち、1 つ以上の VM のトランザクションを調整するために使用される通常の TM。
- 優れたトランザクション マネージャー。
揮発性トランザクション マネージャー
揮発性 TM は、読み取り専用または揮発性の VM の TM です。 ログがないため、システムの再起動後もトランザクションの状態は保持されません。
トランザクション マネージャー
VM には、ログ、1 つ以上の永続的または揮発性の VM、またはその両方があります。 TM は、トランザクションが完了するまで、システムの再起動を通じてトランザクションの状態を保持します。 推定中止モデルが使用されるため、TM オブジェクトのシャットダウン時にアクティブであったが準備されなかったトランザクションはロールバックされます。 TM を初めて開く場合は、RecoverTransactionManager 関数を呼び出して TM を回復する必要があります。
優れたトランザクション マネージャー
優れた TM は、他の TM の TM です。 トランザクションを調整します。 また、カーネル トランザクション マネージャー (KTM) への TRANSACTION_NOTIFY_PREPARE 通知も発行します。 優れた TM の例として、Microsoft 分散トランザクション コーディネーター (DTC) があります。 この機能には、復旧時間の責任が追加されています。 回復中、RM は最初に OpenEnlistment 関数を呼び出して、参加リストを再度開く必要があります。 また、トランザクションがコミットされた場合は、トランザクションの結果を配信 (または再配信) する必要があります。CommitTransaction 関数または RollbackTransaction 関数を呼び出すことによって、結果を提供することは自由です。 この義務は、関連する TRANSACTION_NOTIFY_COMMIT_COMPLETE または TRANSACTION_NOTIFY_ROLLBACK_COMPLETE 通知イベントを受け取るまで終了しません。優れた TM が回復時にこれらの操作を実行できない場合、KTM は回復フェーズの終わりまでに結果を受け取っていないすべてのトランザクションをクリーンアップします。 ただし、その結果、トランザクションの結果が一貫性を失う可能性があります。
トランザクション マネージャー関数
トランザクション マネージャーでは、次の関数が使用されます。
| 機能 | 形容 |
|---|---|
| CreateTransactionManagerの | 新しいトランザクション マネージャー (TM) オブジェクトを作成し、指定したアクセス権を持つハンドルを返します。 |
| GetCurrentClockTransactionManagerの | トランザクション マネージャーから仮想クロック値を取得します。 |
| GetTransactionManagerIdをする | 指定したトランザクション マネージャーの識別子を取得します。 |
| OpenTransactionManager | 既存のトランザクション マネージャーを開きます。 |
| RecoverTransactionManagerの | トランザクション マネージャーの状態をログ ファイルから回復します。 |
| RollforwardTransactionManagerの | トランザクション マネージャーの状態をログ ファイルから指定された仮想クロック値に回復します。 |