CData Software Blog

クラウド連携のCData Software の技術ブログです。

SQLServerのChangeTracking 機能による差分更新をサポートしました:CData Sync

f:id:sennanvolar44:20210528065730p:plain こんにちは、テクニカルサポートエンジニアの宮本(@miyamon44)です。

CData Sync の2021年バージョンでは大きな機能追加がいくつかあり、今回は SQLServer の Change Tracking 機能による差分更新方法についてご紹介していきます。
www.cdata.com

Change Tracking 機能とは

Change Tracking(CT) とは SQL Server にて変更情報を保持する機能になります。
SQLServer では同じような機能で Change Data Captrure(CDC) がありますが、これらの大きな違いは変更データの履歴を保持するかしないかになります。今回対応した Change Tracking 機能では、変更された内容ではなく行(どこの行かだけ)を保持しているだけなので、履歴情報を保持している CDC 機能よりパフォーマンスが良いと言われています。
詳しくは公式サイトをご参照ください。
docs.microsoft.com

CData Sync での Change Tracking サポートについて

Change Tracking が有効となっている SQL Server かつテーブルの場合、CData Sync では Change Tracking と連携して差分データを抽出することができます。これにより、SQL Server での差分更新が容易になったほか、更新日時系の項目がなくても差分更新を行うことが可能となりました。
※ChangeTracking 機能が使える SQLServer 2008 から CDataSync では当機能が使用できるようになっています。

cdn.cdata.com

手順

それでは実際に SQLSerevr の設定から CData Sync でジョブを実行するまでをやってみましょう。

SQL Server で Change Tracking 機能の有効化

まずは Change Tracking を有効にするために SSMS などで以下のSQLを実行します。

ALTER DATABASE [データベース名] SET CHANGE_TRACKING = ON;
ALTER DATABASE [データベース名] SET CHANGE_TRACKING(CHANGE_RETENTION = 5 MINUTES, AUTO_CLEANUP = ON);

change retention は変更情報の保持期間ですので、任意の値を設定してください。
詳しくは公式ドキュメントを参照ください。
変更の追跡の有効化と無効化 - SQL Server | Microsoft Docs

次に既存テーブルにて Change Tracking 機能の有効化を行います。
こちらの有効化用 SQL で指定したテーブルのみが Change Tracking の対象となります。

USE [DB名]
GO
ALTER TABLE [dbo].[テーブル名] ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON)

これで SQLServer 側での設定が完了となります。

CData Sync の設定箇所

接続設定やジョブのオプションなどに設定するといったことは、実はありません。
単純にジョブ作成の画面でチェックボックスにチェックを入れるだけとなります。
f:id:sennanvolar44:20210527185430p:plain

次に先ほど Change Tracking で有効化したテーブルを選択してレプリケートを行います。テーブルは「テーブルを追加」ボタンから選択できます。
f:id:sennanvolar44:20210527191553p:plain

生成したクエリを選んで実行してみますと、46件のレプリケートが完了しました。
f:id:sennanvolar44:20210527191905p:plain

では続けてもう一度行います。差分更新が自動的に有効になっているのであれば、0件となるはずです。

実行結果はこのように0件となりました。
f:id:sennanvolar44:20210527192157p:plain

続けて SQL Server の テーブルを更新してみます。今回はこのName の値を変更してみました。
f:id:sennanvolar44:20210527192423p:plain

この状態でもう一度レプリケートを行うと、変更した 1レコードだけがレプリケートされました。
f:id:sennanvolar44:20210528062251p:plain

Change Tracking 対象外のテーブルについて

Change Tracking を使用したジョブを設定する場合は、先ほどご紹介したようにジョブ作成時にチェックをつける必要がありました。
f:id:sennanvolar44:20210528063050p:plain

このチェックをつけたジョブの場合、Change Tracking を有効にしたテーブルのみがレプリケートできるようになり、それ以外(無効のままのテーブル)は「Change Tracking (CT) must be enabled on the source table to proceed.」とメッセージが表示されレプリケートが出来ないようになっています。
f:id:sennanvolar44:20210528063521p:plain

Change Tracking が無効のテーブルをレプリケートしたい場合は、先ほどのチェックボックスにチェックを入れずにジョブを作成してご利用ください。

おわりに

いかがでしたでしょうか。CData Sync V21 では SQL Server の CT 機能以外にも、Oracle の Flashback にも対応したり、データロード後のデータを変換する機能を追加したりと、前バージョンから大きくパワーアップしています!
是非この機会に 新しい CData Sync をお試しください。

www.cdata.com