マスターデータベースが破損している、インスタンスが起動しない-私のオプションは何ですか?


11

助けて!マスターデータベースが破損しています。SQLインスタンスをオンラインにすることもできません。サーバーをバックアップするためのオプションは何ですか?

マスターのバックアップはありますが、MSDNページの「Restoring the master Database」で、インスタンスをシングルユーザーモードで起動するように求められますが、それはできません!

(注:この質問は、SQLバージョンに関しては未指定のままにしておきます。これは、より広く適用できる参照となるようにするためです。DBA.SEにも同様の質問がいくつかありますが、サーバーが起動できないことに関する質問はありません。)


(コメントやその他の回答は確かに歓迎されますが、Webの他の場所では見つけられなかったいくつかの側面を含む包括的な回答を提供するためにこれを求めました。)
BradC

回答:


12

ここに私が調査するいくつかの道があります。これらのすべてを実行することはしないでください(一部は同じ目的を達成するための異なる手法です)。ただし、検討する価値があります。

1. SQLエラーログを直接調べる

SQLエラーログを含むフォルダーを直接参照し、最新のものERRORLOGをメモ帳に読み込んで、SQLインスタンスが起動しない理由の詳細を取得します。おそらく、問題はmasterデータベースにまったくないことがわかります。

2.シングルユーザーモードでインスタンスを起動してみます

(シングルユーザーモード)と(最小構成モード)を含むSQLサーバーの起動オプションの完全なリストを次に示します。他のオプションを使用すると、masterデータベースのパスを指定できます(問題がある場合)。-m-f

インスタンスを起動できる場合は、マスターデータベースを復元するためにリンクたMSDNの記事の手順、またはThomas LaRockによるこの詳細なウォークスルーに従ってください

別のアプリケーションが常にシングルユーザー接続を取得する前に取得できる場合は、最初にSQLエージェントを無効にして、起動しないようにします。次に、パラメーターを使用してアプリケーション名を指定することについて、この質問に関するアイデアを参照してください-m"Application Name"

3. master別のインスタンスに復元し、そのファイルをコピーします

この文書化されていない手法については、もう1つだけ言及しましたが、この週末はうまく使用できたので、試してみる価値はあります。

シングルユーザーモードでインスタンスを起動できない、まったく同じリリースとビルドを実行している別のSQLインスタンスがある場合は、最後の既知の正常なマスターデータベースのバックアップを停止したサーバーから他のインスタンスに復元してみます。

  • もちろん、別の名前で復元する(master_please_god_let_this_workWITH MOVEのでmaster、適切なサーバーで上書きしないでください。
  • 復元しWITH NORECOVERYます。これが必要かどうかはわかりませんが、復元されたマスターで他のサーバーが何も変更しないことを知っていたので気分がよくなりました
  • オフラインに設定します。 ALTER DATABASE [master_please_god_let_this_work] SET OFFLINE
  • 正常なサーバーから停止したサーバーに、復元されたMDFおよびLDFファイルをコピーします。
  • 必要に応じてmaster.mdfおよびmastlog.ldfファイルの名前を変更し、不良マスターファイルを復元したバージョンに置き換えます
  • 指を交差させてインスタンスを開始します
  • オプション:復活したサーバーでマスターの新しい復元を実行します。変更しないようにかなり注意していたので、これが必要かどうかはわかりませんmaster

4.システムデータベースを再構築する

同じバージョンを実行している別のインスタンスがない場合、または#3に記載されている文書化されていない手順の使用に慣れていない場合、またはバックアップがない場合masterなぜバックアップがないのですか?元のインストールディスクからSQLシステムデータベースを再構築できます

Setup.exe /ACTION=REBUILDDATABASE /...

これが完了したら、前にリンクされた手順に従って、master最後の適切なバックアップから復元できます。msdbすべてのジョブ、ジョブスケジュール、およびジョブ履歴を保持するために、の最近のバックアップを復元する必要もあります。

5.すべてのUSERデータベースを新しい(または既存の)SQLインスタンスに復元する

別の既存のインスタンスが既に実行されている場合(適切なSQLバージョン、十分なディスク領域)、おそらく必要に応じて、上記の他のトラブルシューティング手順を実行している間、おそらく最新のバックアップからデータベースの復元を開始します。

新しい(または再インストールされた)インスタンスが同じディスクにアクセスできる場合、それらを新しいデータベースとして接続する方がはるかに高速です。

CREATE DATABASE foo 
ON (FILENAME = 'D:\data\foo.mdf'),
   (FILENAME = 'D:\data\foo_log.ldf')
FOR ATTACH;

6.変更をやり直します master

master(上記の手法のいずれかを使用して)正常に復元したら、復元したばかりのバックアップの後に行われた変更が失われた可能性がある場合は、変更を調査する必要があります。

  • セキュリティの変更
  • 新しいデータベース(ファイルはディスク上に残りますが、添付するだけです)
  • サーバー全体の設定

これらを見つけるための魔法の方法はありません。これらの種類の変更がある場合は、自社のドキュメントトレイルに戻ってこれらの種類の変更を行う必要があります。


1
素敵なポスト。+1。マスターを破損させ、別のサーバーにバックアップを復元し、ファイルを古いサーバーにコピーするテストを行いました。問題なく動作しました。ちなみに、マスターが破損しているときにエラー3411が発生しました。
レーサーSQL

そのテクニックを検証してくれてありがとう。私の場合、実際にエラーが発生することはありませんでしたが、私のマスターデータベースは、クラスターサービスのタイムアウト設定をはるかに超えて、回復に数時間かかっていました。
BradC 2017

1
@RafaelPiccinelliマスターは、サーバー上のすべて(セキュリティ、その他のデータベースなど)に関する「メタデータ」を保持するため、理にかなっています。ポイント5と6を参照してください。これらのデータベースを再接続して、セキュリティを設定し直す必要があります。ところで、私はあなたがラボ環境でこれをすべてやっていることを願っています!!
BradC 2017

はい、それがテストの理由です。エラーが発生しましたが、おそらくストレージで許可を得ています。再び、いいポスト。私はこの最後のコメント笑を削除します。
レーサーSQL

2

私が遭遇した可能性のある問題と解決策を追加したかっただけです-累積的な更新(SQL2016 CU12)が失敗したときに同様の状況が発生し、イベントビューアにメッセージが表示され、「マスターデータベースをリカバリできません。SQLServerはエラーメッセージです。実行できません。マスターを完全バックアップから復元、修復、または再構築してください。」というメッセージが表示されましたが、CU実行可能ファイルを再実行しただけでは、アップグレードステータスが「不完全にインストールされている」と検出され、再度更新すると、正常に完了し、masterデータベースと他のすべてのデータベースが問題なく開いた。


リストへの良い追加; 含めてくれてありがとう。
BradC
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.