Oracleデータベースで実行されるリカバリには2つの種類があります。1つは自動的にOracleによって実行される「クラッシュリカバリ」、もう1つはデータベース管理者などによって手動で実行する「メディアリカバリ」です。ここで少し詳しく各リカバリの仕組みを説明します。
最初に説明するクラッシュリカバリは、これまでに説明したデータベースの仕組みを使用して自動的に整合性を保つために行われるリカバリです。このリカバリは、「システム稼働中に停電が起こった」「何らかの障害で急にインスタンスが停止した」「SHUTDOWN ABORTコマンドを実行した」などデータベースが正常に停止されなかった状態から、データベースを起動したときに実行されます。
このようにインスタンスが異常終了した場合には、確定したトランザクションのデータとデータファイルの間には矛盾が生じ、オンラインREDOログ・ファイルにはトランザクションが実行中のまま残っていた可能性があります(Oracleデータベースではメモリ上で変更したデータは、トランザクションの確定とは関係なく、時間差を置いてデータファイルへ反映しているため)。そのような事態が起こった場合、Oracleでは以下のような仕組みで自動的にリカバリを実行し、整合性を維持します。
図4のように、Oracleは最初にオンラインREDOログ・ファイルの変更履歴を適用し(REDO操作)、障害発生直前の状態にします。このオンラインREDOログ・ファイルの変更履歴を適用することを「ロールフォワード」といいます。このREDO操作によってデータの更新を行いますが、UNDOセグメントの変更前データも復元します。その後、このREDO操作で復元したUNDOセグメントを利用し、ROLLBACK処理を行います。
メディアリカバリは、先ほど説明したクラッシュリカバリのようにOracleが自動的に行うものではありません。例えば、ディスク障害などによってデータの格納されているデータファイルが消失してしまった場合などに、手動で行うリカバリです。
このような場合には、まずバックアップをリストアすることから始めます。その後、アーカイブREDOログ・ファイルとオンラインREDOログ・ファイルを利用して、ロールフォワード処理を手動でコマンド実行します。手動でコマンド実行することによって、先ほどのクラッシュリカバリと同様にロールフォワードを行い、確定していないトランザクションはロールバックし、データベースの整合性を維持します(アーカイブログモード時の具体的なバックアップ方法や各リカバリ方法は今後の連載で説明します)。
次回からは、今回説明したアーキテクチャ、リカバリの仕組みを踏まえ、Oracleの持つバックアップ方法、リカバリ方法を紹介します。(次回へ続く)
Copyright © ITmedia, Inc. All Rights Reserved.