PROR#79462 Outlook-koppeling deadlocks

svn path=/Database/branches/DB45/; revision=61821
This commit is contained in:
Jos Groot Lipman
2023-09-18 08:57:19 +00:00
parent 1f6d766f0e
commit a25392c7d5

View File

@@ -644,6 +644,11 @@ AS
COMMIT;
END import_exchange;
-- Merk op dat er veel meer dan gewoonlijk COMMIT's tussendoor staan
-- Dat is allemaal om zo veel mogelijk deadlocks te voorkomen
-- Pas ook op met de volgorde van statements (binnen een transactie)
-- Voorkom altijd UPDATE exc_import, dan UPDATE res_rsv_ruimte en dan weer UPDATE exc_import
-- De laatste UPDATE exc_import moet voor de UPDATE res_rsv_ruimte
PROCEDURE update_exchange (p_import_key IN NUMBER, p_days_from IN NUMBER DEFAULT 0, p_days_to IN NUMBER DEFAULT 90)
IS
v_aanduiding VARCHAR2 (200);
@@ -1015,6 +1020,8 @@ AS
FROM res_rsv_ruimte
WHERE INSTR(res_rsv_ruimte_externnr, i.appt_id || '|') = 1);
COMMIT; -- Cleanup
FOR rec IN c_del
LOOP
BEGIN
@@ -1077,6 +1084,18 @@ AS
v_errorhint := 'Deelreservering verwijderen';
-- Succesvol afgerond; zet vlag.
-- AKZA#35459: vlag niet zetten voor een single die recurring is geworden;
-- die recurrence moeten we straks in de add-cursor nog toevoegen.
IF NOT (rec.reden = 'Made recurring')
THEN
UPDATE exc_import
SET gelukt = 1
WHERE appt_id || '|' || recur_id =
rec.appt_id || '|' || rec.recur_id
AND gelukt IS NULL;
END IF;
UPDATE res_rsv_ruimte
SET res_status_fo_key = v_status_fo_key,
res_rsv_ruimte_verwijder = SYSDATE
@@ -1108,18 +1127,6 @@ AS
WHERE res_reservering_key =
rec.res_reservering_key);
-- Succesvol afgerond; zet vlag.
-- AKZA#35459: vlag niet zetten voor een single die recurring is geworden;
-- die recurrence moeten we straks in de add-cursor nog toevoegen.
IF NOT (rec.reden = 'Made recurring')
THEN
UPDATE exc_import
SET gelukt = 1
WHERE appt_id || '|' || recur_id =
rec.appt_id || '|' || rec.recur_id
AND gelukt IS NULL;
END IF;
fac.imp_writelog (p_import_key,
'I',
v_aanduiding,
@@ -1143,7 +1150,7 @@ AS
END;
END LOOP;
COMMIT;
COMMIT; -- de DELETE's
-- Omdat we entries die gefaald zijn 'bewaren', kan het zijn dat we voor <20><>n appointment
-- meerdere updates - of zelfs een delete - hebben. Dan zijn we alleen ge<67>nteresseerd in de
@@ -1170,6 +1177,8 @@ AS
FROM res_rsv_ruimte
WHERE res_rsv_ruimte_externnr = i.appt_id || '|' || i.recur_id);
COMMIT; -- Cleanup
-- Dan bestaande bijwerken, anders kan het gebeuren dat we op basis van een UPDATE
-- eerst een rsv_ruimte aanmaken en 'm daarna meteen proberen bij te werken.
-- TODO: is dat nog steeds zo met "gelukt = 1"?
@@ -1347,6 +1356,16 @@ AS
END IF;
END IF;
-- Succesvol afgerond; zet vlag.
-- All<6C><6C>n voor nu beschouwde ruimte! (appointments kunnen op meerdere ruimtes zijn)
-- TODO: komen we hier ook als er iets mis ging met de bezoekers?
UPDATE exc_import
SET gelukt = 1
WHERE appt_id || '|' || recur_id =
rec.appt_id || '|' || rec.recur_id
AND room_id = rec.room_id
AND gelukt IS NULL;
-- We hebben niet geskipt, dus willen we deze rsv_ruimte bijwerken
-- Basisgegevens reservering gewijzigd?
IF ( v_ruimte_extern_id != rec.res_ruimte_extern_id
@@ -1457,16 +1476,6 @@ AS
END IF;
END IF;
-- Succesvol afgerond; zet vlag.
-- All<6C><6C>n voor nu beschouwde ruimte! (appointments kunnen op meerdere ruimtes zijn)
-- TODO: komen we hier ook als er iets mis ging met de bezoekers?
UPDATE exc_import
SET gelukt = 1
WHERE appt_id || '|' || recur_id =
rec.appt_id || '|' || rec.recur_id
AND room_id = rec.room_id
AND gelukt IS NULL;
IF (v_debug)
THEN
fac.imp_writelog (p_import_key,
@@ -1493,7 +1502,7 @@ AS
END;
END LOOP;
COMMIT;
COMMIT; -- de UPDATE's
-- Ten slotte nieuwe reserveringen toevoegen
FOR rec IN c_add
@@ -1560,6 +1569,14 @@ AS
-- AND res_rsv_ruimte_externnr NOT LIKE '%|'||rec.recur_id||'|%'
AND res_rsv_ruimte_verwijder IS NULL;
-- Succesvol afgerond; zet vlag.
-- TODO: komen we hier ook als er iets mis ging met de bezoekers?
UPDATE exc_import
SET gelukt = 1
WHERE appt_id || '|' || recur_id =
rec.appt_id || '|' || rec.recur_id
AND gelukt IS NULL;
-- Er bestaan al deelreserveringen voor andere occurences van deze recurring appointment
-- Deelreservering binnen de bijbehorende res_reservering aanmaken
IF (v_count > 0)
@@ -1687,14 +1704,6 @@ AS
v_errorhint := 'Toevoegen bezoekers';
exc.importBezoekers(p_import_key, rec.appt_id, rec.recur_id, v_rsv_ruimte_key, date_interval_start, date_interval_end);
-- Succesvol afgerond; zet vlag.
-- TODO: komen we hier ook als er iets mis ging met de bezoekers?
UPDATE exc_import
SET gelukt = 1
WHERE appt_id || '|' || recur_id =
rec.appt_id || '|' || rec.recur_id
AND gelukt IS NULL;
IF (v_debug)
THEN
fac.imp_writelog (p_import_key,
@@ -1768,7 +1777,7 @@ AS
v_errorhint := '';
exc.set_ruimtes_clean (p_import_key);
END IF;
COMMIT;
COMMIT; -- de INSERT's
EXCEPTION
WHEN OTHERS