FCLT#84940 Performance anonimiseer routines

svn path=/Database/trunk/; revision=65940
This commit is contained in:
Jos Groot Lipman
2024-08-19 12:39:33 +00:00
parent 4821d9944b
commit 9aeac78c9c
5 changed files with 55 additions and 48 deletions

View File

@@ -3,14 +3,22 @@
* $Id$ * $Id$
*/ */
CREATE_TRIGGER(bez_t_bez_afspraak_B_I)
BEFORE INSERT ON bez_afspraak
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(bez_afspraak_key,bez_s_bez_afspraak_key);
END;
/
CREATE_TRIGGER(bez_t_bez_afspraak_B_IU) CREATE_TRIGGER(bez_t_bez_afspraak_B_IU)
BEFORE INSERT OR UPDATE ON bez_afspraak BEFORE INSERT OR UPDATE ON bez_afspraak
FOR EACH ROW FOR EACH ROW
DECLARE dummy NUMBER;
BEGIN BEGIN
UPDATE_PRIMARY_KEY(bez_afspraak_key,bez_s_bez_afspraak_key); IF sys_context('USERENV', 'ACTION') = 'ANONYMIZE' OR
sys_context('USERENV', 'ACTION') = 'DBUPGRADE' THEN
dummy := :new.bez_afspraak_key; RETURN;
END IF;
IF :new.bez_afspraak_contact_key IS NULL AND :new.prs_perslid_key IS NOT NULL THEN IF :new.bez_afspraak_contact_key IS NULL AND :new.prs_perslid_key IS NOT NULL THEN
:new.bez_afspraak_contact_key := :new.prs_perslid_key; :new.bez_afspraak_contact_key := :new.prs_perslid_key;
@@ -62,8 +70,8 @@ BEGIN
END; END;
/ /
CREATE_TRIGGER(bez_t_bez_bezoekers_B_IU) CREATE_TRIGGER(bez_t_bez_bezoekers_B_I)
BEFORE INSERT OR UPDATE ON bez_bezoekers BEFORE INSERT ON bez_bezoekers
FOR EACH ROW FOR EACH ROW
BEGIN BEGIN
UPDATE_PRIMARY_KEY(bez_bezoekers_key,bez_s_bez_bezoekers_key); UPDATE_PRIMARY_KEY(bez_bezoekers_key,bez_s_bez_bezoekers_key);

View File

@@ -329,7 +329,7 @@ CREATE OR REPLACE PACKAGE BODY ano AS
THEN THEN
-- Anonimiseer alle afspraken. -- Anonimiseer alle afspraken.
-- Door de trigger in de update wordt automatische de naam van de host in de gastheer geplakt. -- Door de trigger in de update wordt automatische de naam van de host in de gastheer geplakt.
-- Daardoor wordt de lcl "Ganonimiseerd" in vele gevallen niet blijvend in de gasheer gezet. -- Daardoor wordt de lcl "Ganonimiseerd" in vele gevallen niet blijvend in de gastheer gezet.
-- De persoon (prs record) moet daarom eerst aangepast worden. -- De persoon (prs record) moet daarom eerst aangepast worden.
-- Tijdens het anonimiseren van de persoon wordt daarom de bez_afspraak_gastheer ook geanonimiseerd. -- Tijdens het anonimiseren van de persoon wordt daarom de bez_afspraak_gastheer ook geanonimiseerd.
-- In de gevallen dat er geen host wordt gebruikt en alleen tekst voor de persoon (gastheer) wordt ingevuld wordt het veld wel blijvend gezet. -- In de gevallen dat er geen host wordt gebruikt en alleen tekst voor de persoon (gastheer) wordt ingevuld wordt het veld wel blijvend gezet.
@@ -412,6 +412,7 @@ CREATE OR REPLACE PACKAGE BODY ano AS
anonymize_period NUMBER := fac.safe_to_number (fac.getsetting ('anonymize_period')); anonymize_period NUMBER := fac.safe_to_number (fac.getsetting ('anonymize_period'));
v_count NUMBER; v_count NUMBER;
anonymize_mode NUMBER; anonymize_mode NUMBER;
lcl_fac_anonymized fac_locale_xsl.fac_locale_xsl_tekst%TYPE := lcl.l('lcl_fac_anonymized');
-- Alle facturen die afgewezen of verwerkt zijn in de periode tussen de startdatum en de einddatum. -- Alle facturen die afgewezen of verwerkt zijn in de periode tussen de startdatum en de einddatum.
CURSOR c_factuur CURSOR c_factuur
@@ -479,6 +480,8 @@ CREATE OR REPLACE PACKAGE BODY ano AS
IF anonymize_mode > 0 IF anonymize_mode > 0
THEN THEN
DBMS_APPLICATION_INFO.SET_ACTION ('ANONYMIZE'); // Voorkomt eventueel triggers
v_count := 0; v_count := 0;
FOR rec_f IN c_factuur FOR rec_f IN c_factuur
LOOP LOOP
@@ -542,18 +545,11 @@ CREATE OR REPLACE PACKAGE BODY ano AS
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
THEN THEN
EXECUTE IMMEDIATE 'ALTER TRIGGER fin_t_fin_factuur_B_IU DISABLE'; -- Anonimiseren van tekstvelden in de factuur.
BEGIN UPDATE fin_factuur
-- Anonimiseren van tekstvelden in de factuur. SET fin_factuur_opmerking = CASE WHEN fin_factuur_opmerking IS NOT NULL THEN lcl_fac_anonymized END
UPDATE fin_factuur , fin_factuur_opmerking_afw = CASE WHEN fin_factuur_opmerking_afw IS NOT NULL THEN lcl_fac_anonymized END
SET fin_factuur_opmerking = CASE WHEN fin_factuur_opmerking IS NOT NULL THEN lcl.l('lcl_fac_anonymized') END WHERE fin_factuur_key = rec_f.fin_factuur_key;
, fin_factuur_opmerking_afw = CASE WHEN fin_factuur_opmerking_afw IS NOT NULL THEN lcl.l('lcl_fac_anonymized') END
WHERE fin_factuur_key = rec_f.fin_factuur_key;
EXCEPTION
WHEN OTHERS THEN
EXECUTE IMMEDIATE 'ALTER TRIGGER fin_t_fin_factuur_B_IU ENABLE';
END;
EXECUTE IMMEDIATE 'ALTER TRIGGER fin_t_fin_factuur_B_IU ENABLE';
END IF; END IF;
-- Anonimiseren van de factuur tracken. -- Anonimiseren van de factuur tracken.
@@ -592,7 +588,7 @@ CREATE OR REPLACE PACKAGE BODY ano AS
THEN THEN
-- Anonimiseren van tekstvelden in de factuurregels van de factuur. -- Anonimiseren van tekstvelden in de factuurregels van de factuur.
UPDATE fin_factuurregel UPDATE fin_factuurregel
SET fin_factuurregel_omschrijving = CASE WHEN fin_factuurregel_omschrijving IS NOT NULL THEN lcl.l('lcl_fac_anonymized') END SET fin_factuurregel_omschrijving = CASE WHEN fin_factuurregel_omschrijving IS NOT NULL THEN lcl_fac_anonymized END
WHERE fin_factuurregel_key = rec_r.fin_factuurregel_key; WHERE fin_factuurregel_key = rec_r.fin_factuurregel_key;
END IF; END IF;
@@ -1051,6 +1047,7 @@ CREATE OR REPLACE PACKAGE BODY ano AS
prs_old_employee VARCHAR2 (100) := lcl.l('lcl_prs_old_employee'); prs_old_employee VARCHAR2 (100) := lcl.l('lcl_prs_old_employee');
v_count NUMBER; v_count NUMBER;
anonymize_mode NUMBER; anonymize_mode NUMBER;
lcl_fac_anonymized fac_locale_xsl.fac_locale_xsl_tekst%TYPE := lcl.l('lcl_fac_anonymized');
-- Alle personen die tussen de startdatum en de einddatum verwijderd zijn. -- Alle personen die tussen de startdatum en de einddatum verwijderd zijn.
CURSOR c_reservering CURSOR c_reservering
@@ -1107,6 +1104,8 @@ CREATE OR REPLACE PACKAGE BODY ano AS
IF anonymize_mode > 0 IF anonymize_mode > 0
THEN THEN
DBMS_APPLICATION_INFO.SET_ACTION ('ANONYMIZE'); // Voorkomt eventuele triggers
v_count := 0; v_count := 0;
FOR rec_r IN c_reservering FOR rec_r IN c_reservering
LOOP LOOP
@@ -1164,9 +1163,9 @@ CREATE OR REPLACE PACKAGE BODY ano AS
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
THEN THEN
UPDATE res_rsv_ruimte UPDATE res_rsv_ruimte
SET res_rsv_ruimte_omschrijving = CASE WHEN res_rsv_ruimte_omschrijving IS NOT NULL THEN lcl.l('lcl_fac_anonymized') END SET res_rsv_ruimte_omschrijving = CASE WHEN res_rsv_ruimte_omschrijving IS NOT NULL THEN lcl_fac_anonymized END
, res_rsv_ruimte_opmerking = CASE WHEN res_rsv_ruimte_opmerking IS NOT NULL THEN lcl.l('lcl_fac_anonymized') END , res_rsv_ruimte_opmerking = CASE WHEN res_rsv_ruimte_opmerking IS NOT NULL THEN lcl_fac_anonymized END
, res_rsv_ruimte_telefoon = CASE WHEN res_rsv_ruimte_telefoon IS NOT NULL THEN lcl.l('lcl_fac_anonymized') END , res_rsv_ruimte_telefoon = CASE WHEN res_rsv_ruimte_telefoon IS NOT NULL THEN lcl_fac_anonymized END
WHERE res_rsv_ruimte_key = rec_r.res_rsv_ruimte_key; WHERE res_rsv_ruimte_key = rec_r.res_rsv_ruimte_key;
END IF; END IF;
@@ -1188,7 +1187,7 @@ CREATE OR REPLACE PACKAGE BODY ano AS
PROCEDURE anonymizefull(p_flags NUMBER DEFAULT 65535) PROCEDURE anonymizefull(p_flags NUMBER DEFAULT 65535)
AS AS
BEGIN BEGIN
DBMS_APPLICATION_INFO.SET_ACTION ('ANONYMIZE'); // Voorkomt triggers die in de weg zitten DBMS_APPLICATION_INFO.SET_ACTION ('ANONYMIZE'); // Voorkomt trigger bez_t_bez_afspraak_B_IU die in de weg kan zitten
-- Destructive obstrufication of personal data. -- Destructive obstrufication of personal data.
UPDATE prs_perslid UPDATE prs_perslid
@@ -1282,24 +1281,16 @@ CREATE OR REPLACE PACKAGE BODY ano AS
SET prs_contactpersoon_email= 'EC' || TO_CHAR(prs_contactpersoon_key) || '@notexist.facilitor.nl' SET prs_contactpersoon_email= 'EC' || TO_CHAR(prs_contactpersoon_key) || '@notexist.facilitor.nl'
WHERE prs_contactpersoon_email IS NOT NULL; WHERE prs_contactpersoon_email IS NOT NULL;
BEGIN UPDATE bez_afspraak
EXECUTE IMMEDIATE 'ALTER TRIGGER bez_t_bez_afspraak_B_IU DISABLE'; SET bez_afspraak_gastheer = (SELECT SUBSTR(prs_perslid_naam_full,1,50)
UPDATE bez_afspraak FROM prs_v_perslid_fullnames_all
SET bez_afspraak_gastheer = (SELECT SUBSTR(prs_perslid_naam_full,1,50) WHERE prs_perslid_key = bez_afspraak_host_key
FROM prs_v_perslid_fullnames_all )
WHERE prs_perslid_key = bez_afspraak_host_key WHERE bez_afspraak_host_key IS NOT NULL;
)
WHERE bez_afspraak_host_key IS NOT NULL;
UPDATE bez_afspraak UPDATE bez_afspraak
SET bez_afspraak_gastheer = INITCAP (DBMS_RANDOM.string ('l', LENGTH (bez_afspraak_gastheer))) SET bez_afspraak_gastheer = INITCAP (DBMS_RANDOM.string ('l', LENGTH (bez_afspraak_gastheer)))
WHERE bez_afspraak_host_key IS NULL; WHERE bez_afspraak_host_key IS NULL;
EXECUTE IMMEDIATE 'ALTER TRIGGER bez_t_bez_afspraak_B_IU ENABLE';
EXCEPTION
WHEN OTHERS THEN
EXECUTE IMMEDIATE 'ALTER TRIGGER bez_t_bez_afspraak_B_IU ENABLE';
END;
UPDATE bez_bezoekers UPDATE bez_bezoekers
SET bez_afspraak_naam = UPPER(SUBSTR(bez_afspraak_naam,1,1)) || '. Bezoeker' SET bez_afspraak_naam = UPPER(SUBSTR(bez_afspraak_naam,1,1)) || '. Bezoeker'

View File

@@ -3,8 +3,8 @@
* $Id$ * $Id$
*/ */
CREATE_TRIGGER(fin_t_fin_factuur_b_iu) CREATE_TRIGGER(fin_t_fin_factuur_b_i)
BEFORE INSERT OR UPDATE ON fin_factuur BEFORE INSERT ON fin_factuur
FOR EACH ROW FOR EACH ROW
BEGIN BEGIN
UPDATE_PRIMARY_KEY(fin_factuur_key, fin_s_fin_factuur_key); UPDATE_PRIMARY_KEY(fin_factuur_key, fin_s_fin_factuur_key);
@@ -13,8 +13,8 @@ BEGIN
END; END;
/ /
CREATE_TRIGGER(fin_t_fin_factuurregel_b_iu) CREATE_TRIGGER(fin_t_fin_factuurregel_b_i)
BEFORE INSERT OR UPDATE ON fin_factuurregel BEFORE INSERT ON fin_factuurregel
FOR EACH ROW FOR EACH ROW
BEGIN BEGIN
UPDATE_PRIMARY_KEY(fin_factuurregel_key, fin_s_fin_factuurregel_key); UPDATE_PRIMARY_KEY(fin_factuurregel_key, fin_s_fin_factuurregel_key);

View File

@@ -407,6 +407,11 @@ CREATE_TRIGGER(res_t_res_rsv_ruimte_B_IU)
BEFORE INSERT OR UPDATE ON res_rsv_ruimte BEFORE INSERT OR UPDATE ON res_rsv_ruimte
FOR EACH ROW FOR EACH ROW
BEGIN BEGIN
IF sys_context('USERENV', 'ACTION') = 'ANONYMIZE' OR
sys_context('USERENV', 'ACTION') = 'DBUPGRADE' THEN
RETURN;
END IF;
-- Niet waterdicht, meestal adequaat -- Niet waterdicht, meestal adequaat
IF NOT UPDATING('res_rsv_ruimte_satisfaction') IF NOT UPDATING('res_rsv_ruimte_satisfaction')
THEN THEN

View File

@@ -112,9 +112,12 @@ ALTER TABLE mld_melding
MODIFY mld_melding_onderwerp_ai VARCHAR2(200); MODIFY mld_melding_onderwerp_ai VARCHAR2(200);
/////////////////////////////////////////////////////////////////////////////////////////// MARX#80460 /////////////////////////////////////////////////////////////////////////////////////////// MARX#80460
BEGIN ALTER TABLE prs_bedrijfadres DROP CONSTRAINT prs_c_prs_bedrijfadrestype;
adm.tryalter('TABLE prs_bedrijfadres DROP CONSTRAINT prs_c_prs_bedrijfadrestype');
END; /////////////////////////////////////////////////////////////////////////////////////////// FCLT#84940
DROP TRIGGER fin_t_fin_factuur_B_IU;
DROP TRIGGER fin_t_fin_factuurregel_B_IU;
DROP TRIGGER bez_t_bez_bezoekers_B_IU;
/////////////////////////////////////////////////////////////////////////////////////////// FCLT#00000 /////////////////////////////////////////////////////////////////////////////////////////// FCLT#00000