そこで、本番データベースの1つで変更データキャプチャを使用して調査を開始しました。各変更の日時を知りたいのですが。ウォークスルーやチュートリアルなどを読むと、標準的なアプローチは、LSNを使用してcdc.lsn_time_mapping
システムテーブルに関連付けることです。このアプローチは機能しますが、1日に数十万の変更について話す場合、それほど単純ではなく、効率的でもありません。
テスト環境で、変更トラックテーブルに次の調整を行いました。ALTER TABLE
末尾に列を追加するステートメントを発行し、[__ChangeDateTime]
それをデフォルト値にしましたGetDate()
。アプローチは機能しているようですが、変更の追跡は引き続き正常に機能し、日時が取得されています。 しかし、システムテーブルをいじくり回すと、少し緊張します。
これがMicrosoftが最初から追加したシステムフィールドでない場合は、理由があったはずです。代わりに、LSNからcdc.lsn_time_mappingへのアプローチを選択したので、この方法で独自のハックを作成することで、問題に備えていますか?
更新:
テスト中にGetDate()が時々私たちのニーズに対して十分に正確ではないことが発見されました-同じ時間を共有する複数の変更。sysdatetime()およびdatetime2を使用して値をナノ秒に移動することをお勧めします。2008+のオプションのみ明らかに。