バックアップでは、ちょっとしたミスによってバックアップしたファイルが無意味なものとなり、データベースのリカバリを行うことができなくなってしまう場合があります。いままでに何度も耳にしてきたありがちな失敗例をいくつか紹介しますので、このような事態に陥らないように気を付けてください。
【問題】
データファイルや表領域の追加が発生したにもかかわらず、バックアップ用のスクリプトを変更し忘れたことでバックアップの取得漏れが発生し、実際の障害発生時にデータベースのリカバリを行うことができなかった。
【対処方法】
物理バックアップの取得対象となるファイルを、バックアップ用スクリプト内で直接指定している場合には、データベースの構成変更などでファイルが追加されるたびにスクリプトを修正する必要があるため、修正ミスや作業漏れが発生してしまう可能性があります。このような場合には、バックアップ対象のファイルをデータディクショナリ表など(v$tablespace、v$controlfile、v$logfile、v$datafile、v$tempfileなど)から動的に取得することで、バックアップの取得漏れを防ぐことができます。
以下に、一貫性バックアップで取得するファイル名を動的に取得してバックアップスクリプトを作成するSQLを紹介します。
set pages 0 |
リスト10 バックアップSQLスクリプト (1)データファイルのバックアップ対象ファイルを取得 (2)テンポラリファイルのバックアップ対象ファイルを取得 (3)制御ファイルのバックアップ対象ファイルを取得 (4)オンラインREDOログファイルのバックアップ対象を取得 |
cp -p /opt/app/oracle/oradata/system01.dbf /work/ONLINE_BACKUP/ |
リスト11 SQLスクリプト実行により作成されたbackup.sh ※注意 表領域を追加した場合には、表領域のモード変更(begin backup、end backup)も合わせて行う必要がありますので、可能な限り、データディクショナリ表の情報を利用し、動的にスクリプトを作成することをお勧めします。 |
【問題】
アーカイブREDOログファイルの生成中にバックアップを実行したため、不完全な状態でのファイル取得となり、リカバリ時に適用することができなかった(図2)。
【対処方法】
オンラインREDOログファイルが切り替わった場合、アーカイバプロセス(ARCn)によってオンラインREDOログファイルの情報はアーカイブREDOログファイルとして生成されます。この処理は、生成されるアーカイブREDOログファイルのサイズによっては時間を要する場合があります。必ず各動的パフォーマンス・ビュー(v$logのarchived列やv$archived_log)を参照し、アーカイブ処理が完了したファイルのみをバックアップするようにします。
【問題】
非一貫性バックアップ完了後に、バックアップモード実行中の変更情報が含まれているオンラインREDOログファイルをアーカイブしていなかった。そのため、オンラインREDOログファイル障害が発生し、そのとき取得した非一貫性バックアップのデータファイルを利用した不完全回復ができなかった(図3)。
【対処方法】
バックアップモード実行中に生成されたREDOエントリをバックアップするためには、オンラインREDOログファイルのアーカイブが必要です。バックアップモード実行中に発生したREDOエントリが存在しない場合、その時に取得したバックアップファイルを用いてリカバリを実行することはできませんので、忘れずに取得するようにしてください。
【問題】
リカバリに必要なアーカイブREDOログファイルのバックアップ取得漏れや、オペレーションミスによる消失によって、障害発生の直前まで復旧することができなかった(図4)。
【対処方法】
バックアップ取得漏れやオペレーションミスによってアーカイブREDOログファイルが消失してしまった場合には、その1つ前までのものを適用する不完全回復でしか復旧することができません。障害発生直前の状態まで復旧させる場合には、バックアップ取得完了後のすべてのアーカイブREDOログファイルが必要となりますので、アーカイブREDOログファイルの出力を多重化させるなどの対策を検討する必要があります。
【問題】
NOLOGGING句を使用して表、索引の作成や、ダイレクト・パス・インサート処理、あるいはSQL*LoaderのUNRECOVERABLEオプションを指定してデータを作成していたとします。データベースに障害が発生して、リカバリを実施したにもかかわらず、それらのデータ参照時にはエラー(ORA-01578)が発生しました。
【対処方法】
NOLOGGING操作をした場合、生成されるREDO情報はデータディクショナリの変更などに限られます。そのため、アーカイブREDOログファイルやオンラインREDOログファイルを適用してもデータは復旧できません。そのため、NOLOGGING句、UNRECOVERABLEオプションを使用した操作でデータを作成している場合、操作後、速やかにデータファイルのバックアップを取得しておくか、障害復旧時にデータを再作成する必要があります。
実際に、NOLOGGING句、UNRECOVERABLEオプションを指定したオペレーションが実行されたかどうかは、動的パフォーマンス・ビュー(v$datafile)のUNRECOVERABLE_TIME列、UNRECOVERABLE_CHANGE#列を参照することによって確認が可能です。また、データベース全体でNOLOGGINGオペレーションを禁止(alter database force logging)してしまうことも可能です。
次回からは、RMANによるバックアップについて説明していきます。(次回へ続く)
Copyright © ITmedia, Inc. All Rights Reserved.