DBMotoのレプリケーションはすべてSQLのクエリで行われます。
差分レプリケーション(ミラーリング)を行う場合には、どのレコードをレプリケーション対象かを判別させるために、
Where句を指定したクエリを発行する必要があります。
これはすなわち主キー(PK)が必要であることを意味します。
下記にミラーリングを行う際に主キーが必要なケースをまとめます。
●ターゲットDB(複製先)の場合:
すべてのDBにおいて、主キーが必要です。
DBに主キーが存在しない場合には、DBMotoの機能で疑似的にwhere句の条件に指定するための「仮想PK」を設定することも可能ですが、
仮想PKに設定するフィールドは一意(重複しない)である必要があります。
1つのフィールドで一意を満たせない場合には複数のフィールドを仮想PK(複合キー扱い)とすることも可能です。
【注意】
ターゲットDBに主キーが存在しない場合にDBMotoの仮想PKを使用する場合、
主キーがある場合と比較して一回に処理するレコード数が多ければ多いほど、
パフォーマンスが劣化することがあります。
これはDB側にPKが存在しない場合でもインデックスを作成することで回避可能です。
●ソースDB(複製元)の場合:
DBによって異なります。
・AS/400の場合:
⇒DBの主キーはなくても問題ありません。その際仮想PKの設定も行わなくて問題ありません。
※全レコードの値をwhere句に指定して対象を判別します。
・Oracleの場合:
⇒DBの主キーはなくても問題ありません。その際仮想PKの設定も行わなくて問題ありません。
※ROWIDとORA_ROWSCNをwhere句に指定して対象を判別します。
・SQL Server(ディストリビュータ使用)の場合:
⇒DBに主キーが必ず必要です。仮想PKを使用することはできません。
※ディストリビュータの仕様です
・MySQL、DB2、SQL Server(トリガー使用)の場合:
⇒DBの主キーはなくても問題ありません。しかしその場合は仮想PKの設定が必ず必要です。
■仮想PKの設定方法
1. metadataの対象のソーステーブルを右クリックし、「主キー設定」を選択します。
関連したトピックス
- 各DBの権限とmetadataについて【リアルタイムレプリケーションツールDBMoto】
- 主キー(PK)もDBMoto仮想PKも指定せずに差分レプリケーションを行うには?
- 30台のDBに一括で同時にレプリケーションを実現【リアルタイムレプリケーションツールDBMoto】
- SQL ServerとMySQLリレーショナルデータベースの比較
- metadataを開く際にエラー「An error was generated while creating database」が発生した場合の対処
- MySQLで大文字のテーブル名を扱う&サーバ文字コード変更
- DBMoto6.Xでのバージョンアップ方法【リアルタイムレプリケーションツールDBMoto】
- 複数ユーザ管理や統合管理に「リモート接続モード」:DBMoto