ども、世界のうおじーです\(^o^)/
今回は川奈ホテルゴルフコースの絶景をお届けします。世界100選に名を連ねるこのコース、どうです、いい景色でしょ?ゴルファーなら一度はプレーしてみたいものですね!! www.princehotels.co.jp
さて今回は「システムを運用しているといつかは起きるシリーズ」です。 その中から選りすぐりの一本、DBが逝ってしまわれた時のお話です。
環境
- WindowsServer2008R2
- SQLServer2008 Standard
現象
- DBがずっと復旧中のままとなり、アクセス出来ない
- イベントログにエラーが出まくっている
対応①
まずぱっと見でこれはヤバい状態だと感じました。 ざっとぐぐるとデータベースファイル破損の可能性が浮上したので、整合性を確認すべく、以下の手順を試しました。
- 緊急モードに変更→DBが復旧中の場合何も出来ないので緊急モードに変更します。緊急モードになるとread only状態でアクセスが出来るようになります。
- 整合性を確認
- 整合性の確認結果→エラーなし→\(^o^)/となったので緊急モードを解除してみようと思います。
- まずはシングルユーザーモードに変更(復元中に他プロセスに変なアクセスされたくないので)
- 通常モードに変更
alter database [database_name] set emergency -- 1. DBCC CHECKDB([database_name]) --2. alter database [database_name] set single_user --4. alter database[データベース名] set online --5.
※整合性確認結果でエラーになった場合の対処法等はこちらを参照してください。 blogs.msdn.com
これで元通り!のはずでしたが、残念ながらいつまでたっても復旧中のままの状態(最初の状態)に戻ってしまいましたorz
対応②
どうすればいいのかと悩んだところ、イベントログに出ているエラーを検索しました。
システム アサーション チェックが失敗しました。詳細については、SQL Server エラー ログを確認してください。通常、アサーション エラーは、ソフトウェアのバグまたはデータの破損によって発生します。データベースの破損を確認するには、DBCC CHECKDB を実行して検討してください。場合はセットアップ中にダンプをマイクロソフトに送信するのには合意すると、ミニ ダンプがマイクロソフトに送信されます。更新プログラムは、マイクロソフトの最新の Service Pack またはテクニカル ・ サポートから QFE で利用できる可能性があります。
すると・・・あるじゃないですか!まさにこれ!!これに違いない!!!
https://support.microsoft.com/ja-jp/kb/980832
ということで早速パッチをあてました。ドキドキしながらの再起動・・・そして撃沈(´・ω・`)
結局
どうやっても復旧出来ないのでデータベースファイルが破損したものと考え、以下の手順でバックアップから戻しました。
- 緊急モードに変更(DBをデタッチするにもDBにアクセスできないので一旦緊急モードに変更)
- デタッチする
- バックアップファイルを復元する
次回
次回はバックアップのベストプラクティスを書いてみようと思います。
バイバーイ\(^o^)/