web-dev-qa-db-ja.com

スタンバイファイルなしでスタンバイ/読み取り専用からSQLデータベースを回復できますか?

「スタンバイファイル」が見つからない場合、SQLデータベースをスタンバイ/読み取り専用モードから回復する方法はありますか?

(私はいくつかの参照 これをTUFファイルと呼ぶ をログ配布シナリオで見ますが、私の場合、それは手動の復元であり、スタンバイファイルにはBAK拡張子が付いていました。)

「RESTORE DATABASE foo WITH RECOVERY」を実行すると、致命的なエラーが発生します。

During startup of warm standby database 'foo', its standby file
('path\filename.bak') was inaccessible to the RESTORE statement.
The operating system error was '5(Access is denied.)'. Diagnose the
operating system error, correct the problem, and retry startup.

復元は少し前に行われ、残念ながらスタンバイファイルはバックアップフォルダーにあり、フォルダーのクリーンアップルーチンによって削除されました。他のメディアにはファイルのコピーはありません。この時点までの復元に使用された元のバックアップもなくなりました。

幸い、これは私たちにとって大した問題ではありませんが(一時的な復元でした)、「このファイルを削除しないでください」以外に、この質問に関して他に役立つ参照を見つけることができませんでした。

それが原因である場合、データベース全体をスクリプト化するか、SSISを使用してすべてのオブジェクトを新しいデータベースコンテナーにコピーできると思います。目の前にデータベースの読み取り専用コピーがあるからです。

この問題を修正する方法はありますか? 「復元」に戻して、その後の復元などを続行できるとは思いません。現在の状態で通常のオンラインモードに強制的に変更したいので、アクセス許可の変更、回復モードの変更、新しい完全バックアップなどの変更などです。

8
BradC

CONTINUE_AFTER_ERRORを使用すれば実行できることが判明

RESTORE DATABASE foo WITH RECOVERY, CONTINUE_AFTER_ERROR

試しても警告は表示されましたが、CHECKDBを実行してもエラーは発生しませんでした。

RESTORE WITH CONTINUE_AFTER_ERROR was successful but some damage was encountered. Inconsistencies in the database are possible.
RESTORE DATABASE successfully processed 0 pages in 4.180 seconds (0.000 MB/sec).
Msg 3441, Level 17, State 1, Line 13
During startup of warm standby database 'foo' (database ID 46), its standby file ('C:\MSSQL\Backup\foo_standby') was inaccessible to the RESTORE statement. The operating system error was '2(The system cannot find the file specified.)'. Diagnose the operating system error, correct the problem, and retry startup.

警告が与えられたので、適切なバックアップがなかった運用データベースで試してみるかどうかは100%確実ではありません。一時的な復元であることを考えると、試してみる価値があるかもしれません。

7
Kenneth Fisher