Oracleからのミラーリングで「Record to update not found in target table」の後にターゲットへの補管INSERTでNOT NULL制約違反が発生する

まず更新対象レコードがターゲットに存在しない場合に「Record to update not found in target table」警告が発生し、その後DBMotoは補完INSERTを行います(行わないようにすることも可能です)

しかし Oracle のトランザクションログモードがLog Readerの場合、REDOログから取得できる情報は更新したカラムとPKのみとなります。
このため更新していないカラムはNULLとしてターゲットへのINSERTを行い、結果NOT NULL制約のカラムがあるとエラーになります。

対処方法は以下の2通りです。

1. Oracle のトランザクションログモードを「トリガー」にする(Oracle 10gかつDBMoto v9以降)

2. Oracle に対して以下のクエリを発行し、すべてのカラム情報をREDOログから取得できるようにする。
>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS

Posted in: Syniti DR -Oracle