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 :

Requête pour suivre les modifications


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut Requête pour suivre les modifications
    Bonjour à tous,

    Je pense que ce que je cherche n'existe pas, mais j'aimerai avoir votre avis sur la question.

    En fait, je dois procéder à une grosse extraction de donnée, et nous allons utiliser un package pour obtenir toutes les informations dont j'ai besoin... sauf que ce package, personne ne sait vraiment ce qu'il y a dedans.
    J'entends par là que, évidement, j'ai étudié le code, donc je sais ce qu'il y a dedans, mais mon chef voudrais avoir un moyen d'être sur que l'execution des fonctions ne va pas écrire en base, et ne vas y faire que des select.

    Est ce que j'ai un moyen avec un table du dictionnaire, ou autre, de voir qu'après execution de ma requête, aucune donnée n'a été modifiée, qu'il n'y a eu aucun delete, update ou insert ?


    Merci d'avance pour votre retour.

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    On peut savoir le nombre d'insert, delete, update depuis les dernières stats.
    Je ne garantis pas la fiabilité à 100% .. J'entends par là, que si des stats sont lancées par la procédure, tu ne verras pas les impacts sur les tables statées.
    Et aussi que ceci ne fonctionne que sur les tables monitorées. "tables with the MONITORING attribute"


    Ce code te donne les insert/delete/update sur les tables depuis leur dernière analyse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT m.table_owner, m.table_name, m.inserts, m.updates, m.deletes, 
    	m.TIMESTAMP AS last_modif, m.truncated, t.num_rows, t.BLOCKS, t.last_analyzed, 
        TRUNC(GREATEST(inserts, updates, deletes) * 100 / DECODE(t.num_rows, 0, NULL, t.num_rows)) AS Pct
    FROM all_tab_modifications m, all_tables t
    WHERE m.table_name = t.table_name
    AND m.table_owner = t.owner
    ORDER BY GREATEST(inserts, updates, deletes) DESC
    Attention ce n'est pas en temps réel, faut faire un flush pour avoir les infos actualisées.
    dbms_stats.FLUSH_DATABASE_MONITORING_INFO;

    Donc,
    1/ Arrêter les stats (si elles sont lancées automatiquement par cron)
    2/ dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
    3/ Tu lances la requête sur all_tab_modifications et tu exportes le résultat
    4/ Tu lances ta procédure
    5/ dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
    6/ Tu relances la requête sur all_tab_modifications et tu exportes le résultat
    7/ Tu compares les 2 résultats.
    8/ Tu réactives les stats

    Bien sur, si quelqu'un d'autre modifie une ligne pendant ton traitement, tu le verras.

  3. #3
    Expert confirmé 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
    Par défaut
    Je ne jamais testé ça: mais la base peut être démarrée en mode read_only et l'exécution des requêtes qui modifient des données dans ce mode devrait générer une erreur.

  4. #4
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    Tu peux analyser le resultat en interrogeant les deux vues sys.v_$sqlarea et sys.v_$sql

  5. #5
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut
    Citation Envoyé par McM Voir le message
    On peut savoir le nombre d'insert, delete, update depuis les dernières stats.
    Je ne garantis pas la fiabilité à 100% .. J'entends par là, que si des stats sont lancées par la procédure, tu ne verras pas les impacts sur les tables statées.
    Et aussi que ceci ne fonctionne que sur les tables monitorées. "tables with the MONITORING attribute"


    Ce code te donne les insert/delete/update sur les tables depuis leur dernière analyse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT m.table_owner, m.table_name, m.inserts, m.updates, m.deletes, 
    	m.TIMESTAMP AS last_modif, m.truncated, t.num_rows, t.BLOCKS, t.last_analyzed, 
        TRUNC(GREATEST(inserts, updates, deletes) * 100 / DECODE(t.num_rows, 0, NULL, t.num_rows)) AS Pct
    FROM all_tab_modifications m, all_tables t
    WHERE m.table_name = t.table_name
    AND m.table_owner = t.owner
    ORDER BY GREATEST(inserts, updates, deletes) DESC
    Attention ce n'est pas en temps réel, faut faire un flush pour avoir les infos actualisées.
    dbms_stats.FLUSH_DATABASE_MONITORING_INFO;

    Donc,
    1/ Arrêter les stats (si elles sont lancées automatiquement par cron)
    2/ dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
    3/ Tu lances la requête sur all_tab_modifications et tu exportes le résultat
    4/ Tu lances ta procédure
    5/ dbms_stats.FLUSH_DATABASE_MONITORING_INFO;
    6/ Tu relances la requête sur all_tab_modifications et tu exportes le résultat
    7/ Tu compares les 2 résultats.
    8/ Tu réactives les stats

    Bien sur, si quelqu'un d'autre modifie une ligne pendant ton traitement, tu le verras.


    Ta solution m'a l'air nickel, mais j'ai pas les privilèges ...

    Quant à redémarrer la base, c'est encore moins imaginable... et les vues sys ne donnent aucune info pertinantes.


    Merci quand même à vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/12/2006, 10h09
  2. Réponses: 1
    Dernier message: 21/07/2006, 05h56
  3. [Tableaux] Suivre les modifications faits par chaque utilisateur
    Par dessinateurttuyen dans le forum Langage
    Réponses: 7
    Dernier message: 19/07/2006, 10h05
  4. requête pour exclure les doublons.
    Par sam01 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2005, 19h10
  5. Suivre les modifications et suppression
    Par manudja dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/08/2005, 07h42

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