
はじめに
CData Sync v26.3 のリリースでは、ジョブの初期スナップショット挙動を制御する新しいレプリケートオプションのスナップショットモードが追加されました。
ジョブを開始するとき、既存データをどこまで取得してから差分レプリケーションに移行するかは、テーブルサイズやデータソース側の制約によって最適な選択が変わります。全件取得したい場合もあれば、範囲を絞りたい場合、スナップショット自体が不要な場合もあり、これまでの真偽値だけのオプションでは実際の運用ニーズをカバーしきれていませんでした。以下ではスナップショットモードの 3 つのモードと使い分けについて説明します。本記事では CData Sync 26.3.9704.0 を使用しています。
従来の課題
これまで、ジョブの初期スナップショットの挙動は複数の設定に分かれて存在していました。具体的には SkipSnapshot という真偽値のフラグと、スナップショット設定という 2 つです。SkipSnapshot は true に設定すればスナップショットをスキップし、false(デフォルト)であれば通常のスナップショットを取得するという単純な二択です。しかし、これだけで初期スナップショットのすべてが制御されていたわけではありません。
しかし実際の運用では、初期スナップショットに対して以下の 3 つのニーズが存在します。
範囲を絞って取得したい(大規模テーブルで全件取得の負荷を避けたい、または古いデータは不要なため除外したい)
全件取得したい(データソース側で開始位置を判断できない場合など)
スキップしたい(別ツールからの移行のためスナップショット自体が不要、または取得できない事情がある)
範囲を絞った取得は、スナップショット設定を駆使すれば初回レプリケーション時に実現できます。しかしこのオプションと SkipSnapshot がどう関係するのか、どちらを優先すべきなのかは分かりにくいものでした。両者は別々のオプションとして存在していたのです。全件取得したい場合も専用の選択肢はなく、「SkipSnapshot=false かつスナップショット設定の開始日も未設定」という状態に頼るしかありませんでした。こうして、初期スナップショットの挙動を一貫した形で見通すことは難しい状態が続いていました。
スナップショットモードとは
スナップショットモードは、上記の課題を解決するために追加された新しいレプリケートオプションです。初期スナップショットの挙動を、Incremental / Full / Skip の 3 つの値に統合しました。
モード | 概要 | スナップショット設定の開始日 | デフォルト |
|---|
Incremental (差分) | スナップショット設定の開始日を使ってスナップショットの範囲を限定する。設定がない場合はデータソース側から開始位置の動的な決定を試み、それも不可能な場合は Full にフォールバックする | 使用する | ○ |
Full (フル) | 範囲指定を無視し、追加条件なしの素の SELECT で全件取得する | 無視する | - |
Skip (スキップ) | 初期スナップショットをスキップし、タスク開始後の変更からレプリケーションを開始する | 無視する | - |
各モードの挙動と使い分け
Incremental(デフォルト)
Incremental はデフォルトのモードで、スナップショット設定の開始日を使って初期スナップショットの範囲を限定します。スナップショット設定の開始日が設定されていない場合は、データソース側から動的に開始位置の決定を試みます。どちらの方法でも開始位置を決定できない場合は、自動的に Full にフォールバックします。
大規模なテーブルを扱うジョブで、直近のデータだけを初期スナップショットとして取り込みたい場合に選びます。スナップショット設定の開始日と組み合わせることで、全件取得の負荷を避けながら、必要な範囲のデータを確実に取得できます。
Full
Full はすべてのスナップショット範囲指定を無視し、追加条件なしの素の SELECT を実行します。スナップショット設定の開始日を設定していても無視されます。
データソース側で開始位置を判断できず Incremental がフォールバックしてしまう状況が事前に分かっている場合や、範囲を絞らず確実に全件を取得しておきたい場合に選びます。テーブルサイズが大きいほど初回の処理時間は長くなるため、テーブルの規模を踏まえて選択してください。
Skip
Skip は初期スナップショットをスキップします。既存の SkipSnapshot=true と全く同じ挙動です。タスク開始後に発生した変更からレプリケーションが始まり、データソースの既存行はバックフィルされません。
よくあるのは、既存ツールからの移行です。すでに別のレプリケーションツールで同期先にデータが溜まっている状態で、ツールだけを CData Sync に切り替えたいというシナリオを考えてみましょう。この場合、同期先には既存データがすでに存在するため、初期スナップショットで同じデータを再取得する必要はありません。切り替え後に発生した変更分だけを CData Sync で追いかければよいため、Skip を選択することで不要なスナップショット処理を実行しないで移行することができます。
SkipSnapshot オプションについて
スナップショットモードが追加された後も、後方互換性のため SkipSnapshot はオプションとして残っています。ただし以下の優先順位と非推奨の扱いに注意してください。
SkipSnapshot=true が設定されている場合、これはスナップショットモードの設定より優先され、強制的に Skip 相当の挙動になります(SnapshotMode=Skip と同等)
SkipSnapshot=true が検出されると、ログに警告が出力されます。内容は SkipSnapshot が非推奨であり将来のリリースで削除される予定であること、SnapshotMode=Skip への移行を推奨することです
新規にジョブを設定する場合は、SkipSnapshot ではなくスナップショットモードの使用が推奨されます
旧オプションと新オプションの対応関係は以下のとおりです。
旧設定(SkipSnapshot) | 新設定(スナップショットモード) |
|---|
SkipSnapshot=false(デフォルト)
| SnapshotMode=Incremental
|
SkipSnapshot=true
| SnapshotMode=Skip
|
既存ジョブで SkipSnapshot=true を使っている場合、動作を変えずに SnapshotMode=Skip へ切り替えることができます。範囲を絞った取得(Incremental)や全件取得(Full)を試したい場合は、SkipSnapshot を false または未設定にしたうえでスナップショットモードを選択してください。
設定方法
1. スナップショットモードを設定する
CDC ジョブでは、タスク詳細画面の概要タブに「スナップショット設定」パネルが表示されます。このパネルの中に「スナップショットモード」という項目が追加されており、現在の値(例 差分)とその説明文が表示されます。値を変更するには、パネル右上の編集アイコンから操作します。

標準ジョブでは、タスク詳細画面の高度な設定タブ内にある「レプリケートオプション」セクションに Snapshot Mode の項目が表示されます。CDC ジョブと同様に現在の値と説明文が表示されます。値の変更は、セクション右上の編集アイコンから行います。

2. タスクを再同期する際にモードを選択する
タスクを再同期すると「タスクを再同期」というモーダルが開きます。このモーダルには「期間」「書き込みモード」など複数の再同期オプションが並んでおり、その 1 つとして「スナップショットモード」の項目も表示されるようになりました。他のオプションと同様に必須項目のドロップダウンで、選択した値に応じた説明文がその場に表示されます。

再同期のタイミングでどのスナップショット挙動を取るかをここで指定できます。たとえば通常運用では差分 (Incremental)を使いつつ、スキーマ変更後の再同期ではフル (Full)を選ぶ、といった使い分けが可能です。
まとめ
CData Sync v26.3 では、ジョブの初期スナップショット挙動が Incremental / Full / Skip の 3 モードで明示的に制御できるようになりました。既存ジョブで SkipSnapshot を使っている場合も、挙動を変えずにスナップショットモードへ移行できます。新規のジョブではスナップショットモードの使用をおすすめします。
CData Sync の 30 日間無償トライアルはこちらからダウンロードいただけます。
使っていて気になった点やご不明な点があれば、お気軽にテクニカルサポートまでお問い合わせください。