連載
» 2011年09月22日 00時00分 公開

独学! ORACLE MASTER Gold 11g講座(8):完全リカバリと不完全リカバリ (1/2)

ORACLE MASTER資格の上級に位置付けられる「ORACLE MASTER Gold Oracle Database 11g」。本連載では、Gold試験の頻出ポイントを解説する。確認問題付き。

[武見弘之,システム・テクノロジー・アイ]

 前回までは、Recovery Manager(RMAN)を使ってバックアップやアーカイブログを取得する方法とそれぞれを管理する方法を解説しました。今回は、リカバリ手順の解説に入ります。

まずは完全リカバリから

 データファイルが壊れたときにはまず、完全リカバリを実行します。バックアップ、アーカイブログ、REDOログファイルを使うことで、障害が発生した時点の状態に戻せます。コミットデータが失われることはありません。

pic1

 RMANで完全リカバリを実行するには、以下のようにコマンドを実行してください。

RMAN> sql "ALTER TABLESPACE 表領域名 offline immediate"; --表領域はオフラインの必要がある RMANからSQLコマンドを記述することも可能
RMAN> RESTORE TABLESPACE 表領域名; -- バックアップからのリストア。データファイル単位で可能
RMAN> RECOVER TABLESPACE 表領域名; -- バックアップからのログを使いリカバリ
RMAN> sql "ALTER TABLESPACE 表領域名 online"; --表領域のオンライン

 SYSTEMまたはUNDO表領域のデータを持っているデータファイルが壊れていると、インスタンスがクラッシュします。マウントモードでRESTOREコマンドとRECOVERコマンドを実行してください。

過去の特定の時点の状態に戻す

 完全リカバリは障害が発生した時点の状態まで復旧することを指します。一方、過去の特定の時間の状態に戻す事全体を「Point In Time Recovery(PITR)」と呼びます。

 「PITR」の方法はいくつかありますが、今回はバックアップとアーカイブログを使った「不完全リカバリ」について解説します。

 不完全リカバリは、大体の場合、以下の3通りの場面で実行するものです。1つめは、誤ったDML文、DDL文を実行してしまったために、データを失ってしまったとき。2つめは、完全リカバリを実行してみたら、アーカイブログが壊れていて、リカバリに失敗してしまったとき。3つめは、アクティブもしくはカレントのREDOログファイルが全滅しているときです。REDOログファイルの障害については次回解説します。

 どの場合も、すべてのアーカイブログを適用せずに、途中まで適用することで、特定の時点の状態にデータベースを復旧できるのです。

pic2

 不完全リカバリではすべてのデータファイルを復旧する必要があるという点に注意してください。特定のファイルだけを過去の状態に戻すことはできないということです。特定のファイルだけを元に戻すということを許すと、例えば親子関係がある表の親データが消え、親子関係に矛盾が生じてしまうということがありえます。そのため、こういった作業はできないのです。以上の理由から、不完全リカバリでも、すべてのファイルを復旧対象にする必要があるのです。

 ちなみに、不完全という不安を感じる用語を使っていますが、「完全リカバリ」はログをすべて適用するため「完全」、「不完全リカバリは」ログを途中まで適用するため「不完全」という呼び名になっているだけです。

不完全リカバリの手順

 RMANで不完全リカバリを実行するには、以下の手順を踏む必要があります。

  1. データベースの停止
  2. データベースをマウント
  3. どの時点に復旧したいかを決める
  4. RMANコマンドを実行する

 コマンドの実行が完了したら、RESETLOGSオプションでデータベースをオープンしてください。

 不完全リカバリではすべてのアーカイブログファイルを使うわけではありません。回復作業で使用しなかったアーカイブログファイルは今後使うことはありません。破棄し、新規にアーカイブログファイルを記録するように宣言する必要があります。

 不完全リカバリで、復旧したい時点を指定するには、時間、トランザクションがコミットした時点、REDOログファイルが切り替わった時点(ログスイッチ)、あらかじめ指定しておいたリストアポイントのいずれかを選択する必要があります。

 時間を指定するには、以下のコマンドを実行します。

RMAN> SET UNTIL TIME '時間';

 トランザクションがコミットした時点は、システム変更番号(SCN)で指定できます。コマンドを実行するときは、この番号を入力します。

RMAN> SET UNTIL SCN システム変更番号;

 REDOログファイルが切り替わると、その時点で「ログ順序番号」が付きます。この番号を指定してコマンドを実行するには以下の通りにしてください。

RMAN> SET UNTIL SEQUENCE ログ順序番号;

 リストアポイントを設定するときは、名前を付けます。リストアポイントを指定して不完全リカバリを実行するときは、この名前を指定します。

RMAN> SET UNTIL RESTORE POINT リストアポイント名;

 リストアポイントは、不完全リカバリを想定してあらかじめ特定の時点に設定した名前です。設定する方法は2種類。コマンド実行時点をリストアポイントとする方法と、時間を指定して、その時間をリストアポイントとする方法です。コマンド実行時点をリストアポイントとするには、以下のSQL文を実行します。

SQL> CREATE RESTORE POINT リストアポイント名;

 時間を指定して、その時間をリストポイントとするには、以下のSQL文を実行します。

SQL> CREATE RESTORE POINT リストアポイント名 AS OF TIMESTAMP '時間';
       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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