web-dev-qa-db-ja.com

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

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

私はマスターのバックアップを持っていますが、 MSDNページ "Restoring the master Database" は、インスタンスをシングルユーザーモードで起動するように要求しますが、それはできません!

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

11
BradC

ここに私が調査するいくつかの道があります。これらのallは行わないでください(一部は同じ目的を達成するための異なる手法です)。

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

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

2。シングルユーザーモードでインスタンスを起動してみてください

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

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

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

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

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

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

  • もちろん、別の名前(master_please_god_let_this_work)、WITH 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を(上記のいずれかの方法で)正常に復元したら、復元したばかりのバックアップの後に行われた変更が失われた可能性がある場合は、それらを調査する必要があります。

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

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

12
BradC

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

2
B. Allen