レプリケーションされるレコードをフィルタリングするスクリプト【DBMoto】


弊社のDBMotoでは異なるデータベース間でのデータレプリケーションが可能です。
レコード全件を片方からもう片方へコピーするリフレッシュ、変更したレコードを検知して反映するミラーリング、変更を互いに反映するシンクロナイゼーションの3種類があります。
これらのレプリケーションジョブには必要に応じ、スクリプトにより対象とするレコードを限定するような条件をつけることができます。

本記事ではミラーリング時にフィルタリングをするスクリプト3つ、シンクロナイゼーション時にフィルタリングをするスクリプト1つを紹介いたします。

  1. 指定したカラムで特定の範囲の値を取っているレコードのみをリフレッシュ・ミラーリングする。その後ソース側で削除があってもターゲット側で特定の範囲の値を取っているレコードは削除しない。
    サンプルスクリプト:filtering_1.txt 

    ●スクリプトの内容
    ソース側の、id1というint型のカラムの値が3より大きいとき、リフレッシュ及びミラーリングを停止する(=3以下はリフレッシュ・ミラーリングを行う)。
    ソース側でレコードの削除があっても、id1の値が3より大きいレコードに関しては、ミラーリングしない。

  2. 指定したカラムで特定の条件に当てはまるレコードの削除をミラーリングしない
    サンプルスクリプト:filtering_2.txt 

    ●スクリプトの内容
    ソース側でレコードの削除があっても、id1の値が3より大きいレコードに関しては、ミラーリングしない。
    (1つ目のスクリプトから削除のミラーリングに関わる部分を抜き出したものです。)

  3. ソース側でのレコードの削除をミラーリングしない
    サンプルスクリプト:filtering_3.txt 

    ●スクリプトの内容
    ソース側でレコードの削除があっても、その変更を一切ミラーリングしない。
    (2つ目のスクリプトから条件を問わず削除のミラーリングをしないように編集したものです。)

  4. シンクロナイゼーションで相手方に対し反映するレコードのデータをフィルタリングする
    サンプルスクリプト:filtering_4.txt 

    ●スクリプトの内容
    ソース側のレコードのうち、DataTime型のカラムの値が指定期間の間に収まっているレコードのみをターゲット側に反映。
    ターゲット側にあるデータで、同じ指定期間内にあるレコードが挿入・更新・削除された場合はソース側に反映する。

関連したトピックス

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください