トランザクションの基礎Transaction Fundamentals

トランザクションとは、複数のタスクを互いに結合したものです。Transactions bind multiple tasks together. たとえば、あるアプリケーションが 2 つのタスクを実行するものとします。For example, imagine that an application performs two tasks. まず、このアプリケーションはデータベースに新しいテーブルを作成します。First, it creates a new table in a database. 次に、データを収集、フォーマットし、新しく作成したテーブルに挿入する特定のオブジェクトを呼び出します。Next, it calls a specialized object to collect, format, and insert data into the new table. この 2 つのタスクは、単に関連しているだけでなく、相互に依存しており、たとえば、新しいテーブルにデータを格納できなければ新しいテーブルを作成しないようにできます。These two tasks are related and even interdependent, such that you want to avoid creating a new table unless you can fill it with data. 単一のトランザクションのスコープ内でこの 2 つのタスクを実行すると、両タスク間の結合が行われます。Executing both tasks within the scope of a single transaction enforces the connection between them. 第 2 のタスクが失敗すると、新しいテーブルの作成以前の時点まで第 1 のタスクがロールバックされます。If the second task fails, the first task is rolled back to a point before the new table was created.

動作を予測できるようにするため、すべてのトランザクションは基本 ACID プロパティ (atomic、consistent、isolated、および durable) を持つ必要があります。To ensure predictable behavior, all transactions must possess the basic ACID properties (atomic, consistent, isolated, and durable). これらのプロパティは、ミッション クリティカルなトランザクションの役割を悉無律型の命題として規定します。These properties reinforce the role of mission-critical transactions as all-or-none propositions. ACID の詳細については、「 Acid プロパティ」を参照してください。For more information on ACID, please see ACID Properties. 要約すると、ACID を使用すれば、一連の関連タスクを 1 つの単位として成功または失敗させることができます。In summary, ACID guarantees that a set of related tasks either succeed or fail as a unit. トランザクション処理の用語でいえば、トランザクションはコミットされるか中止されるかのいずれかである、ということになります。In transaction processing terminology, the transaction either commits or aborts. トランザクションをコミットするためには、すべての参加要素が、データに対する変更は永続化されるということを保証する必要があります。For a transaction to commit, all participants must guarantee that any change to data will be permanent. システム クラッシュその他の予期しない出来事が発生した場合でも、変更は保持されます。Changes must persist despite system crashes or other unforeseen events. この保証を履行しない参加要素が 1 つでもあると、トランザクション全体が失敗します。If even a single participant fails to make this guarantee, the entire transaction fails. そのトランザクションのスコープ内でのデータに対するすべての変更が、特定の時点までロールバックされます。All changes to data within the scope of the transaction are rolled back to a specific set point.

トランザクションは、データベースやメッセージ キューなどの単一のデータ リソースに収容することができます。A transaction can be confined to a single data resource, such as a database or message queue. このシナリオでは、ローカル トランザクションは、パフォーマンスを向上させる System.Transactions が提供するトランザクション マネージャーによって管理されます。In this scenario, the local transaction is managed by the Transaction Manager provided by System.Transactions , which generates performance gain. これらのトランザクションは、データ リソースによって制御されるため、効率的で管理しやすくなっています。Controlled by the data resource, these transactions are efficient and easy to manage.

さらに、トランザクションは複数のデータ リソースにまたがることもできます。Transactions can also span multiple data resources. 分散トランザクションにより、さまざまなシステムで発生する複数の異なる操作を、単一の成功または失敗操作に統合することができます。Distributed transactions give you the ability to incorporate several distinct operations occurring on different systems into a single pass or fail action. このシナリオでは、トランザクションは、各システムに常駐する Microsoft 分散トランザクション コーディネーター (MSDTC) によって調整されます。In this scenario, the transactions are coordinated by the Microsoft Distributed Transaction Coordinator (MSDTC) that resides in each system.

System.Transactions の提供するクラスを使用してトランザクション アプリケーションを開発する際は、必要なトランザクションの種類や関連するトランザクション マネージャーを気にする必要はありません。When you develop a transactional application using the classes provided by System.Transactions, you do not need to worry about what kind of transactions you need, or the transaction manager involved. System.Transactions インフラストラクチャが自動的にこれらを管理します。The System.Transactions infrastructure automatically manages these for you.

トランザクションの作成時に、トランザクションに適用する分離レベルを指定できます。When you create a transaction, you can specify the isolation level that applies to the transaction. IsolationLevel列挙型によって定義される分離レベルによって、トランザクションの影響を受けるデータに対して他のトランザクションが持つアクセスレベルが決まります。The isolation level, defined by the IsolationLevel enum, determines what level of access other transactions will have to the data affected by your transaction.

トランザクションは、ADO.NET、 System.EnterpriseServices、またはSystem.Transactions名前空間によって提供されるトランザクションプログラミングモデルを使用して作成できます。You can create transactions using ADO.NET, System.EnterpriseServices, or the transactional programming model provided by the System.Transactions namespace. 「System.stringによって提供される機能」では、 System.Transactions名前空間を使用してトランザクションアプリケーションを記述するために使用できる機能について説明しています。The Features Provided by System.Transactions topic discusses the features that you can use to write a transactional application using the System.Transactions namespace.

関連項目See also