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:
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;
PROCEDURE:
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;
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.
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 ?