この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "トランザクション処理"
この項目では、トランザクション処理の原理について説明しています。特定の実装については「トランザクション処理システム」を、その他の用法については「トランザクション (曖昧さ回避)」をご覧ください。
トランザクション処理(トランザクションしょり、英: transaction processing)とは、トランザクションと呼ばれる不可分な操作から構成される情報処理の形態。 トランザクションは、データベースをある一貫した状態から別の一貫した状態へ変更するアクションを1つに束ねたものである[1]。トランザクション処理は、既知の一貫した状態のデータベースを維持するよう設計されており、相互依存のある複数の操作が全て完了するか、全てキャンセルされることを保証する。 例えば、顧客の普通預金口座から当座預金口座に500ドルを移動させる典型的な銀行のトランザクションを考えて見る。このトランザクションは銀行側から見れば1つの操作であるが、コンピュータから見れば少なくとも2つの操作から構成される。普通預金口座から500ドルを引き落とし、当座預金口座に500ドルを入金するのである。引き落としが成功して入金が失敗した場合(あるいは逆の場合)、銀行の帳簿はその日の営業完了時点で不整合を生じる。したがって、2つの操作が両方成功するか、両方失敗することを保証する必要があり、それによって銀行のデータベースに不整合が生じないようにする。トランザクション処理はそのような保証をするよう設計されている。 トランザクション処理では、データベースの個々の操作が自動的に1つに連結され、不可分のトランザクションとされることがある。トランザクション処理システムは、1つのトランザクション内の全操作がエラー無しに成功するか、全操作が実行されないことを保証する。一部の操作が成功し、他の操作でエラーが発生した場合、トランザクション処理システムはそのトランザクションの「全」操作を「ロールバック; roll back」し、そのトランザクションによる痕跡を消去してデータベースを一貫した状態(そのトランザクションを開始する前の状態)にリストアする。あるトランザクションの全操作が完了した場合、そのトランザクションはシステムによって「コミット; commit」され、データベースに加えられた更新内容が恒久的なものとなる。コミットされたトランザクションがロールバックされることはない。 トランザクション処理は、ハードウェアやソフトウェアの障害によってトランザクションが部分的に実行され、データベースが不明で一貫しない状態になるのも防ぐ。コンピュータシステムがトランザクションを処理中にクラッシュしてしまった場合、トランザクション処理システムはコミットされていない全トランザクションがキャンセルされることを保証する。 トランザクションは厳密に時間順に処理される。n+1 番目のトランザクションが n 番目のトランザクションと同じデータベース内のデータにアクセスする場合、n 番目のトランザクションがコミットされるまで n+1 番目のトランザクションは開始されない。あるトランザクションが開始される前にそのトランザクションが操作する予定のデータベースの部分を更新している全トランザクションは先にコミットされなければならない。先行するトランザクション群には hole は全く存在しない。 トランザクション処理システムの基本原則は、どのようなシステムであっても同じである。しかし、システムによって用語が異なる可能性があり、以下で使用する用語は必ずしも常に通用するとは限らない。 トランザクション処理システムはデータベースの整合性を保証するため、データベース更新の中間状態を記録し、トランザクションがコミットできなかった場合にデータベースを既知の状態にリストアするためにそのような記録を活用する。例えば、トランザクションによる更新前のデータベースの情報のコピーを事前に取って置く(これをbefore imageと呼ぶ)。トランザクションがコミット前に失敗した場合、そのコピーを使ってデータベースをトランザクション開始前の状態に戻す。これを「ロールバック」と呼ぶ。 また、データベースへの更新毎に別にジャーナルを保持することも可能である(これをafter imageと呼ぶ)。これはトランザクション失敗時のロールバックには不要だが、データベースの障害発生時のアップデートには便利である。そのためトランザクション処理システムでもこれを提供している場合がある。データベース全体の障害が発生した場合、最近とられたバックアップからデータベースを復元する。バックアップは、バックアップ採取後にコミットされたトランザクションによる更新を反映していない。しかし、データベースをリストアした後、after imageのジャーナルをデータベースに適用してデータベースを最新状態にすることができる。これを「ロールフォワード」と呼ぶ。障害発生時に処理中だったトランザクションはロールバックされる。これにより、障害発生直前までにコミットされた全トランザクションが反映された一貫した状態のデータベースが復旧できる。 場合によっては、2つのトランザクションの処理中にデータベース内の同じ部分に同時にアクセスしようとして、互いの処理の進行を妨げる場合がある。例えば、トランザクション A が X にアクセスし、トランザクション B が Y にアクセスしているとしよう。その状態で、A が Y にアクセスしようとし、B が X にアクセスしようとしたとき「デッドロック」が発生し、どちらのトランザクションも先に進めなくなる。トランザクション処理システムはそのようなデッドロックが発生するのを検出するよう設計されている。通常、両方のトランザクションをキャンセルし、ロールバックする。そして、自動的に順序を変えて再実行し、デッドロックが再度発生しないようにする。
解説
技法
ロールバック詳細は「ロールバック」を参照
ロールフォワード
デッドロック詳細は「デッドロック」を参照
ACID 標準詳細は「ACID (コンピュータ科学)」を参照
Size:20 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef