web-dev-qa-db-ja.com

いつCDCを使用して履歴を追跡するのですか?

SQL Server変更データキャプチャは、SQL Serverトランザクションログから履歴データを読み取り、それらを特別なテーブルに保存する機能です。

次に、特別なテーブル値関数(TVF)を使用して、ユーザーがこのデータをクエリできるようにします。これにより、特定のテーブルのすべての変更、または特定の時間内の変更から生じた最終的な変更のみを取得できます。

CDCには特定の利点があります

  • 特定のテーブルまたは列のみを追跡するように構成できます。
  • ある程度の機種変更にも対応可能です。
  • トランザクションログを使用するため、トリガーほどパフォーマンスに影響しません。
  • これは簡単に有効/無効にすることができ、追跡する必要のあるテーブルの追加の列を必要としません。

また、いくつかの欠点もあります。

CDCについてはかなり読みましたが、CDCの使い方はわかっていますが、それが自分にとって適切なツールかどうかはまだわかりません。

  1. どのタスク/シナリオでCDCが適切なツールですか?(たとえば、ユーザーがデータオブジェクトを特定の時点に復元できるようにしますか?監査しますか?データの履歴?)
  2. いつCDCを使用せずに、カスタムのトリガーベースのソリューションに頼るべきですか?
  3. 運用データベースでCDCを使用し、運用アプリケーション内でCDCデータを利用しても大丈夫ですか?(たとえば、エンドユーザーに表示する)または、これは明らかにこの機能の誤用ですか?

CDCは監査ツールであるとよく耳にしますが、 SQL Server Audit の目的は何ですか?同じタスクのために両方とも異なるツールですか?または、CDCを他のものに使用できますか?

私の現在のシナリオは、将来の複数のアプリケーションの基礎となるはずの信頼できるデータフレームワークを構築するように求められるというものです。正確な要件はぼやけていますが、1つは、データ履歴を追跡し、他のテーブルのすべての関連データとともに古いエントリを復元できることです。現在、CDCをオプションとして評価していますが、推奨されるユースケースが実際には見つからないため、これが方法かどうかはわかりません。

特定のシナリオについてアドバイスをいただければ幸いですが、回答では、Change Data Captureをいつ使用するか、いつ使用しないかについての一般的なアドバイスを提供します。

26
magnattic

SQL Serverデータの変更を監査するさまざまな方法を確認する、非常によく書かれた9部シリーズを次に示します。パート3、4、5はCDCに焦点を当てています。これは、機能が適切でオーバーヘッドになるさまざまなシナリオのような質問に答えるため、すべての記事を一読する価値があります。 http://solutioncenter.apexsql.com/tag/methods-for-auditing-sql-server

12
brynn

まず、

変更データキャプチャは、SQL ServerのEnterprise、Developer、およびEvaluationエディションでのみ使用できます。

そのため、エンタープライズエディションを持たない顧客がいるか、エンタープライズエディションを使用するかまだわからない場合は、それが決定する可能性があります。 (仕様には「複数の将来のアプリケーション」が含まれているため、これは実際の問題になる可能性があります)

トリガーとは異なり、リアルタイムではありません。これは利点と欠点の両方です。トリガーを使用すると、常に更新が遅くなります。

トリガー(CodeSmithによって生成された)を使用するときに1つのシステムで作業し、レコードへのすべての変更を追跡しました。また、変更を、変更を加えたアプリケーションのモジュールを含む「履歴」テーブルにリンクしました。ユーザーが変更に使用したUIアイテム。

ただし、すべての更新をメッセージキューに書き込み、任意の時点でデータベースを作成するために再生されるようにすることで、これをアプリケーションレベルで解決するのが最善の方法です。 Martin Flowlerブログの時間的パターン を参照してください。オプションの概要については、.

12
Ian Ringrose

CDCが適切なツールであるタスク/シナリオはどれですか? (例:ユーザーがデータオブジェクトを特定の時点に復元できるようにしますか?

たぶん、それは異なります。

監査?

はい。

データの完全な履歴を表示していますか?)

はい。

CDCを使用せずに、カスタムのトリガーベースのソリューションを使用する必要があるのはいつですか?

変更テーブルのデータがニーズを満たさない場合。

運用データベースでCDCを使用し、運用アプリケーション内でCDCデータを利用することは問題ありませんか? (例:エンドユーザーに表示する)

はい。

それとも、明らかにこの機能の誤用ですか?

いいえ、それはこの機能の誤用ではありません。

CDCは監査ツールであるとよく耳にしますが、SQL Server Auditの目的はそうではありませんか?

はい。

同じタスクのために両方とも異なるツールですか?

番号。

または、CDCを他のものに使用できますか?

CDCは他の用途にも使用できます。

変更追跡と変更データキャプチャがあります。どちらも複製にルーツがあります。

変更の追跡は、テーブルに対する最終的な変更を提供する方法を提供します。使用例としては、ハンドヘルドデバイスの同期があります。

一方、CDCはすべての小さな変更、履歴を追跡します。データを一括コピーする代わりに、その履歴を使用してデータウェアハウスを更新したり、その履歴をデータ自体として使用してレポートを生成したりできます。変更テーブルは非表示にならず、奇妙なスキーマなどもありません。クエリを実行して、必要に応じてデータを使用できます。覚えておいてください...イアンが言ったように、それはリアルタイムではありません。データはトランザクションログから取得されるため、レプリケーション、ミラーリング、またはログ配布を使用する場合と同様に処理してください。概して、トリガーよりも高速です。オーバーヘッドのあるスナップショット分離を使用する必要があり、災害復旧について考える必要があります。

9
stacylaray

修正のポイント。かつて、変更データキャプチャは上記のバージョンでのみ利用可能でした。ただし、変更データキャプチャは、2016 SP1以降の標準版で利用できるようになりました。したがって、2016 SP1より前に書かれた多くの記事は、CDCがスタンダードエディションを使用している私たちの手の届かないところにあるように聞こえます。これはもう当てはまりません。 CDCの利用可能性を概説するMicrosoftのドキュメントは、以下のリンクにあります。

https://docs.Microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2016?view=sql-server-2017#DW

2
Robert Sievers