[Firebird-jp-general] RECREATE TABLEでエラー

Back to archive index
telme****@yahoo***** telme****@yahoo*****
2019年 5月 11日 (土) 04:23:44 JST


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>


Firebird-jp-general メーリングリストの案内
Back to archive index