Oracleのデータを復元するORACLE MASTER Bronze DBA講座(11)

Oracleデータベースエンジニアとしての実力を証明するORACLE MASTER資格。その入り口であるBronze資格の取得は難しくない。本連載と、同時掲載中の連載「Bronze SQL基礎I 講座」で合格を目指そう!(参考記事:「Oracle 10g対応のORACLE MASTERとは?」)

» 2006年03月17日 00時00分 公開
[有限会社 G.F.インフィニティ (Project - ∞)]

 本連載第9回「Oracleの表の作成とビューの利用」、第10回「Oracleのスキーマオブジェクトを活用する」で、スキーマオブジェクトの管理について学びました。今回は、バックアップ/リカバリを紹介します。

理解しておきたいこと

1.確認しておきたい内容

  • バックアップ/リカバリのためのデータベース構成
  • データベースのバックアップと管理
  • リストアとリカバリ操作
  • フラッシュバックドロップとフラッシュバックテーブルの使用

2.フラッシュリカバリ領域

 フラッシュリカバリ領域は、バックアップファイルやアーカイブログファイルを格納する場所です。Database Controlでは、「メンテナンス」タブ→「バックアップ/リカバリ」リージョンの「リカバリ設定の構成」リンクから構成できます(図1)。

図1 フラッシュリカバリ領域の設定 図1 フラッシュリカバリ領域の設定

問題

問題1

フラッシュリカバリ領域のサイズを見積もるときに重要な要素を3つ選択しなさい。

a.増分バックアップ
b.制御ファイル
c.アーカイブログファイル
d.UNDOセグメント
e.オンラインREDOログファイル
f.2つのデータファイルの完全バックアップを保持できる

正解:a、c、f

解説

 フラッシュリカバリ領域には、アーカイブログファイル、RMAN(Recovery Manager)を使用したバックアップファイル、フラッシュバックデータベース機能を使用するのであればフラッシュリカバリログが格納されます。これらのファイルがすべて1つの領域に格納されるわけですから、正解にある要素で使用されるサイズを見極めることが重要です。

○正解a:バックアップファイルの一部です。RMANを使用したバックアップでは差分バックアップを取得することができ、これを増分バックアップと呼びます。

○正解c:アーカイブログファイルのデフォルトの保存先はフラッシュリカバリ領域です(log_archive_dest_10)。別のディレクトリに保存したい場合はlog_archive_dest_n初期化パラメータで指定できますが、そうでなければフラッシュリカバリ領域の使用サイズを見極める必要があります。

○正解f:フラッシュリカバリ領域は、Oracle側の理想として、完全バックアップを2つは保持できるサイズが望ましいとのことです。

 そのほかの選択肢の不正解の理由は次のとおりです。

選択肢b:制御ファイルの配置場所は、フラッシュリカバリ領域である必要はありません。

選択肢d:UNDOセグメントは、UNDO表領域に格納されます。UNDO表領域は通常の表領域と同様、ディスク競合を起こさないデバイスにデータファイルを配置することを検討しますが、フラッシュリカバリ領域である必要はありません。

選択肢e:オンラインREDOログファイルの配置場所も、フラッシュリカバリ領域である必要はありません。

3.NOARCHIVELOGモードとARCHIVELOGモード

 Oracleデータベースは、NOARCHIVELOGモードとARCHIVELOGモードのいずれかで運用できます。

NOARCHIVELOGモード ARCHIVELOGモード
バックアップ時、データベースを停止する必要がある バックアップ時、データベースがオープンしていてもよい
同じタイミングで取得したデータベース全体のバックアップが必要(一貫性バックアップ) 個々のデータファイル、表領域単位で取得したバックアップでよい(非一貫性バックアップ)
データファイルに障害が発生した場合、バックアップ全体をリストアする必要がある データファイルに障害が発生した場合、障害が発生したファイルのみリストアすればよい
アーカイブログファイルを適用するリカバリができない アーカイブログファイルを適用するリカバリができる
アーカイブログファイルの管理は不要 アーカイブログファイルを失うとリカバリできなくなるため、適切な管理が必要

 ARCHIVELOGモードへの変更は、Database Controlでは「メンテナンス」タブ→「バックアップ/リカバリ」リージョンの「リカバリ設定の構成」リンクから行えます。アーカイブログファイルの保存先はデフォルトではフラッシュリカバリ領域になっていますが、最大10カ所を指定できます(図2)。

図2 アーカイブログファイル保存先の指定(クリックで全体を表示します) 図2 アーカイブログファイル保存先の指定(クリックで全体を表示します)

問題

問題1

NOARCHIVEモードでのバックアップの特徴を3つ選択しなさい。

a.すべてのREDOログファイルが適用済みとなる
b.すべての制御ファイルの変更が適用済みとなる
c.インスタンスが停止している必要がある
d.インスタンスが起動している必要がある
e.データファイルの障害からリカバリできる
f.インスタンスの障害からリカバリできる

正解:a、c、f

解説

 前回、宿題とした問題です。NOARCHIVELOGモードではアーカイブログファイルを作成しませんので、データベース障害が発生した場合、アーカイブログファイルを利用したリカバリはできません。インスタンスがいきなり停止してしまうインスタンス障害があった場合は、オンラインREDOログファイルを使用したインスタンスリカバリでのみ解決できます(正解f)。

 データベースの一部が損失した場合は、データベース全体をバックアップから戻す必要があります。そのため、インスタンスが停止した状態で全体のバックアップを取得する必要があります(正解c)。インスタンスを正しく停止することで、REDOログファイル内容が適用され、次回起動時には不要な状態となります(正解a)。

 そのほかの選択肢の不正解の理由は次のとおりです。

選択肢b:制御ファイルの変更を適用するアクションは存在しません。データベースにおいては、制御ファイルがメインとなって全体を管理しています。

選択肢d、選択肢e:ARCHIVELOGモード時の特徴です。

4.一貫性バックアップと非一貫性バックアップ

 バックアップには、一貫性バックアップと非一貫性バックアップがあります。

一貫性バックアップ(完全バックアップ) 非一貫性バックアップ(部分バックアップ)
インスタンスが停止した状態でバックアップ データベースがオープンしている状態でバックアップ
REDOログファイル内のすべての変更が適用済み データファイルに適用されていない変更がREDOログファイル、アーカイブログファイルに含まれる
リストア操作直後にデータベースをオープンできる リストア操作後、リカバリ操作を行う必要がある

 NOARCHIVELOGモードでは、一貫性バックアップのみ有効です。ARCHIVELOGモードでは、一貫性バックアップと非一貫性バックアップの両方を使用することができます。

問題

問題1

次の要件を満たしているバックアップを選択しなさい。

  • インスタンスが停止した状態で取得されたバックアップ
  • REDOログファイルが適用済みである
  • リストア後、すぐにオープンできる

a.全体バックアップ
b.一貫性バックアップ
c.非一貫性バックアップ
d.部分バックアップ

正解:b

解説

 今回の要件を満たしたバックアップを、一貫性バックアップと呼びます。オフラインバックアップともいいます。

 選択肢cの非一貫性バックアップはその逆で、データベースがオープンしたままバックアップが取得されます。オープンバックアップとも呼ばれ、リストア後にリカバリを行う必要があります。非一貫性バックアップはARCHIVELOGモードの場合に使用できます。

 選択肢aと選択肢dはバックアップ取得時の状態ではなく、バックアップ対象となるファイルを示しています。全体バックアップ(完全バックアップ)はデータベース全体のバックアップを表し、部分バックアップは表領域やデータファイル単位で取得したバックアップを表します。

5.完全リカバリとPoint-in-Timeリカバリ

 リカバリの基本的な流れはREDOログレコードを適用するロールフォワードとUNDOデータを適用するロールバックで構成されます(図3)。

図3 リカバリの流れ 図3 リカバリの流れ

 ロールフォワードによって変更が適用されると、COMMITされたデータだけでなく、COMMITされていないデータも適用されてしまいます。そのため、ロールフォワード中にUNDOデータを再構築し、UNDOデータを使用してCOMMITされていないものをロールバックします。

 リカバリには、完全リカバリとPoint-in-Time(不完全)リカバリがあります。

完全リカバリ 不完全リカバリ
アーカイブログファイルとREDOログファイルに含まれるすべての変更を適用する データファイルをバックアップした後の任意の時点までのアーカイブログファイル、REDOログファイルに含まれる変更を適用する
障害発生直前のCOMMITされた状態に回復する 指定した時点の状態に回復する

 NOARCHIVELOGモードでは、一貫性バックアップをすべてリストアします。ARCHIVELOGモードでは、完全リカバリとPoint-in-Timeリカバリを使用できます。

6.フラッシュバックドロップとフラッシュバックテーブル

 Oracleデータベースでは、次のようなフラッシュバック操作が提供され、過去の特定の時点に戻ることが可能です。

フラッシュバック問い合わせ ある時間を指定して問い合わせを実行し、その時点で表示されるはずの問い合わせ結果を表示する
行履歴フラッシュバック 指定した2つの時点の間で生成されたすべてのバージョンのデータを表示
トランザクション履歴フラッシュバック トランザクションによって行われた変更を戻すためのSQL文を表示する
フラッシュバックテーブル 表を指定した時点の状態に戻す
フラッシュバックドロップ 削除された表を戻す
フラッシュバックデータベース データベース全体を指定した時点の状態に戻す

 試験ではフラッシュバックドロップとフラッシュバックテーブルに注意しましょう。

 Oracle Database 10gで表を削除すると、関連する索引、制約、データベーストリガーは元の表領域内にリネームされた状態で残されています。これをごみ箱に置かれた状態といいます。ごみ箱から元に戻すことをフラッシュバックドロップといいます。

 ごみ箱からパージを行うと表内のすべての行が削除され、データディクショナリから定義が削除されます。表に作成された索引も同時に削除されます(ビューは自動的に削除されません)。

 フラッシュバックテーブルではUNDOデータを使用し、1つ以上の表を特定の時点の状態に戻すことができます。特定の時点の状態を判断するために、フラッシュバック問い合わせ、行履歴フラッシュバック、トランザクション履歴フラッシュバックなどを活用します。

 実行には、行の移動が有効であることなどの条件があります。

問題

問題1

フラッシュバックドロップと表のフラッシュバックに適した状況を2つ選択しなさい。

a.HR.EMPLOYEES表に更新を行ったときにトリガーによるHR.JOB_HISTORY表への更新も同時に行われた。そのトリガー処理も含めてロールバックさせる必要があるとき
b.users01.dbfを誤って削除してしまい、そのusers01.dbfに対応した表領域内の表にアクセスが必要なとき
c.HR.EMPLOYEES表を誤って削除してしまったので、復活させる必要があるとき
d.HR.EMPLOYEES表がHR.JOBS表とHR.DEPARTMENTS表を参照しており、EMPLOYEES表を削除後、JOBS表とDEPARTMENTS表にいくつかの更新が行われたが、EMPLOYEES表を復活させ、JOBS表とDEPARTMENTS表に行われた処理をロールバックさせたいとき

正解:a、c

解説

 フラッシュバックドロップは、削除した表を元に戻す機能です。表のフラッシュバックは、指定した表を過去の時点に戻す機能です。

 正解となるケースを考えてみましょう。

○正解a:表のフラッシュバックで対応できます。表のフラッシュバックでは、複数の表を同時に指定することができます。この場合、トリガー処理によってJOB_HISTORY表も更新されていることが分かっていますので、EMPLOYEES表とJOB_HISTORY表を指定して表のフラッシュバックを行います。

○正解c:フラッシュバックドロップで対応できます。EMPLOYEES表に作成されていた索引、制約(外部キー制約を除く)、データベーストリガーなども復活します。

 不正解となるケースを考えてみましょう。

選択肢b:データファイルが削除された場合、フラッシュバック機能では対応できません。この場合は、バックアップしたデータファイルをリストアし、アーカイブログファイルとオンラインREDOログファイルを使用してリカバリすることが必要です。

選択肢d:リカバリする時点によってはフラッシュバックドロップと表のフラッシュバックで解決できそうに見えますが、保証はできません。フラッシュバックドロップでEMPLOYEES表を復活させることはできますが、外部キー制約は除かれます。JOBS表とDEPARTMENTS表に表のフラッシュバックを行うと、EMPLOYEES表の外部キー制約を後から行うときに不整合となる可能性が高いです。この場合は、フラッシュバックデータベースを行う方が適切だと思われます。

問題2

表のフラッシュバックを行うために必要な設定を2つ選択しなさい。

a.FLASHBACK TABLEシステム権限
b.表が格納されている表領域に対するUNLIMITEDのクォータ設定
c.表の行移動を有効にする
d.UNDO表領域にフラッシュバックするデータが格納されている

正解:c、d

解説

 正解となる選択肢を解説しましょう。

○正解c:表のフラッシュバックを行うには、行の移動が有効である必要があります。有効になっていないと、次のようにエラーとなります。

SQL> FLASHBACK TABLE emp2 TO TIMESTAMP
         TO_TIMESTAMP('06-03-27 18:13:16.724000');
FLASHBACK TABLE emp2 TO TIMESTAMP
           TO_TIMESTAMP('06-03-27 18:13:16.724000')
                *
行1でエラーが発生しました。:
ORA-08189: 行移動が使用できないため、表をフラッシュバックできません

○正解d:表のフラッシュバックにはUNDOデータを使用します。そのため、UNDO表領域に残っている範囲でのみフラッシュバックすることができます。そのほか、フラッシュバック問い合わせ(バージョン問い合わせ、トランザクション履歴含む)もUNDOデータを使用します。

 そのほかの選択肢の不正解の理由は次のとおりです。

選択肢a:FLASHBACK TABLEというシステム権限はありません。存在するのはFLASHBACK ANY TABLEシステム権限です。表のフラッシュバックは、表の所有者であれば行うことができますが、ほかのユーザーの表をフラッシュバックするときは、FLASHBACK ANY TABLEシステム権限が必要です(さらに、SELECT、INSERT、DELETE、ALTER権限も必要)。

選択肢b:フラッシュバック機能にクォータ設定は関係ありません。クォータはユーザーに割り当てた表領域使用制限サイズですが、表のフラッシュバックはその表を過去の時点に戻すので、領域が現在の表より増えることはありません。

まとめ

 次の内容をチェックしておきましょう。

  • フラッシュリカバリ領域に必要なサイズ(バックアップ、アーカイブログファイル、フラッシュリカバリログ)
  • NOARCHIVELOGモードとARCHIVELOGモードのバックアップの違い
  • フラッシュバックドロップと表のフラッシュバック(実行に必要な設定や使用されるケース)

宿題

 次回は、「データベースの監視とアドバイザの使用」を確認します。次の宿題を解いておいてください。

セグメントアドバイザによって取得できる推奨情報を選択しなさい。

a.個々のスキーマオブジェクトのエクステントにおいて、縮小できるエクステントをアドバイスする
b.表領域内のセグメントを分析することで、スキーマオブジェクトにおける縮小できるセグメントをアドバイスする
c.個々のスキーマオブジェクト、または表領域内のセグメントにおいて、縮小できるセグメントをアドバイスする
d.表領域内のセグメントを分析することで、データベース全体で縮小できるセグメントをアドバイスする

IT資格試験の模擬問題をWebベースで学習できる@IT自分戦略研究所の新サービス「@IT資格攻略」では、Bronze SQL 基礎 IをはじめOracle関連の資格をテーマとして取り上げています。Bronze DBA 10gも近日中に追加予定です。「無料お試し版」もありますので、記事と併せてご覧ください。



Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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