IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Oracle 9.2.0.1.0 et trigger


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 11
    Par défaut Oracle 9.2.0.1.0 et trigger
    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 ?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 11
    Par défaut
    Hummmmmmmmmmmm,
    N'ayant plus d'idée j'ai créer un deuxième trigger, exactement le même mais en BEFORE.
    Après 2h j'ai 600 lignes de différences Et c'est lignes sont bien dans la table source.....

    A suivre.

  3. #3
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Est-il possible d'écrire sans déclencher le trigger ?
    Oui s'il est désactivé.

    As-tu pu établir dans un premier temps des statistiques concernant les différences entre la table d'origine et la copie ?
    Des heures sur lesquelles les manquants se font plus nombreux ?
    Manque t-il uniquement des ordres INSERT ou y a t-il aussi des DELETE qui n'ont pas été répercuté sur la table de copie ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 11
    Par défaut
    Nous avons un log de toutes modifications (alter etc...) de la db, mais on ne trouve aucun disable du trigger.

    Il manque bien des INSERT et DELETE peut être des UPDATE.

    En comparant avec ma deuxième trace en BEFORE cela semble venir par lots ex: 20 Inserts au même moment, j'ai bien les 20 dans la trace BEFORE mais j'en ai que 10-15 dans la trace AFTER.

    J'ai recommencé la procédure de copie de cette table, et j'ai d'autres procédures qui tourne la nuit, je saurai donc demain matin si j'ai bien le même nombre de chaque coté.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 11
    Par défaut
    Pas d'Bol, Ce matin 3500 lignes de différence, principalement des INSERT.

    Après réunion avec tous les acteurs, on va finalement passer en 9.2.0.4.0 puis 9.2.0.8.0 (ce qui nous avaient été refusé plusieurs fois dans le passé par le fournisseur, externe, du logiciel qui attaque la DB) puisqu'il y a quand même quelques "BUG" indiqué par oracle mais qui ne semblaient pas (ou ne pas devoir) nous impacté.

    A suivre ....

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/12/2005, 18h54
  2. [JDBC]Probleme avec trigger Oracle
    Par aurel89 dans le forum JDBC
    Réponses: 2
    Dernier message: 02/08/2005, 11h53
  3. [Oracle] Aide pour la création d'un trigger
    Par Sonic dans le forum Administration
    Réponses: 14
    Dernier message: 04/11/2004, 19h54
  4. Réponses: 4
    Dernier message: 18/10/2004, 16h18
  5. [Syntaxe Oracle/Sybase] désactiver un trigger
    Par MashiMaro dans le forum Sybase
    Réponses: 3
    Dernier message: 30/10/2003, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo