SQL Serverにおけるユーザーデータベースの起動エラーおよびファイル修復手法

データベースの起動状態とトラブルシューティング

SQL Serverの起動プロセスにおいて、ユーザーデータベースが遭遇する主要な状態遷移とその対応手法について解説する。

主要なデータベース状態

  • RECOVERING:トランザクションログを用いたリカバリ実行中
  • RECOVERY PENDING:ファイルアクセス障害によるリカバリ中断
  • SUSPECT:ファイル破損検知時の保護モード
  • ONLINE:正常動作状態

ファイルグループ別障害対応

プライマリファイルグループ障害

エラー例:オペレーティングシステムレベルのファイルアクセス拒否

解決策:

  1. NTFS権限の再設定(管理者グループにフルコントロール権限付与)
  2. サービス再起動による状態確認

セカンダリファイルグループ障害

応急処置:

ALTER DATABASE SampleDB MODIFY FILE(NAME=SecondaryFile, OFFLINE);
ALTER DATABASE SampleDB SET ONLINE;

永久的な解決策:

  1. ファイルの物理的修復または代替配置
  2. ファイルグループバックアップからのリストア

トランザクションログファイル障害

回復モデル別挙動:

回復モデル ログ喪失時の挙動
SIMPLE 新規ログファイルの自動再生成
FULL 整合性エラーによる起動失敗

FULLモデルでの対応:

  1. ログファイルの復旧またはバックアップからのリストア
  2. 緊急モードでの修復操作(最終手段)

データページエラー(824エラー)

生成条件:I/Oサブシステム障害によるページチェックサム不整合

修復方法

  1. ページリストア(SQL Server 2005以降)
  2. RESTORE DATABASE SampleDB PAGE='1:90' 
    FROM DISK = 'C:\Backups\SampleDB.bak' 
    WITH NORECOVERY;
  3. インデックス再構築(リーフページ損傷時)
  4. CHECKDBによる強制修復(データ損失リスクあり)

疑念状態(SUSPECT)データベース

修復プロセス:

ALTER DATABASE SampleDB SET EMERGENCY;
ALTER DATABASE SampleDB SET SINGLE_USER;
DBCC CHECKDB('SampleDB', REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE SampleDB SET MULTI_USER;

注: REPAIR_ALLOW_DATA_LOSSオプションはデータ損失を伴う

予防的措置

  • 定期的な完全バックアップの実施
  • ページチェックサム検証の有効化
  • ストレージサブシステムの冗長化構成

タグ: SQLServer DatabaseRecovery ErrorHandling DataPages DatabaseStates

8月15日 04:52 投稿