DBMotoで差分レプリケーション(ミラーリング)を行う場合には、
原則複製先のターゲットDB側にPKが必要です。
参考:差分レプリケーションに必要なDBの主キーとDBMotoの仮想PK
//www.climb.co.jp/blog_dbmoto/archives/1114
もしDBにもPKがなく、DBMotoの仮想PKとするための一意の(値が重複しないユニークな)フィールド(またはフィールドの組み合わせ)が存在しない場合でも、差分レプリケーションを行うことが可能な方法があります。
方法は複製元のソースDB側のレコードIDを使用します。
例えば、Oracleの場合はROWIDに該当します。
ただし、この方法をとる場合には、ターゲット側DBに対して、ソースのROWIDとマッピングを行う専用のフィールドを新たに用意する必要があります。
以下設定手順です。
ソーステーブルは下記の3フィールドです。
PKの指定はありません。
一方ターゲットテーブルはソーステーブルの3フィールドに加え、ソーステーブルのレコードIDとマッピングするためのフィールドSP_IDを用意します。
このフィールドはDBのPK又はDBMotoの仮想PKの指定が必要です。
レプリケーション定義作成時のマッピング画面ではデフォルトで下記のように表示されています。
これはソースとターゲットで共通のフィールドのみマッピングされている状態です。
ソースのレコードIDとマッピングするターゲットのフィールドSP_IDを右クリックし、「関数へのマッピング」を選択します。
関数プログラムの画面で入力欄に[!RecordID]と入力します。または、左下ペインから値⇒Log Fieldを選択し、右下ペインから !RecordID をダブルクリックすることで上の入力欄に反映されます。
マッピング画面で下記のように表示されていれば問題ありません。
この状態でレプリケーションを開始しますが、ソースのレコードIDをターゲットのフィールドSP_IDへ反映させるために、初期リフレッシュから実行します。
初期リフレッシュ完了後は下記のように表示されています。
ソース側に1レコードを追加してみました。正常にミラーリングされていることが確認できます。
関連したトピックス
- AS/400でレプリケーションに必要なジャーナルが起動済みかを確認するためには?
- PostgreSQLに対してバルクインサートが可能に【DBMoto Ver8.5新機能①】
- Syniti(旧DBMoto)サーバーの移行方法の選択肢
- 複数ユーザ管理や統合管理に「リモート接続モード」:DBMoto
- 評価版申請の際の注意点【リアルタイムレプリケーションツールDBMoto】
- GlueSyncでNoSQL活用を加速:通知アラート、ログ、モニタリング
- DBMotoのエラー通知をもっと柔軟に、フィルタ設定で必要な通知のみをメール送付
- Teradataを構築してDBMotoでOracle等からTeradataへのリアルタイム・レプリケーション
- 差分レプリケーションに必要なDBの主キーとDBMotoの仮想PK
- GlueSyncでNoSQL活用を加速:データモデリング編