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

SQL Oracle Discussion :

Qu'est ce qui fait des insert dans ma table!?


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 7
    Points
    7
    Par défaut Qu'est ce qui fait des insert dans ma table!?
    Je suis sous oracle 9i avec une application qui s'apelle Génerix, et depuis une semaine il ya je ne sais pas quel truc qui tourne et qui m'insert quelques 40milles lignes...!! je ne comprend plus rien, en plus c'est la table des tarifs et tout le monde en a besoin... et ce truc m'insert des doublons de lignes qui existent déja, donc ça me fait des prix de ventes doublés voir triplé ou plus...

    Ma question est : point de vue oracle, comment je pourrait intercepter ce processus qui me fait ça, devrais je mettre en place un trigger? et si oui comment le faire!!!

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    un trigger ou l'audit. Vérifie aussi que tu n'as pas un job qui traine (dba_jobs) ou une tâche dans un scheduler.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 7
    Points
    7
    Par défaut Audit??
    Je vais me documenter sur l'audit, car il n'ya rien dans les jobs, et puis pour le scheduler vous parlez de l'application, c'est à dire autre chose qu'oracle, et bien je pense avoir vérifier tout ce qui tourne dans cette machine, mais j'avoue que l'application ne m'est pas très familère donc je ne suis pas sure de moi, c'est pour ça que je voudrai un moyen 'oracle'...
    Merci pour votre réponse, je vais creuser l'histoire de l'audit!

  4. #4
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Comme l'a dit Grand Maître OraFrance , tu peux passer par un trigger :

    1) Tu crées d'abord une table de flicage(une fois pour tout) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create table TMP_INSERTS  (
                      NUMBADGE           VARCHAR2(08),
                      DATEMIGRATION      DATE,
                     TERMINAL           VARCHAR2(10),
                     REQUETE            VARCHAR2(500)   );
    2) En suite ton 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
    CREATE or REPLACE TRIGGER serveillance_table_Generix
       BEFORE INSERT on  Generix    -- ta table à surveiller
    
       DECLARE
          v_numbadge varchar2 (8);
          v_terminal varchar2(30);  
    
       BEGIN                   
           select osuser, terminal  into v_numbadge, v_terminal from v$session
                    where   status = 'ACTIVE' and type = 'USER';      
    
          INSERT INTO TMP_INSERTS 
                values ( v_numbadge,
                             sysdate,
                             v_terminal,
                            (ora_sysevent ||' ' || ora_dict_obj_type || ' ' || ora_dict_obj_name) );                             
    
        EXCEPTION when others then
             v_numbadge := 'XXXXX';                               
    END;
    /
    J'espère que cela répond à ton besoin.

    LBO72.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 7
    Points
    7
    Par défaut Je vais essayer
    Merci de ta réponse LBO72, je te tiens au courant de la démarche que je vais suivre dès que je me documente un peu sur l'audit!

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 7
    Points
    7
    Par défaut j'utilise le trigger tout compte fait
    J'ai voulu me documenter sur l'audit mais ça m'a semblé trop compliqué, alors j'ai opté pour la deuxieme, je vais créer la table et le trigger comme tu me l'as dis LBO72,
    Je vous tiendrai au courant!

  7. #7
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Salut LBO72,

    Je sais que c'est un exemple, mais
    • il faut toujours éviter les inserts non nommé
    • le bloc d'exception c'est fait un peu trop vite

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 7
    Points
    7
    Par défaut ça n'a pas marché!!!
    J'ai crée le trigger et la table ...j'ai re mes doublons dans ma table mais aucune ligne n'est insérée dans la table témoin!!!!!!!!!! je ne sais plus quoi faire!!!

  9. #9
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    quel est le code du trigger

  10. #10
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Bonjour Maitre OraFrance, le code du trigger est au dessus ...

    Le pb vient du fait que le select ramene plusieurs lignes pour toi mina
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select osuser, terminal  into v_numbadge, v_terminal from v$session
                    where   status = 'ACTIVE' and type = 'USER';
    Essaye de modifier le select pour ne ramemer qu'une seulle ligne.

    LBO72.

  11. #11
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Je confirme, le pb venait du select qui ramène plusieurs lignes. Pour que ça marche, il faut s'assurer que ton select ne ramene q'une seule ligne.

    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
    CREATE or REPLACE TRIGGER serveillance_table_Generix
       BEFORE INSERT on  Generix    -- ta table à surveiller
    
       DECLARE
          v_numbadge varchar2 (8);
          v_terminal varchar2(30);  
    
       BEGIN                   
           select osuser, terminal  into v_numbadge, v_terminal from v$session
                    where   status = 'ACTIVE' and type = 'USER' and SCHEMANAME <> 'SYS';      
    
          INSERT INTO TMP_INSERTS 
                values ( v_numbadge,
                             sysdate,
                             v_terminal,
                            (ora_sysevent ||' ' || ora_dict_obj_type || ' ' || ora_dict_obj_name) );                             
    
        EXCEPTION when others then
             v_numbadge := 'XXXXX';                               
    END;
    /
    .

    Tu nous tiens informés.... merci
    LBO72.

  12. #12
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par LBO72 Voir le message
    Je confirme, le pb venait du select qui ramène plusieurs lignes. Pour que ça marche, il faut s'assurer que ton select ne ramene q'une seule ligne...
    Mais non, LBO72 le problème vient du block Exception qui cache toutes les anomalies

  13. #13
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 7
    Points
    7
    Par défaut Je vais réessayer lundi!
    Je vous tiendrai au courant!!

  14. #14
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Bonjour,
    mnitu
    Mais non, LBO72 le problème vient du block Exception qui cache toutes les anomalies
    .

    C'est vrai que le block exception, ignore toutes les erreurs qui peuvent se reproduire. Le but étant que les inserts du programme appelant se passent toujours bien, qu'on les ai tracées ou pas dans la table de flicage.

    Je persiste et signe que le souci pour le pb de mina est que son select ramene plusieurs lignes

    LBO72.

  15. #15
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 7
    Points
    7
    Par défaut ça marche à moitié
    Bonjour à tous,
    J'ai ajouté la condition sur le schema et j'ai fait deux essais:
    Le premier par une requete "insert to tsc (select * from ma_table)" :
    Le résultat est que j'ai bien le nom de mon utilisateur, la date, le terminal, mais pas la requête.
    L'autre essai, c'est de lancer un job via notre application, (c'est l'application que je suspecte de lancer un batch quelque part) qui me fait des insertions dans la table:
    Aucune ligne dans ma table de controle, malgré que j'ai eu deux lignes insérées par ce job.
    Je suis paumée.

  16. #16
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Salut Mina,

    Pour te simplfier la tâche et faire fonctionner ton trigger aussi bien en batch qu'en TP, tu peux essayer cela :
    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
    CREATE or REPLACE TRIGGER serveillance_table_Generix
       BEFORE INSERT on  Generix for each row   -- ta table à surveiller
       DECLARE
           requete  varchar2(500);
       BEGIN                   
          requete := 'INSERT INTO Generix values( ' || :NEW.champ1 || ', ' :NEW.champ2 || ')'; --- Tu prends tous les champs de ta table
          INSERT INTO TMP_INSERTS 
                values ( ora_login_user,
                             sysdate,
                             null,
                            requete );                            
                                     
    END;
    /
    .
    A+
    LBO72.

  17. #17
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par LBO72 Voir le message
    Bonjour,
    .

    C'est vrai que le block exception, ignore toutes les erreurs qui peuvent se reproduire. Le but étant que les inserts du programme appelant se passent toujours bien, qu'on les ai tracées ou pas dans la table de flicage.

    Je persiste et signe que le souci pour le pb de mina est que son select ramene plusieurs lignes

    LBO72.
    D'abord si c'est ton intention de toute ignorer dit-le explicitement dans ton code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    When OTHERS Then 
      Null; -- OK j'ignore toutes les exceptions
    Mais cella reste presque toujours une mauvais idée.

    Ensuite les inserts comme tu la vu ce sont très bien passée, un peut trop

    Tertio, peut être que le souci est ailleurs, par exemple impossibilité d'écrire dans la table des traces malgré les droits. Comment fait tu pour le savoir et signer ?

  18. #18
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    en l'occurence il s'agit de tracer les insert et pas de planter l'insert si le trigger a causé une erreur

    c'est une excellente pratique lorsqu'on veut ajouter un trigger d'audit en étant sûr de ne pas risquer d'effet de bord désastreux

  19. #19
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par orafrance Voir le message
    ...
    c'est une excellente pratique lorsqu'on veut ajouter un trigger d'audit en étant sûr de ne pas risquer d'effet de bord désastreux
    C’est une excellente pratique que je trouve assez discutable vu qu’il se peut que le but ne pas atteint: effectuer l’audit, et qu’on est dans l’impossibilité de savoir ce qui se passe. Si le plantage de l’insert est impensable des autres méthodes peuvent être employées.

  20. #20
    Futur Membre du Club
    Inscrit en
    Mars 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    ftrgfgggg

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/10/2013, 13h49
  2. fonction RECHERCHEV dans un tableau trié qui fait des siennes
    Par christophertux dans le forum Conception
    Réponses: 2
    Dernier message: 05/10/2010, 11h38
  3. Calcul d'une valeur pour insertion dans la table des faits
    Par moheissenger dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 24/02/2010, 01h02
  4. Réponses: 2
    Dernier message: 17/02/2010, 16h09
  5. Réponses: 2
    Dernier message: 05/10/2007, 23h49

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