連載
» 2006年02月21日 00時00分 公開

Oracleバックアップ/リカバリ講座(2):アーキテクチャから理解するOracleリカバリ (2/3)

[亀田明裕,株式会社アゲハ]

トランザクションを取り消す仕組み「UNDOセグメント」

 Oracleではトランザクション処理中における変更前のデータを、UNDOセグメント(Oracle9i以前のバージョンではロールバックセグメントと呼ばれていました)という領域に保持しています。これにより、トランザクション処理中に何らかの障害が起こった場合や、ROLLBACK文を実行した場合に、UNDOセグメントから変更前のデータを戻し、データの整合性を保つことができるのです(図2)。

図2 DML文を実行し、表とUNDOセグメントに書き込みを行っているイメージ図 図2 DML文を実行し、表とUNDOセグメントに書き込みを行っているイメージ図

 また、UNDOセグメントにはもう1つ、読み取り一貫性を保証するという役割もあります。読み取り一貫性とは、読み取り(SELECT)を開始した時点で確定しているデータのみが参照されることを保証することです。例えば、ユーザーAが更新中のデータをユーザーBが参照した場合を考えてみましょう。ユーザーBが読み取りを開始した時点では、まだユーザーAによる変更処理は確定されていないため、ユーザーBはUNDOセグメントに格納された変更前のデータを読み取ることになります。

 OracleではUNDOセグメントを利用することで、更新が確定していない場合は更新前のデータを、更新が確定された場合には更新後のデータを返すことで、読み取り一貫性を維持しています。このようにUNDOセグメントは障害が発生したときやROLLBACKするときだけでなく、更新が確定していないデータは更新前データをユーザーに返すことができる重要なセグメントです。

データの変更履歴を保持する仕組み

 Oracleデータベース構成ファイルの1つであるオンラインREDOログ・ファイルは、データベースに対する変更履歴が格納される非常に重要なファイルです。データベースに対する更新処理をCOMMITした場合、即時にこのオンラインREDOログ・ファイルに変更情報が記録されます。処理中に障害が発生した場合でも、OracleはオンラインREDOログ・ファイルにある変更履歴を基に、COMMITされていたトランザクションは確定、COMMITされていなかった処理は取り消しを行うことで、データベースとして整合性の取れた状態に復旧することができます(詳細なリカバリの仕組みについては、この後説明します)。

 Oracleデータベースでは、このオンラインREDOログ・ファイルを最低2つ以上用意して循環利用します。図3にあるように、1つ目のオンラインREDOログ・ファイルが満杯になると次のオンラインREDOログ・ファイルへ切り替わり(これをOracleではログスイッチといいます)、変更情報を記録し続けていきます。デフォルトのノーアーカイブログモードでは、循環利用するだけで古いオンラインREDOログ・ファイルの変更情報は上書きされてしまいます。そのため、障害発生直前まで復旧する、または過去のある時点に復旧するという要件がある場合には、「アーカイブログモード」に変更し、オンラインREDOログ・ファイルの内容をアーカイブREDOログ・ファイルとして保存しておく必要があります。

図3 アーカイブログモードによるアーカイブREDOログ・ファイル作成の動作 図3 アーカイブログモードによるアーカイブREDOログ・ファイル作成の動作(クリックすると拡大します)

 データベースをアーカイブログモードに設定し、アーカイバプロセス(ARC0)を起動することで、図3のような動作で自動的にアーカイブREDOログ・ファイルを作成するように設定できます。

 この後では、これまでに説明した「トランザクション」「UNDOセグメント」「オンラインREDOログ・ファイル」「アーカイブREDOログ・ファイル」がリカバリ時にどのような仕組みで動作しているか説明します。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。