本記事では、Oracleデータベースのバックアップ/リストア/リカバリについて、そのアーキテクチャ、代表的なバックアップ手法、論理/物理バックアップ、RMANといった全般的な内容を解説していく。(編集部)
主な内容
--Page 1--
▼リカバリで重要なデータベースの仕組みを理解する
▼データの整合性を保つ単位「トランザクション」
--Page 2--
▼トランザクションを取り消す仕組み「UNDOセグメント」
▼データの変更履歴を保持する仕組み
--Page 3--
▼リカバリの仕組み
前回は、バックアップ、リカバリの概要と重要性、そしてバックアップ計画の立て方について、皆さんの身近な例を挙げて説明しました。今回以降では、具体的にOracleデータベースを使用したバックアップ、リカバリについて説明していきます。第2回となる今回は、リカバリに焦点を絞り、どのような仕組みによってデータの整合性が保証され、リカバリが行われているかについて説明します。
一連の更新処理実行中に、データベースが格納されたディスクに障害が発生してしまった場合、更新中のデータはどうあるべきでしょうか。
このような場合に、一部のデータのみ変更され、残りのデータは変更されていない、といったように、中途半端に更新処理が反映されてしまっては大変なことになります。このような状況に陥らないように、障害が発生した場合にはリカバリ処理を行い、変更が確定されていたデータは正しく反映し、未確定であったデータは正しく取り消す必要があります。
Oracleのリカバリに関する一連の動作を説明する前に、まずOracleデータベースがどのようにして「データの整合性を保証する」のか、その仕組みを説明しておきます。
処理全体の整合性を保つために、データの追加、更新、削除などの操作をひとまとめに処理したいことがあります。この処理単位をトランザクションといい、INSERT(追加)やUPDATE(更新)、DELETE(削除)といったDML文が実行されたときにトランザクションが開始され、COMMIT(確定)、またはROLLBACK(取り消し)を実行するとトランザクションが終了します。複数のデータ変更操作を1つのトランザクションとして処理することにより、データの一貫性を保った変更を行うことができます。
具体的なトランザクションの例として、ある銀行の口座Aから口座Bへお金を振り込む処理を考えてみましょう。何らかの障害によって、どちらかの処理だけが行われてしまった場合、口座Aから出金されるだけで口座Bへ入金がされていないというような矛盾が生じてしまいます。そのため、このような口座Aでの引き出し処理と口座Bへの振り込み処理は、切り離すことのできない操作として1つのトランザクションにまとめなければなりません。
一連のDML操作(出金処理と入金処理)がすべて成功している場合は全操作を「COMMIT」させ、1つでも失敗している操作があった場合には、全操作を「ROLLBACK」することによって、データの整合性を保証することができます。データベースのリカバリも、このトランザクション単位で行われます(図1)。
Copyright © ITmedia, Inc. All Rights Reserved.