Autor Téma: Trigers - Deadlock  (Přečteno 225 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3565
  • Karma: 35
    • Verze Delphi: XE7 professional
Trigers - Deadlock
« kdy: 09-11-2018, 09:34:14 »

Neviem ako som sa dostal do tejto situácie:


Project JasotSVB.exe raised exception class EIBNativeException with message '[FireDAC][Phys][FB]deadlock
update conflicts with concurrent update
concurrent transaction number is 65633
At trigger 'SEPA_ANALS_BI' line: 8, col: 5'.
Kód: [Vybrat]
BEGIN
  IF (NOT EXISTS(SELECT FIRST 1 * FROM SEPA_ANALS)) THEN
    DELETE FROM Z_SEPA_ANALS;
END
[size=78%]

Ako sa toho zbaviť? Myslím tým zrušenie zámku.
Obe tabuľky (SEPA_ANALS i Z_SEPA_ANALS) sú prázdne.
Ako sa to ošetruje v kóde?[/size]
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3565
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Trigers - Deadlock
« Odpověď #1 kdy: 09-11-2018, 09:35:41 »
Prečo mi tam pri vkladaní textu Ctrl+v vždy doplní ten size? Teraz som sa ho nedokázal zbaviť.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Jirka

  • Mladík
  • **
  • Příspěvků: 55
  • Karma: 5
    • Verze Delphi: XE2
Re:Trigers - Deadlock
« Odpověď #2 kdy: 09-11-2018, 11:44:52 »
update conflicts with concurrent update
concurrent transaction number is 65633

IMHO nemáš někde dokončenou jinou transakci - pravděpodobně k souboru Z_SEPA_ANALS.
Tohle se mi občas stavá v IBExpertu když se pokouším modifikovat data která jsou otevřena v jiném okně
« Poslední změna: 09-11-2018, 11:49:06 od Jirka »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3565
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Trigers - Deadlock
« Odpověď #3 kdy: 09-11-2018, 12:18:00 »
Nejde mi o vyriešenie príčiny. To sommal ihneď. Zle zostavené SQL.
Ale zbaviť sa toho stavu. Druhá vec je, či sa mi to môže stať v aplikácii. Ak áno, tak ako to riešiť.
V jednom prípade som tým mal veľký problém.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 1285
  • Karma: 56
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Trigers - Deadlock
« Odpověď #4 kdy: 09-11-2018, 12:23:54 »
Ako sa to ošetruje v kóde?

Tak, ze pri vyskytu vyjimky druhu ekRecordLocked zobrazis uzivateli hlasku aby akci pozdeji opakoval pripadne kontaktoval administratora ;) Napr. (psano v browseru, dovolena):

Kód: Delphi [Vybrat]
  1. FDTransaction1.StartTransaction;
  2. try
  3.   FDQuery1.ExecSQL;
  4.   FDTransaction1.Commit;
  5. except
  6.   on E: EFDDBEngineException do
  7.   begin
  8.     FDTransaction1.Rollback;
  9.     if E.Kind = ekRecordLocked then
  10.       ShowMessage('Record is locked by another active transaction. Please, try again later or contact administrator.');
  11.     raise;
  12.   end;
  13. end;

Ty mas jen jednoho uzivatele, a pokud bys chtel jednat, musel bys nejakou mocnou silou ustrelit na serveru aktivni transakci jenz ma na zaznamu zamek (misto zobrazeni hlasky).

Nejde mi o vyriešenie príčiny. To sommal ihneď. Zle zostavené SQL.
Ale zbaviť sa toho stavu. Druhá vec je, či sa mi to môže stať v aplikácii. Ak áno, tak ako to riešiť.
V jednom prípade som tým mal veľký problém.

Stat by se to s jednou bezici instanci aplikace, resp. s 1 connection session v ramci aplikace nemelo (tedy pokud ridi transakce implicitne FireDAC, nebo jsou korektne rizeny Tebou).
« Poslední změna: 09-11-2018, 12:32:47 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3565
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Trigers - Deadlock
« Odpověď #5 kdy: 09-11-2018, 12:38:49 »
Ja som sa k tomu dopracoval tak, že mi vykonávanie SQL nechcelo skončiť. Pritom aplikácia "neodpovedala" ale nežrala žiadne systémové prostriedky.
Tak som aplikáciu zostrelil - Reset. A už mi ostala visieť neukončená transakcia. Prvý krát v živote. Presnejšie trigget.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 1285
  • Karma: 56
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Trigers - Deadlock
« Odpověď #6 kdy: 09-11-2018, 14:19:31 »
Ja som sa k tomu dopracoval tak, že mi vykonávanie SQL nechcelo skončiť. Pritom aplikácia "neodpovedala" ale nežrala žiadne systémové prostriedky.
Tak som aplikáciu zostrelil - Reset. A už mi ostala visieť neukončená transakcia. Prvý krát v živote. Presnejšie trigget.

Proto jsem psal o bezici aplikaci. Zapomnel jsem dodat funkcni hardware, stabilni spojeni s DBMS (v tomto pripade zrejme lokalni socket) a v neposledni rade i exisujici vesmir :) Ted vazne, deadlock muze nastat v konfiguraci lokalniho DBMS napr. chybne rizenou rezii transakci nebo necekanym ukoncenim aplikace (coz lze kdykoli z Task Manageru, cemuz zabranit nepujde). V pripade padu systemu (napr. kvuli selhani HW) skonci jak DBMS, tak aplikace.
« Poslední změna: 09-11-2018, 14:30:42 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3565
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Trigers - Deadlock
« Odpověď #7 kdy: 09-11-2018, 15:31:33 »
Upresním to SQL. Aby som tam jednu hodnotu nepočítal/neurčoval 3 x, tak som použil CTE.
V časti WITH som najprv mal jednoduchý SELECT. To bežalo bezproblémovo.
V rámci zmien som neskôr do WITH strčil SQL, ktoré ten WITH používa. Len som vracal jeden stĺpec. A už to bolo. Ja vlastne neviem čo som tým spôsobil. Nekonečná slučka to nie je - program nevykazoval činnosť.
Niečo také sa mi do finálnej aplikácie nedostane, lebo pri ladení mi to padne.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3565
  • Karma: 35
    • Verze Delphi: XE7 professional
Re:Trigers - Deadlock
« Odpověď #8 kdy: 09-11-2018, 15:32:35 »
Jaj, nekončná slučka to môže byť, lebo ju spracováva DB a nie aplikácia.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: