Bonjour,
J'ai une DB de production Oracle 9.2.0.1.0 sur un serveur AIX Version 5.2
Je ne peut actuellement faire aucun changement de release.
Il y a environs 1200 clients(sessions) dessus.
Dans le cadre de faire un "change data capture" j'ai un trigger sur une table qui inscrit toutes les modifications de celle-ci dans une autres.
TRIGGER:
PROCEDURE:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 create or replace TRIGGER TRGG_BBO_VBO_160 AFTER INSERT OR UPDATE OR DELETE ON PL_GRP FOR EACH ROW declare T_CMD char(1); T_NUMGRP NUMBER(10,0); chainetemp VARCHAR2(4000); begin if ( :new.NUMGRP != :old.NUMGRP ) then insert into TRACE_BBO_VBO_160 (cmd,stade,quand,NUMGRP) values ('Y','0',sysdate,:old.NUMGRP); T_NUMGRP :=:new.NUMGRP; T_CMD:='Y'; else IF inserting then T_CMD:='I'; T_NUMGRP :=:new.NUMGRP; elsif updating then T_CMD:='U'; T_NUMGRP :=:new.NUMGRP; elsif deleting then T_CMD:='D'; T_NUMGRP :=:old.NUMGRP; else T_CMD:='X'; T_NUMGRP :=:old.NUMGRP; end if; end if; select IP||'-'||INFO||'-'||MODULE||'-'||PROG "QUI" INTO chainetemp from ( select trim(to_char(sys_context('USERENV','IP_ADDRESS'))) "IP" ,trim(to_char(sys_context('USERENV','CLIENT_INFO'))) "INFO" ,trim(to_char(sys_context('USERENV','MODULE'))) "MODULE" ,trim(to_char(sys_context('USERENV','PROGRAM'))) "PROG" from dual); insert into TRACE_BBO_VBO_160 (cmd,stade,quand,NUMGRP) values (T_CMD,'0',sysdate,T_NUMGRP); exception when others then BBO_VBO_AUDIT_TRGG (T_CMD,'TRGG_BBO_VBO_CHU_160 :'||chainetemp||' : '|| substr(SQLERRM,1,200)); end;
Après +/-15 jours de production j'ai environs 180.000 lignes de + dans ma table d'origine que de ligne "CMD:='I'" dans ma trace.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE OR REPLACE PROCEDURE BBO_VBO_AUDIT_TRGG (pERR_CMD CHAR, pERR_VALUE VARCHAR2) IS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN insert into bbo_vbo_err (err_cmd,err_value) values(BBO_VBO_AUDIT_TRGG.pERR_CMD, BBO_VBO_AUDIT_TRGG.pERR_VALUE); --RAISE VALUE_ERROR; COMMIT; END;
J'ai bien des I, U et D mais visiblement pas tout.
Et je n'ai pas d'erreur (exception) inscrit par la procédure "BBO_VBO_AUDIT_TRGG"
Il n'y a pas d'ext/imp ni de sqlldr sur cette table.
Est-ce que quelqu'un à une idée d’où cela peut-il venir ?
Est-il possible d'écrire sans déclencher le trigger ?
Partager