連絡先の保存時にトランザクションのロールバックを引き起こす原因は何ですか?

CiviCRM
4.7.27には、「連絡先の編集」フォームの変更が保存されていない連絡先がいくつかあります。更新クエリはMySQLに正しく送られていますが、ROLLBACKステートメントによって終了されているトランザクションに入っています。これは明らかに変更を取り消します。

他のすべての連絡先については、変更はROLLBACKなしで正常に保存されます。

1つの「保存」フォーム提出のクエリの例:

UPDATE  civicrm_contact  SET contact_type = 'Individual' , contact_sub_type = NULL , sort_name = 'jones, jennifer' , display_name = 'jennifer jones' , first_name = 'jennifer'   WHERE (  civicrm_contact.id = 3198 );
UPDATE  civicrm_uf_match  SET domain_id = 1 , uf_id = 6839 , uf_name = '[email protected]' , contact_id = 3198   WHERE (  civicrm_uf_match.id = 2754 );
UPDATE civicrm_group g SET    cache_date = NULL, refresh_date = NULL WHERE  g.cache_date <= '20180503151700';
UPDATE civicrm_setting SET value = 'LnnjD1Un' WHERE name='navigation' AND contact_id IS NOT NULL;
UPDATE civicrm_contact SET  email_greeting_custom = NULL , email_greeting_display = 'Dear jennifer', postal_greeting_custom = NULL , postal_greeting_display = 'Dear jennifer', addressee_custom = NULL , addressee_display = 'jennifer jones' WHERE id = 3198;
... (and lots of delete/insert on civicrm cache tables.)

このROLLBACK文のソースと原因をどのように追跡できますか?

ベストアンサー

どんな種類のエラーもなく、コンタクトサマリーに戻ったばかりで、データは変更されていません。奇妙な場合は例外がスローされると思います。

あなたが投稿した質問は完全なリストですか?すべてのクエリを並べて比較しましたか?

ロールバックを実行する/CRM/Core/Transaction.phpにはいくつかのメソッドがあるようです。

これらは、var_dump(debug_backtrace())を実行して相違点を調べ、必要があればファイルに書き込むことができる場所です。

しようとするもう一つのことは、すべてのSQL文をコピーし、mysqlの直接のようなciviの外で、またはmysqlクライアントを実行して、エラーメッセージが表示されるかどうかを確認することです。

Your not getting anything about database locks in a log are you?
https://dev.mysql.com/doc/refman/5.7/en/innodb-deadlock-detection.html

返信を残す

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