web-dev-qa-db-ja.com

SQL Server DBで差分を毎日復元する方法

SQL Server DBを使用して作業しているときに必要なのは、DB1があり、クライアントサイトがこのDBと通信していることです。アプリケーションのレポートモジュールも同じDBを使用しています(つまり、Webページに異なるレポートが表示されます)クライアントはインスタンスを別のDB、つまりDB2に報告する。

私たちがする必要があるのは、DB1の新しいDB2 i-eコピーを作成し、毎日、DB1の差分バックアップをとり、それをDB2に復元することです。

このため、私はこのクエリを使用してDB1の差分バックアップを取ろうとしました、

BACKUP DATABASE [DB1] TO  DISK = N'D:\DB_location\DB1-Diff.bak' 
WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  NAME = N'DB1-Differential Database Backup', 
SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

それをDB2に復元するにはiを使用します

RESTORE DATABASE [DB2] FROM  DISK = N'D:\DB_location\DB1-Diff.bak' 
WITH  FILE = 1,  norecovery,  NOUNLOAD,  STATS = 10
GO

最初は完璧に動作しますが、次回はエラーが表示されます:

Msg 3117, Level 16, State 4, Line 1
The log or differential backup cannot be restored because no files are ready to rollforward.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

トランザクションログのバックアップを使用できるかどうかもアドバイスしてください。それが差分バックアップよりも問題が多い場合は、この問題を解決するのに役立つ人がいますか?.

前もって感謝します。

6
NoNaMe

レポートの最新性に応じて、以下を使用できます。

  1. ログ配布:セカンダリでのログの復元が遅延し、ログを復元するときに、切断されたユーザーのみが読み取るセカンダリを選択します。これにより、セカンダリサーバーからの読み取りが可能になります。

    セカンダリの復元頻度のバランスを取る必要があります。

    ログ配布は、アプローチに比べてはるかに効率的であり、そのまま使用でき、監視することもできます。さらに、プライマリがダウンした場合にDRとして機能するウォームスタンバイサーバーを取得します(警告は-ログの復元頻度によっては、ある程度のデータ損失が発生します)

  2. トランザクションレプリケーション:メインデータベースでスキーマの変更が行われておらず、ほぼリアルタイムのレポートが必要な場合は、T-repを使用できます。レポートに必要なオブジェクトのみを複製していることを確認してください。最初のスナップショットは、メインデータベースにいくらかのペナルティがあります。

補足として、使用しているSQLサーバーのバージョンとエディションに応じて、2012以降では、読み取り可能なセカンダリを使用してAlwaysONを活用し、レポートをセカンダリサーバーにオフロードできます。

さらに詳しい説明が必要な場合はお知らせください。喜んでお手伝いさせていただきます。

編集:

最初は完璧に動作しますが、次回はエラーが表示されます:

その理由は、完全バックアップのFirstLSNが差分バックアップのDifferentialBaseLSN ==>と一致しないためです。つまり、値が一致しない場合は、完全バックアップの後に差分を指定する必要があります。

enter image description here

2
Kin Shah

このエラーは、差分バックアップを復元する前に完全バックアップが復元されなかった場合、またはWITH RECOVERYオプションを使用して完全バックアップが復元された場合に発生します。差分バックアップを復元しようとするときに、データベースが稼働状態でないことを確認してください。

下記のブログをご覧ください。

http://blog.sqlauthority.com/2010/03/21/sql-server-fix-error-3117-the-log-or-differential-backup-cannot-be-restored-because-no- files-are-ready-to-rollforward /

3
Karthick

答えは簡単で、最初に完全バックアップを復元していません。差分バックアップは、完全バックアップの実行後に変更されたエクステントに関する情報を持っているため、最新の完全バックアップからのみ有効です。したがって、完全バックアップを取り、復元してから差分バックアップを復元しない限り、取得したエラーで失敗し続けます。

0
Shanky