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

Zurück zum Archiv-Index
quest****@da2***** quest****@da2*****
2019年 5月 11日 (土) 11:32:44 JST


返信ありがとうございます。

テーブル名は既に接続ごとに違う名前になっています。
今回の事案では直接DBに接続ではなく、DataSnapサーバーが受け口となり
DataSnapサーバーからDBに接続するので、DataSnapサーバー内部で
待たせるようにしたので何とか回避できましたが
DBに直接接続する場合は、うかつにRECREATE TABLEを使いないようですね。
DROP TABLE、CREATE TABLEの組み合わせならどうなのかなど
時間ができたら調べてみます。
GLOBAL TEMPORARY TABLE機能についても調べてみます。
情報ありがとうございました。

Quest

On 2019/05/11 4:23, telme****@yahoo***** wrote:
> 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*****
>     <mailto:Fireb****@lists*****>
>     https://lists.osdn.me/mailman/listinfo/firebird-jp-general
> 
> 
> 
> 
> _______________________________________________
> Firebird-jp-general mailing list
> Fireb****@lists*****
> https://lists.osdn.me/mailman/listinfo/firebird-jp-general
> 


---
このEメールはアバスト アンチウイルスによりウイルススキャンされています。
https://www.avast.com/antivirus



Firebird-jp-general メーリングリストの案内
Zurück zum Archiv-Index