Syniti DR -機能
レプリケーション検証機能で正常なレコードがソースのみ、ターゲットのみのレコードとして表示されます。
レプリケーションの検証をすることで、ソースのみのレコード、ターゲットのみのレコード、ソースとターゲットで差異のあるレコードを確認できます。
しかし、本来、ソースにもターゲットにも存在し、差異のないレコードがソースのみ、ターゲットのみに存在するレコードとして表示されることがあります。
これは、DBMotoはソースとターゲットのレコードを比較する前に主キーをベースにレコードのソートを行いますが、このときのソースDBとターゲットDBのソートの仕様の違いによるものです。
例えば、Oracleの場合、大文字、小文字を区別してソートするため、D→aの順番でソートされ、MySQLの場合、大文字、小文字を区別せずソートするため、a→Dの順番でソートされます。
このソートの順番が異なるため、このような結果が生じます。
この事象を回避するため、検証機能のオプション「ORDER BY句」の「ソーステーブル」「ターゲットテーブル」に「LOWER(主キー)」を入力してください。こうすることで、大文字、小文字の区別なくソートが行えるため、問題なく検証することが可能です。
複数のテーブル内のレコードを1つのテーブルに結合可能ですか?
可能ですが注意が必要です。
ミラーリング時はPKが各テーブルで重複していなければ問題ありませんが、リフレッシュ時はそのまま実行してしまいますとリフレッシュ前に一度レコードを削除する処理(DBMotoの仕様)が行われます。これを回避するためにスクリプトでリフレッシュ時にレコードを削除しないようブロックする必要があります。
なお、各テーブル内のレコードが結合後に重複する可能性がある場合は、PK代わりのフィールドを新規で作成することでPK重複エラーを回避可能です。
UPDATE時のみレプリケーション対象外とすることは可能ですか?
スクリプトで対応可能です。
リフレッシュ時にはまずターゲットのレコードを一度削除するようですが、削除しないようにできますか?
スクリプトで実現可能です。
データを加工したり変換してレプリケーションすることは可能ですか?
可能です。Expressionという機能を使用し、VB.NET の関数を使用できます。
自前の関数を定義して使用することは可能ですか?
可能です。スクリプトとしてオリジナルの関数を定義し、Expression という機能で呼び出すことが可能です。
レプリケーション対象外のフィールドがある場合に固定の値を必ず挿入する設定は可能ですか?
可能です。Expressionという機能を使用し、固定値を入れることも可能ですし、現在日時を挿入するなど、関数を使用することも可能です
nullを特定の値に変換してレプリケーションすることは可能でしょうか?
スクリプトを使用することで実現可能です。詳細は下記をご参照ください。
https://www.climb.co.jp/blog_dbmoto/archives/452
https://www.climb.co.jp/blog_dbmoto/archives/460