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


8

「スタンバイファイル」がない場合、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を使用してすべてのオブジェクトを新しいデータベースコンテナーにコピーできると思います。目の前にデータベースの読み取り専用コピーがあるからです。

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

回答:


7

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%確実ではありません。一時的な復元であることを考えると、試してみる価値があるかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.