ORACLEMASTER 備忘録6(10/11)
続き
データの整合性保持のための構造管理
ここでは、Oracleデータベースでトランザクションを実行する際の特徴的な機能である「UNDO」について説明する。Oracle Database 12cでは、デフォルトでUNDOデータが自動管理されている。
UNDOデータとは
「UNDOデータ」とは、トランザクションによってデータの変更が行われる前に、データベースによって取得される“データのコピー”である。
UNDOデータの目的
UNDOデータは次の目的のために使用される。
・ロールバック操作
・読み取り一貫性
・フラッシュバック機能
・データベースのリカバリ
ロールバック操作
ロールバック操作は、データベースに対して行われた“「コミットされてない変更」を元に戻す操作”である。ロールバック操作は、ユーザーのトランザクションによってROLLBACK文が実行されるのをはじめ、障害が起こったときのリカバリ操作時にOracleデータベースによって自動的に実行される場合もある。
Oracleデータベースは、UNDOデータを使用してロールバック操作を行う。アクティブトランザクション(まだコミットされていないトランザクション)で使用されているUNDOデータは、“そのトランザクションがコミットされるまで上書きされない”。
読み取り一貫性
読み取り一貫性は、ユーザーがデータを問合せ中にそのデータに対して別の変更が行われても、問合せているユーザーは一貫したデータを見ることができるという機能。
例えば、ユーザーが午後九時に問い合わせを発行し、その問合せが10分間続いた場合を考える。問合せ中の表に対して他のユーザーが更新や挿入などの変更操作を行っても、問合せ結果は午後九時時点の、一貫したデータの状態を取得できる。Oracleデータベースでは、読み取り一貫性はUNDOデータによって実現されている。
フラッシュバック機能
「フラッシュバック機能」とは、コミット済みのデータを過去のある時点のデータの表示やリカバリを行う機能。フラッシュバック機能には「フラッシュバック問合せ」「フラッシュバック・トランザクション」「フラッシュバック表」など、いくつかの種類があり、一部のフラッシュバック機能はUNDOデータを使用している。
データベースのリカバリ
障害の起こった後の「リカバリ操作」では、UNDOデータを使用して、障害発生時にコミットされていなかったトランザクションをロールバックする。
UNDOの保存期間
現在実行中のトランザクションが使用しているUNDOデータは、その“トランザクションがコミットされるまで上書きされない”。
また基本的には、トランザクションがコミットするとそのUNDOデータが占有している領域は再利用可能になるが、「UNDO保存期間」中は、トランザクションのコミット後も一定期間は再利用されず、UNDOデータは保持される。
UNDO保存期間は、「自動UNDO管理」が行われているデータベースでは自動的にチューニングされる。トランザクションがコミット済みであっても、経過時間がUNDO保存期間に達してないUNDOデータについては、フラッシュバック機能や読み取り一貫性で使用できるように、できる限り保持される(必ず保持されるわけではない)。
また、自動拡張するUNDO表領域を使用している場合は、UNDO保存期間の下限値(秒)を「UNDO_RETENTION初期化パラメータ」で指定できる。