web-dev-qa-db-ja.com

データベースがRESTORING状態で止まっている根本的な原因を特定する

データベースがRESTORING状態でスタックする問題を解決する質問があることを知っており、それらのソリューションを使用してデータベースを手動でオンラインに戻しましたが、私のシナリオは多少異なります。

本番環境のコピーをDEVインスタンスに復元するPowershellスクリプトを使用した自動復元があります。スクリプトは約1年間変更されておらず、復元プロセスが終了することもありますが、復元されたデータベースはRESTORING状態のままです(スクリプトが正常に機能することもあれば、このように失敗することもあります)。

プロセスを手動で再実行するか、SSMSのユーザーインターフェイスまたはT-SQLを使用してデータベースを手動で復元するたびに、問題なく完了します。

復元されたDBでCHECKDBを実行することを推奨する回答を見つけましたが、この問題の原因として何も出力されませんでした。

復元スクリプトはデータベースの完全バックアップを復元し、"WITH RECOVERY"オプションを使用するため、実際には"WITH RECOVERY"を使用して復元していますが、復元プロセスを停止している可能性があるものを見つけようとしています。

私はこれが時々起こっている理由を理解しようとすることに行き詰まっているので、どんな提案も本当に感謝しています。

症状を治療するのではなく、問題の根本的な原因を解決したいと思います。つまり、手動でDBをもう一度復元することです。

更新:

@Brent推奨のGithub Gist- here

10
Radu Gheorghiu

Occamのかみそり は、明白なものから始めることを提案します。

スクリプトによってデータベースが復元中の状態になることがある場合は、スクリプトをデバッグします。

まず、テーブルまたはファイルに何をしているのかを記録します。次に、データベースが復元状態になったら、ログをさかのぼって問題の原因を確認します。 (コミュニティから2つ目の目が欲しい場合は、スクリプトをGithub Gistとしてアップロードしてみてください。ただし、サイズを大きくすると、バグを見つけるのが難しくなる可能性があることに注意してください。)

それを実行したくない場合は、プロファイラーまたは拡張イベントのトレースを実行して復元イベントを追跡してみてください。ただし、警告が表示されます- 見た目よりもはるかに困難です (その投稿に関するコメントをお読みください彼らが試して失敗したさらに多くの読者のアイデア)

8
Brent Ozar