web-dev-qa-db-ja.com

MSDTCとディザスタリカバリは連携していますか?

このアプリケーションは、分散トランザクション内の複数のSQLServerデータベースに書き込みます。 Opsの担当者は、ライブテーブルのトランザクションが同時にコミットされる可能性がある一方で、個別のデータベースでのログ配布がわずかに異なる時間に発生するため、これがディザスタリカバリ計画を台無しにすると言っています。したがって、災害復旧の状況では、いくつかの部分的なトランザクションが発生します。

DRで個別の同期されたデータベースを維持する方法はありますか?または、比較的独立したデータベース(または単一のデータベース)に再設計する必要がありますか?

2
DevDelivery

運用のディザスタリカバリ計画が何であるかはわかりませんが、すべてのデータベースが一貫した状態にあることを保証する特定のトランザクションにリカバリできます。これを行うには、 Marked Transactions を使用します。

このアプローチの1つの制限は、マークされたトランザクションにのみ回復でき、特定の時点には回復できないことです。それがあなたの戦略を台無しにするかどうかはわかりません。

上記の記事から、基本的なアプローチは次のとおりです。

  1. 関連する各データベースの完全バックアップまたは差分データベースバックアップを作成します。
  2. すべてのデータベースでトランザクションブロックをマークします。
  3. すべてのデータベースのトランザクションログをバックアップします。
  4. NORECOVERYを使用してデータベースのバックアップを復元します。
  5. STOPATMARKを使用してログを復元します。

トランザクションマークトランザクションの2フェーズコミット中に、他のトランザクションがブロックされ、パフォーマンスに影響を与える可能性があることに注意してください。

1
Randy Levy

マークされたトランザクションの使用は、IMOであり、ケースデータベースで、個別の物理境界を越えて論理アプリケーションの整合性を維持するための最良の方法です。

もう1つのオプションは、SQLミラーリングを使用することです( http://technet.Microsoft.com/en-gb/library/cc917680.aspx )。つまり、完了としてマークされる前に、2つのデータベース(メインサイトに1つ、DRサイトに1つ)でトランザクションが完了していることを確認する方法です。明らかなパフォーマンスへの影響があり、これがアプリケーションの問題であるかどうかを判断する必要があります。

0
commandbreak