SQL Serverデータベースが状態の復元でスタックしている


79

Sharepointサーバーがあります。バックアップツールに問題があり、現在、一部のデータベースが復元状態のままになっています。

データベースの復元を示す画像

復元プロセスを停止することは可能ですか?また、データベースの整合性が損なわれていないことを確認するにはどうすればよいですか?

回答:


129

これはおそらく、復元スクリプトがWITH NORECOVERYパラメーターを追加して、復元後にデータベースをトランザクションログの適用に対応できるようにするために発生します。

データベースは現在、最新のトランザクションログファイルを待機しています。

次のいずれかが可能です。

  1. RESTORE LOG database_name FROM backup_device WITH RECOVERY;...またはを使用して、最新のトランザクションログを適用します
  2. データベースを再度復元しますが、今回は... WITH RECOVERY;...または
  3. 以下を実行して、データベースを強制的に復元モードから解除します。 RESTORE DATABASE YourDb WITH RECOVERY;

これを行う前に、これらのオプションの意味を理解してください。注意しないと、データが失われる可能性があります。

詳細はこちらをご覧ください:


これらが機能しない場合は、dba.stackexchange.com / questions / 11175 /を参照してください。繰り返しますが、自分が何をしているのか分からず、データ損失の完全なリスクを理解していない場合は、多くの警告があります。しかし、非実稼働サーバーでバインドしている場合は、新しい復元を実行するための適切なバックアップがあり、そのサーバーでSQLを再起動する余裕があります。
NateJ

6
「RESTORE DATABASE YourDb WITH RECOVERYを実行して、データベースを復元モードから強制的に解除します」。20分間のヘッドスクラッチとサービスの再起動後、1つのライナーで修正。ありがとう!
エキロン

2
私は開発ボックスと同じ状況に悩まされていました。オプション3は魅力的でした!
モイズタンキワラ

DBを.bakから新しい DB に復元しようとしましたが、ディスク上のファイル名を変更するのを忘れました。復元は失敗しましたが、ファイルが既存のデータベースで使用されていたためではなく、他のエラーが原因でした。これにより、既存のDBが台無しになりました(復元状態でスタック)。#3すぐにオンラインに戻し、データをすべてチェックして問題なく見えるようにします。ありがとう!
CoDEmanX

44

この問題を解決するための簡単なT-SQLスクリプト:

新しいクエリウィンドウでこのスクリプトを記述して実行します。

RESTORE DATABASE [DataBase Name] WITH RECOVERY;

RESTORE DATABASE [database_name] WITH RECOVERY ....完璧に機能しました。ありがとうございました!

10
その影響を理解するように非常に注意してください。DBがログの復元を待機している場合、かなりのデータが失われる可能性があります。
デビッドスピレット14年

2
「ログが復元されなかったため、データベースを回復できません。」という
イアン・ボイド

0

私はちょうどこのような状況にあり、治療法は非常に驚くべきものでした:

ALTER DATABASE DBName SET ONLINE;

破損したNetBackupの復元により、奇妙な状態になったようです。他のソリューションは機能しませんでした(SQL Serverサービスの再起動はまだ試していませんでした)

ただし、理論的には復元が開始されて失敗すると、データが破損する可能性があるため、データベースには注意してください。とにかくデータベースを復元するだけなので、私には関係ありません。


これはこの質問に対する間違った答えです。「復元中」のデータベースをオンラインに設定しようとすると、「データベースが復元中の状態ではデータベースを変更できません」というエラーが表示されます。
ジェームズジェンキンス

おそらく、StackOverflowの使い方に慣れていない場合、投稿された質問とは少し異なる質問に答えることがあります。多くの場合、人々はオンラインで検索した後に自分の質問に似た質問をするため、これは価値をもたらします。あなたの事実上の主張についてはALTER DATABASE許可されていない、私は私の場合には、データベースが実際に状態を復元のように見せていた、そして使用することをお約束SET ONLINE実際に働きました。だから、あなたは私を間違っている、または嘘をついていると言っていることを理解してください。これは、代替手段が利用可能なときに本当に必要なことですか?
ErikE

@JamesJenkinsそして、その代替は何ですか?代替案は、データベースが状態の復元中に表示されるが、実際には復元されないという仮説です。または、復元の最終ステップで、復元を実際に完了して、実際にONLINE状態に設定できるようにすることもできます。要するに、あなたのコメントと下票はこのサイトの範囲外であり、私が提示したデータで適切に修飾されていないため、あなたの情報は事実上間違っていると思います。
ErikE

0

ご存知のように、デフォルトのデータベース復元オプションは、データベースの復元が完了した後、データベースが使用可能でオンラインで使用できることを保証するリカバリ機能です。

例:

RESTORE DATABASE YourDB FROM DISK= 'C:\\Data\\YourDBBackup.bak'
WITH RECOVERY
GO

NO Recoveryを使用した復元に関する重要なポイントを見てみましょう

  • データベースは使用できません
  • 復元モードのまま
  • 次の復元シーケンスを実行できます
  • コミットされていないトランザクションをロールバックしません

NoRecoveryを使用した復元

このオプションは、特に複数のバックアップを復元する場合に使用されます。つまり、norecoveryオプションを指定してrestoreコマンドを実行すると、最後のバックアップが順番に復元されるまで、データベースはユーザーに解放されません。最後のバックアップでは、回復オプションが使用され、データベースがオンラインになります。

例:

RESTORE DATABASE YourDB FROM DISK - 'C:\\Data\\Backup_part1.bak' 
WITH NORECOVERY
GO

その後:

RESTORE LOG YourDB FROM DISK = 'C:\\Data\\BackupLog-part2.trn'
WITH RECOVERY
GO

1
答えにタイプミスがあるかもしれません。... Recovery with Restoreについてマークされたセクションには、オプションに適用されるすべてのオプションがリストされRESTORE ...WITH NORECOVERYます。再確認していただけますか?
hot2use
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.