>> はじめに |
|
これまでの連載で、SQL Serverのバックアップに関する基本事項をすべて説明しましたが、今回は、実際に運用に絡んだ話と、リストア/リカバリの実際の手順について確認していきます。
>> Backup Typeを組み合わせて運用方法を考える |
|
Backup Typeの種類について忘れてしまった人は、第3回と第4回の内容で復習をしておいてください。今回は、"File and filegroup"を除いた3種類の組み合わせによる運用を考えて見ます。
まず、もっとも一般的なのが週末に一回フルバックアップを行うというものです。比較的データ量や更新が少なく、RPO(Recovery Point Objective: 復旧点目標)が常に最新でなくてもかまわないという場合に使用されます。
次に差分バックアップを組み入れることで、より短いRPOを実現することが出来る方法です。週末のフルバックアップ以外に、他の平日の夜間に前回のフルバックアップからの変更分のみをバックアップします。すべて差分になるため、データの増加量が多い場合には、バックアップ容量が少しずつ大きくなっていきます。
最後はよりトランザクション量が多く、常に最新のバックアップデータが要求されるようなケースです。この場合には、日々のフルまたは差分バックアップと組み合わせて、トランザクションログのみのバックアップが併用されます。トランザクションログは、バックアップ後に通常は切り捨てられるため、1日に複数回のログのバックアップを行ってもトランザクション量に比例したバックアップ量になり、短期間でのバックアップが期待できます。下記例では一日3回のログのバックアップを想定しています。例えば9時から業務が始まり、12時、3時、6時というように業務中に3時間ごとのバックアップということもできますし、またより要件の厳しい環境では1時間ごとのログバックアップという選択もあります。
以上のようなバックアップ・ジョブは、今までのSQL APMに関する説明と、NetVaultに関する基礎知識を組み合わせることで簡単に作成できます。
>> [週末に一回フルバックアップ]を行う場合の復旧手順 |
|
基本的な3種類の運用方法について確認しましたが、実際にそれぞれの運用における復旧手順について確認してみます。
● ユーザーデータベースに障害が発生した場合
ユーザーが作成したデータベースの復旧の場合は、特別な手順を必要とせずに復旧することが可能です。実際に障害を発生させて、復旧手順を確認してみます。
今回は、ユーザーデータベースとして"testdata"という新規データベースを作成し、12万件のデータを事前に登録しました。こちらを対象にテストしてみます。特に新規のデータベースを作成せずに確認する場合は、標準で用意されている"Northwind"データベースを使用すると良いでしょう。
まず最初にシステム全体のバックアップを実行しておきます。MS SQL APM以下すべてのインスタンスを指定してジョブを作成すればよいのですが、差分バックアップを行う場合等を考慮し、あらかじめバックアップ・セレクションセットとして登録しておくことをお勧めします。
Backup Typeでは、"Database - complete"を指定することでフルバックアップを選択します。
次に、一度SQL Serverのサービスを停止し、テストの対象となるデータベースのファイルを削除することで擬似的な障害を発生させます。実際に、"C:\Program Files\Microsoft SQL Server\MSSQL\Data" 以下にある "testdata_Data.MDF" と "testdata_Log.LDF" ファイルを、削除しました。
そうすると、Enterprise Manager上では未確認の状態になります。
障害が発生したデータベースを復旧するために、NetVaultのリストア画面から、復旧対象となるデータベースのみを選択します。
リストアオプションの詳細
リストアの際のオプションは、それほど多くはありませんが、それぞれの項目について確認してみます。
- Backup Type - バックアップされたデータの種類が表示されます。表示そのものがバックアップの種類を示しているのでわかりやすいと思います。
- DATABASE FULL: フルバックアップ
- DATABASE DIFFERENTIAL: 差分バックアップ
- TRANSACTION/LOG NORMAL: トランザクションログバックアップ
- DATABASE FILE AND FILEGROUP: ファイルとファイルグループ- Action after restore - リストア後のデータベースの状態について設定します。
Set database operational; no more transaction logs can be restored
リストア後に、新たにトランザクション・ログまたは差分バックアップを適用しない場合に使用します。データベースはすぐに使用できる状態になります。SQLコマンドの"RESTORE DATABASE WITH RECOVERY"と同様の動作になります。
Set database non-operational; more transaction logs can be restored
リストア後に、別のトランザクション・ログまたは差分バックアップを適用する場合に使用し、データベースは使用できない状態になります。SQLコマンドの"RESTORE DATABASE WITH NO RECOVERY"と同様の動作になります。
Set database read-only; more transaction logs can be restored
リストア後に、別のトランザクション・ログまたは差分バックアップを適用する場合に使用し、データベースは読み取りのみ可能な状態になります。そのため、複数のトランザクション・ログのリストアの時に、確認しながら適用することも可能になります。SQLコマンドの"RESTORE DATABASE WITH STANDBY"と同様の動作になります。- Undo File Dir - NetVaultがリストア後の操作を行う際にUNDO用として使用するファイルの場所が記述されていますが、変更することはできません。NetVaultインストール・ディレクトリ以下のtmpディレクトリに、UNDO.DATというファイル名にて作成されます。
- Target Instance - 選択したデータを別のインスタンスにリストアする場合に、インスタンス名を入力します。バックアップ時から変更しない場合には、指定する必要はありません。
- Restore Method - バックアップの際のBackup Methodに対応した項目です。バックアップ時と設定をあわせる必要があります。詳細は、以前の内容を見てください。
フルバックアップをリストアする際には、リストア・オプションもデフォルトで問題ありません。リストアを実行し、Restore Completedになることを確認します。
Enterprise Managerにてデータベースの状態を確認すると、復旧していることが確認できます。Enterprise Managerを開いたままの場合には、情報が更新されていないことがあります。"操作メニュー"から"最新の情報に更新"を選択します。
● システムデータベースに障害が発生した場合
システムデータベースに障害が発生した場合には、ユーザデータベースのように、SQL Serverが通常動作したまま復旧を行うことができません。ここでは、仮にすべてのデータに障害があったと仮定した場合の復旧手順について確認してみます。
※フルバックアップについては、前回同様に取得しておきます。
最初に、SQL Server停止状態で、"C:\Program Files\Microsoft SQL Server\MSSQL\Data"以下をすべて削除してしまいます。
そうすると、当然ながらSQL Serverの起動ができず、master.mdfが見つからないためイベントログにその旨がエラーとして出力されます。
実は、この状態からのリストアは行うことができません。これは、システムデータベースが破損したため、そもそもリストアを受け入れる状態にすらSQL Serverがなっていないためです。
復旧にはまずSQL Serverの再インストールまたは、rebuildm.exeツールを使用して、システムデータベースを初期状態へ復元する必要があります。SQL Serverの再インストールは難しくはなく誰でもできますが時間がかかるため、ここではrebuildm.exeによる方法を紹介します。
まず、
"C:\Program Files\Microsoft SQL Server\80\Tools\Binn"ディレクトリにある、rebuildm.exeを実行します。
masterデータベース再構築のためのプログラムが起動するので、元となるmasterデータベースが格納されているディレクトリを指定します。通常は、SQL ServerのインストールCD-ROMを指定しますが、今回はSQL Serverの評価版をCドライブ上に展開してあるため、例ではその場所を指定しています。
あとは、正常にMasterデータベースの再構築完了画面が表示されれば完了です。
これでようやく、データベースのリストアができるのですが、最初にmasterデータベースのみを復旧するために、シングルユーザモードでSQL Serverを立ち上げます。コマンドプロンプトで、"C:\Program Files\Microsoft SQL Server\MSSQL\Binn"ディレクトリに変更し、以下のコマンドを実行します。
"C:\Program Files\Microsoft SQL Server\MSSQL\Binn> sqlservr.exe -c -m"
リストアが正常に終了すればよいのですが、もし失敗するようであれば、
今一度NetVaultサービスのログオン設定を確認し、一旦SQL Serverサービスを停止したあとに、起動しているEnterprise Managerを閉じて、もう一度コマンドラインから、シングルユーザモードで起動してからリストアしてみるとうまくいきます。
>> 次回は・・・ |
|
次回はフルバックアップだけでなく、差分バックアップと組み合わせた場合や、トランザクションログの適用について、実際の手順を交えて解説します。お楽しみに!