助けて!マスターデータベースが破損しています。SQLインスタンスをオンラインにすることもできません。サーバーをバックアップするためのオプションは何ですか?
私はマスターのバックアップを持っていますが、 MSDNページ "Restoring the master Database" は、インスタンスをシングルユーザーモードで起動するように要求しますが、それはできません!
(注:この質問は、SQLバージョンに関しては未指定のままにしておきます。これは、より広く適用できる参照となるようにするためです。DBA.SEにも同様の質問がいくつかありますが、サーバーを起動できないという質問はありません。)
ここに私が調査するいくつかの道があります。これらの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
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
を(上記のいずれかの方法で)正常に復元したら、復元したばかりのバックアップの後に行われた変更が失われた可能性がある場合は、それらを調査する必要があります。
これらを見つける魔法の方法はありません。これらの種類の変更がある場合は、自社のドキュメント追跡に戻ってこれらの種類の変更を行う必要があります。
発生した可能性のある問題と解決策を追加したいだけです-累積的な更新(SQL2016 CU12)が失敗したときに同様の状況が発生し、イベントビューアにメッセージが表示され、「マスターデータベースを回復できません。SQLServerはエラーメッセージです。実行できません。マスターを完全バックアップから復元、修復、または再構築してください。」というメッセージが表示されましたが、CU実行可能ファイルを再実行しただけでは、アップグレードステータスが「不完全にインストールされた」と検出され、もう一度更新します。その後、正常に完了し、masterデータベースと他のすべてが問題なく開きました。