web-dev-qa-db-ja.com

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

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

Image showing restoring databases

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

87
Pooya Yazdani

これは、リストアスクリプトがWITH NORECOVERYパラメータを追加して、リストア後にデータベースがトランザクションログを適用できるようにするために発生する可能性があります。

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

次のいずれかを行うことができます。

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

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

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

135
Thomas Kejser

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

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

RESTORE DATABASE [DataBase Name] WITH RECOVERY;
52
Sina

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

例:

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

Restore with NO Recoveryの重要なポイントを見てみましょう

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

NoRecoveryで復元

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

例:

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
0
Priyanka

私はこの状況にあっただけで、治療法は驚くべきものでした。

ALTER DATABASE DBName SET ONLINE;

どうやら、壊れたNetBackupのリストアは、変な状態のままにした。他の解決策は機能しませんでした(ただし、SQL Serverサービスの再起動はまだ試していません)

データベースには注意しますが、理論的には復元が開始して失敗すると、データが破損する可能性があります。とにかくデータベースをもう一度復元するので、それは私には関係ありません。

0
ErikE