RECREATE TABLEの直後にトランザクションをコミットさせればある程度は回避できると思いますがまったく同時の場合は、どうしてもぶつかると思います。 私の場合であれば、GLOBAL TEMPORARY TABLE機能を使用して接続ごとにテーブル名を変化させるか同時実行しないよう、片方を待たせるプログラムにするといった感じでしょうか。 ----- Original Message ----- From: "quest****@da2*****" <quest****@da2*****> To: fireb****@lists***** Date: 2019/4/22, Mon 23:44 Subject: [Firebird-jp-general] RECREATE TABLEでエラー Firebird Ver2.5.8.27089にDelphi 10.2.3 TokyoのIBX(FireDACでも)で 2箇所から接続して同時に違うテーブルをRECREATEすると デッドロックのエラーが発生する現象に困っています。 RECREATE TABLE TEST_1 ( FIELD1 BIGINT NOT NULL PRIMARY KEY ) このような単純なテーブルでエラーが発生します。 別の場所からはテーブル名が"TEST_2"になっているSQLを ほぼ同時にサーバーに投げるのですが 一方では > deadlock > update conflicts with concurrent update concurrent transaction number is 732020 というエラーが発生し もう一方では > unsuccessful metadata update cannot create index RDB$PRIMARY5213 というエラーになります。(それぞれ数字の部分は実行の度に変わります) 一度この状態になると、片方だけでもエラーが発生するようになります。 何故か"RECREATE VIEW"を実行するとこの状態が解消されるようです。 (必ずではないですが、間をおいて実行すればほぼ解消されます) 2つ目のエラーからインデックスをシステムテーブル(RDB$INDEX_SEGMENTS)に 登録するときに衝突していると推測してますが、もしそうなら、こちら側では どうすることもできない様な気がします。 何か心当たりがある方はいらっしゃいますか? どんな事でもヒントをいただければ幸いです。 よろしくお願いします。 Quest --- このEメールはアバスト アンチウイルスによりウイルススキャンされています。 https://www.avast.com/antivirus _______________________________________________ Firebird-jp-general mailing list Fireb****@lists***** https://lists.osdn.me/mailman/listinfo/firebird-jp-general -------------- next part -------------- HTMLの添付ファイルを保管しました... URL: <https://lists.osdn.me/mailman/archives/firebird-jp-general/attachments/20190511/83a7cbe9/attachment.html>