差分レプリケーションに必要なDBの主キーとDBMotoの仮想PK


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の対象のソーステーブルを右クリックし、「主キー設定」を選択します。

2. 主キー設定画面が開きます。

3. 仮想PKに設定したいフィールドを右側へ移動します。

 

関連したトピックス

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

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