2

MySQL で SymmetricDS の 2 つのインスタンスを実行しています。

同期を開始および停止する必要があるため、次を使用します。

update sym_channel set enabled=0/1;

何らかの理由で同期 ( enabled=1) すると、次のエラーが表示されます。

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:     Cannot add or update a child row: a foreign key constraint fails (`test_db`.`defectstdreference`, CONSTRAINT `Relationship72` FOREIGN KEY (`improve_notice_doc_id`, `defect_id`, `client_id`) REFERENCES `improvementnoticedefect` (`doc_id`, `defect_id`, `client)

それでも、しばらくすると同期が正常に終了するため、この例外によってプロセスが大幅に遅くなります。

何がこれを引き起こしたのか、何か考えがありますか?

4

1 に答える 1

3

独自のチャネルを作成しましたか、それともデフォルトを使用していますか?

独自のものを作成した場合、それらは互いに独立して同期できます。その結果、2 つのテーブル間に外部キーがあり、親テーブルがチャネル A を使用し、子テーブルがチャネル B を使用する場合、チャネル B の変更がチャネル A の前に同期される可能性があり、外部キー エラーが発生する可能性があります。場合によっては、チャネル B がチャネル A の後に処理されることがあるため、これが予期しない動作を説明している可能性があります。SymmetricDS は、エラーが発生したバッチを再試行するため、最終的にそれらを順番に取得します。これらのエラーをすべて一緒に回避するには、関連するすべてのテーブルが同じチャネルに参加しているカスタム チャネルを使用しているかどうかを確認してください。

于 2015-04-23T12:51:28.177 に答える