SQL Server データベースの復旧(修復)
データ破損を引き起こす根本的な原因
?@ハードディスクの寿命
初期不良を除くと、使用年数が4年を過ぎた位からHDDの断片化が著しくなり、
不良セクタが生じるようになる。これを原因とするデータベースエラーが発生した場合、
データベースの復旧が難しくなります。
?Aデータベースのトランザクションログの肥大化
障害発生時までの復元を行う完全復旧モデル。
これを実現するためにはトランザクションログのバックアップは不可欠です。
しかし、皮肉にもトランザクションログ自体の肥大化によって
データベースが破損することがあります。
?Bデータベースのトランザクションログの破損
トランザクションログの書き込み中に
不適切なシャットダウンなどを起すと、トランザクションログが破損することがあります。
これまでの経験上、SQL Server データベースはMicrosoft Access データベース同様に、
データベースが破損することが多いRDBMSだと思います。
特に、SQL Server を利用するためのハード環境か貧弱な場合ほど、
破損する確率が高くなるように思います。
しかしながら、Express EditionからEnterprise Editionまでを取り揃え、
初心者でも取り扱い安いRDBMSであるがゆえに、
低スペックなパソコンにインストールし利用することができるため、
上記?@〜?Bによるデータベースの破損は避けがたいものと思われます。
そこで重要なのがデータベースのバックアップです。
Express Editionを利用している市販の小規模商用アプリケーションにおいても、
システム終了時にデータベースのバックアップが行われるような設計になっているものも多く、
バックアップファイルさえ残しておけばデータベースの復旧は簡単に行えるようになっています。
バックアップファイルを残していない場合の復旧
データベースの破損の多くがトランザクションログの破損です。
これが発生した場合、通常であればバックアップファイルからの復元が理想的ですが、
復元に使用できるバックアップがない場合などには以下の手順で復旧を試みるようにしてください。
データベースの復旧手順
※対応可能なデータベースはSQL Server 2000以降となります。
※復旧対象はExpress Editionです。
?@SQL Server 2008 R2 以降のSQL Server Management Studioを起動します。
以下からダウンロードすることができます。
MicrosoftSQL Server2008 R2 SP2 - Express Edition
?A「タスクマネージャー」→「サービス」を開いて「SQL Server」を停止します。
?B破損しているデータベース(○○.MDF、○○.LDF)をファイルコピーし退避します。
?C「タスクマネージャー」→「サービス」を開いて「SQL Server」を開始します。
?DSQL Server Management Studioでデータベースを削除します。
?ESQL Server Management Studioで、
破損しているデータベースと同名の新規データベースを同一フォルダに作成します。
?F「タスクマネージャー」→「サービス」を開いて「SQL Server」を停止します。
?G退避していた破損データベースの○○.MDFを元のフォルダに上書きします。
?H「タスクマネージャー」→「サービス」を開いて「SQL Server」を開始します。
?IALTER DATABASE データベース SET EMERGENCY
エラーが表示されますが、
「コマンドは正常に完了しました。」と表示されるまで続けて実行します。
※クエリエディタを開き、ALTER DATABASE データベース SET EMERGENCYで、
EMERGENCYモードに変更します。
データベースは READ_ONLY に設定され、ログ記録が無効になり、
アクセスが sysadmin 固定サーバー ロールのメンバーに制限されます。
?BALTER DATABASE データベース SET SINGLE_USER
続けてデータベースをシングルユーザーモードに変更します。
?CDBCC CHECKDB ('データベース',REPAIR_ALLOW_DATA_LOSS)
DBCC CHECKDBを実行してデータベースを復旧します。
「データベースのプライマリ ファイルと一致しないファイルが 1 つ以上あります。」などの
エラーが表示されますが無視します。
?DALTER DATABASE データベース SET ONLINE
復旧が完了したらデータベースをオンラインに戻します。
?ESQL Server Management Studioでデータベースのプロパティを開き、
データベースをマルチユーザーモードに戻します。
「オプション」→「アクセスの制限」をMULTI_USERに変更し、「OK」をクリックします。
以上でデータベースの復旧が完了しました。
データベースにアクセスし動作確認を行ってください。
もし、上記作業を行っても、「スキーマが壊れている可能性があります」などのエラーが
表示される場合は、完全な復旧ができていません。
この場合は、破損データベースと同一構造の別名のデータベースを作成し、
「SQL Server インポートおよびエクスポートウイザード」を利用して、
テーブル、ビューをコピーすることで復旧を試みてください。
まとめ
今回はトランザクションログが破損したデータベースを確実に復旧させる方法を記載しました。
記載はしませんでしたが、作業の進捗に応じて、こまめにバックアップを残すことで、
最初から振り出しに戻って作業をする手間を軽減することができます。
また、繰り返しになりますが、
必ずしもデータベースの復旧が成功するわけではないので、
日頃からデータベースのバックアップを行うようにしてください。
【このカテゴリーの最新記事】
- no image
- no image
- no image