データベースの起動状態とトラブルシューティング
SQL Serverの起動プロセスにおいて、ユーザーデータベースが遭遇する主要な状態遷移とその対応手法について解説する。
主要なデータベース状態
- RECOVERING:トランザクションログを用いたリカバリ実行中
- RECOVERY PENDING:ファイルアクセス障害によるリカバリ中断
- SUSPECT:ファイル破損検知時の保護モード
- ONLINE:正常動作状態
ファイルグループ別障害対応
プライマリファイルグループ障害
エラー例:オペレーティングシステムレベルのファイルアクセス拒否
解決策:
- NTFS権限の再設定(管理者グループにフルコントロール権限付与)
- サービス再起動による状態確認
セカンダリファイルグループ障害
応急処置:
ALTER DATABASE SampleDB MODIFY FILE(NAME=SecondaryFile, OFFLINE);
ALTER DATABASE SampleDB SET ONLINE;
永久的な解決策:
- ファイルの物理的修復または代替配置
- ファイルグループバックアップからのリストア
トランザクションログファイル障害
回復モデル別挙動:
| 回復モデル | ログ喪失時の挙動 |
|---|---|
| SIMPLE | 新規ログファイルの自動再生成 |
| FULL | 整合性エラーによる起動失敗 |
FULLモデルでの対応:
- ログファイルの復旧またはバックアップからのリストア
- 緊急モードでの修復操作(最終手段)
データページエラー(824エラー)
生成条件:I/Oサブシステム障害によるページチェックサム不整合
修復方法
- ページリストア(SQL Server 2005以降)
- インデックス再構築(リーフページ損傷時)
- CHECKDBによる強制修復(データ損失リスクあり)
RESTORE DATABASE SampleDB PAGE='1:90'
FROM DISK = 'C:\Backups\SampleDB.bak'
WITH NORECOVERY;
疑念状態(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オプションはデータ損失を伴う
予防的措置
- 定期的な完全バックアップの実施
- ページチェックサム検証の有効化
- ストレージサブシステムの冗長化構成