web-dev-qa-db-ja.com

NO_LOGオプションで実行されたMSSQLバックアップを復元します

あるサーバーから別のサーバーへのデータベースのコピーをスクリプト化しています。どちらもSQLServer 2005を実行しており、データベースは完全復旧モードです。

これらのデータベースのトランザクションログは非常に大きくなる可能性があるため、コピー先のサーバーでは必要ありません。 (つまり、任意の時点に復元できる必要はありません。バックアップが実行された時点でデータベースのコピーが必要なだけです)。したがって、可能であれば、ログバックアップの実行にかかる時間を避け、低速のネットワークを介してコピーして復元したいと思います。

これを実現するために、「NO_LOG」バックアップオプションを使用しようとしています。これによりバックアップは正常に生成されますが、バックアップをターゲットサーバーに復元しようとすると、データベースは「復元中」の状態のままであり、アクセスできません。これは、トランザクションログを復元することを期待しているためだと思います。

これを回避して新しい空のトランザクションログを作成する方法はありますか?重要なため、バックアップ(NO_LOGなし)を実行する前に、ソースサーバーのトランザクションログを切り捨てることはできないことに注意してください。

そうでない場合、バックアップ/復元以外にデータベースのコピーを取得するための他のオプションはありますか?私はすでにすべてのオブジェクトとデータをスクリプト化する「転送」方法を試しましたが、オブジェクトの数が多いため、これは私のニーズには遅すぎます。

ありがとう

編集:使用されるコマンドは次のとおりです

BACKUP DATABASE FrontEnd TO DISK='c:\somepath\abackup.bak' WITH NO_LOG, COPY_ONLY

RESTORE DATABASE FrontEnd FROM Disk='c:\somepath\abackup.bak' WITH RECOVERY

このコマンドへの応答は次のとおりです。

Processed 1944 pages for database 'FrontEnd', file 'DimensionPrototype' on file 1.
The database cannot be recovered because the log was not restored.
This RESTORE statement successfully performed some actions, but the database could not be brought online because one or more RESTORE steps are needed. Previous messages indicate reasons why recovery cannot occur at this point.
RESTORE DATABASE ... FILE=<name> successfully processed 1944 pages in 0.923 seconds (17.253 MB/sec).
2
rnwood

これを行う最も簡単な方法は、フロントエンドデータベースのトランザクションログを初期サイズに縮小してデータベースをバックアップしてから、トランザクションログを適切なサイズに戻すことです。

これは、最小限のトランザクションアクティビティが発生している静かな時間に実行する必要があります。

0
SuperCoolMoss

これを実現するために、COPY_ONLYオプションとともにNO_LOGを使用する必要はありません。 COPY_ONLY完全バックアップは、リカバリで復元するのに十分です。データベースを復元すると、バックアップが作成されたときのサイズにログファイルとデータファイルが作成されます。あなたはそれを回避することはできません。 NO_LOGはトランザクションログを切り捨てているため、これを実行した後、プライマリデータベースのポイントインタイムリカバリを実行することはできません。このコマンドを発行した場合は、標準の完全バックアップを実行して、バックアップセットを最初からやり直す必要があります。

2

まず、トランザクションログ全体(.ldfファイル)がバックアップファイルに含まれるという誤解があるようです。これはそうではありません。 SQL Serverは、復元操作でデータベースを回復できるように、十分な量のトランザクションログをコピーします。

データベースを復元できない理由は、データベースが回復を実行できるようにするために、復元したばかりのバックアップの上にログバックアップを復元する必要があるためです。 SQL Serverは、ログのバックアップがないと、復元からデータベースをオンラインにすることはできません。詳細については、これを参照してください ms kb article

これを回避する方法はありません。それを吸い上げて、もう少しディスクスペースを購入してください。

1
Nick Kavadias