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 :

Purger une table et copier les données purgées dans une table


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 34
    Points
    34
    Par défaut Purger une table et copier les données purgées dans une table
    j'aimerais purger cette table et copier les données dans une table archive
    cette requête me semble pas terrible du tout et cela met des plombes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO riskindfieldinstance_archive (table 12 GO) 
       SELECT *
         FROM riskindfieldinstance (table de 4 go)
        WHERE riskindinstancehandle IN
                 (SELECT DISTINCT rii.handle
                    FROM riskindicatorinstance rii, substepinstance ssi
                   WHERE     rii.substepinstancehandle = ssi.handle
                         AND ssi.startvaliddate < ADD_MONTHS (SYSDATE, -2))
    Merci de vos conseils

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Peut-être comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    INSERT INTO riskindfieldinstance_archive -- table 12 GO 
    SELECT  *
    FROM    riskindfieldinstance    rfi --  table de 4 go
    WHERE   EXISTS
            (   SELECT  1
                FROM    riskindicatorinstance   rii
                    INNER JOIN
                        substepinstance         ssi
                        ON  rii.substepinstancehandle = ssi.handle
                WHERE   ssi.startvaliddate < ADD_MONTHS(SYSDATE, -2)
                    AND rfi.riskindinstancehandle = rii.handle
            )
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Il faudrait voir le plan d'exécution pour voir ce qui prend du temps.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    alter session set statistics_level=all;
    insert into...
    select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
    Si l'insert prends du temps, un insert /*+ append */ est peut être une bonne idée vu le volume.

    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  4. #4
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    J'ajourerai à la réponse de F. Pachot, qu'il est intéressant de désactiver les contraintes et les index sur la table cible et de les réactiver après l'insertion des données.

    Si les volumétries sont vraiment importantes utiliser le partitionnement et travailler au niveau partition apportera aussi un gain.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par pachot Voir le message
    Bonjour,

    Il faudrait voir le plan d'exécution pour voir ce qui prend du temps.
    ...
    hello, Merci frank
    a quoi sert ce hints concrètement ?



    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
    ALTER session SET statistics_level=ALL;
    INSERT INTO riskindfieldinstance_archive -- table 12 GO 
    SELECT  *
    FROM    riskindfieldinstance    rfi --  table de 4 go
    WHERE   EXISTS
            (   SELECT  1
                FROM    riskindicatorinstance   rii
                    INNER JOIN
                        substepinstance         ssi
                        ON  rii.substepinstancehandle = ssi.handle
                WHERE   ssi.startvaliddate < ADD_MONTHS(SYSDATE, -2)
                    AND rfi.riskindinstancehandle = rii.handle
            )
     
    SELECT * FROM TABLE(dbms_xplan.display_cursor(NULL,NULL,'allstats last'));
    fonctionne pas ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par ojo77 Voir le message
    J'ajourerai à la réponse de F. Pachot, qu'il est intéressant de désactiver les contraintes et les index sur la table cible et de les réactiver après l'insertion des données.

    Si les volumétries sont vraiment importantes utiliser le partitionnement et travailler au niveau partition apportera aussi un gain.
    Merci oui j'y avais pensé je vais voir
    Quand tu dis désactiver c'est supprimer et recréer

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par pachot Voir le message
    Bonjour,

    Il faudrait voir le plan d'exécution pour voir ce qui prend du temps.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    alter session set statistics_level=all;
    insert into...
    select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
    Si l'insert prends du temps, un insert /*+ append */ est peut être une bonne idée vu le volume.

    Cordialement,
    Franck.

    voila le plan les zamis


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ------------------------------------------------------------------------------------------------------
    | Id  | Operation                | Name                         | Rows  | Bytes |TempSpc| Cost (%CPU)|
    ------------------------------------------------------------------------------------------------------
    |   0 | INSERT STATEMENT         |                              |    30M|  2467M|       | 91182   (5)|
    |   1 |  LOAD TABLE CONVENTIONAL | RISKINDFIELDINSTANCE_ARCHIVE |       |       |       |            |
    |   2 |   HASH JOIN RIGHT SEMI   |                              |    30M|  2467M|   485M| 91182   (5)|
    |   3 |    VIEW                  | VW_SQ_1                      |    15M|   303M|       | 35233   (4)|
    |   4 |     HASH JOIN            |                              |    15M|  1805M|    55M| 35233   (4)|
    |   5 |      TABLE ACCESS FULL   | SUBSTEPINSTANCE              |  1021K|    43M|       |   646  (18)|
    |   6 |      TABLE ACCESS FULL   | RISKINDICATORINSTANCE        |    15M|  1127M|       | 13836   (6)|
    |   7 |    TABLE ACCESS FULL     | RISKINDFIELDINSTANCE         |    30M|  1887M|       | 14412  (11)|
    ------------------------------------------------------------------------------------------------------

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par ojo77 Voir le message
    J'ajourerai à la réponse de F. Pachot, qu'il est intéressant de désactiver les contraintes et les index sur la table cible et de les réactiver après l'insertion des données.

    Si les volumétries sont vraiment importantes utiliser le partitionnement et travailler au niveau partition apportera aussi un gain.
    bon maintenant j'ai plus qu' deleter les lignes inserer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    delete from riskindfieldinstance
    where riskindinstancehandle in (
    	select 
    		distinct rii.handle
    	from
    		substepinstance ssi,
    		riskindicatorinstance rii
    	where
    		ssi.startvaliddate < add_months(sysdate,-2)
    		and ssi.handle = rii.substepinstancehandle)

Discussions similaires

  1. [DATA] Repérer les données vides dans une table
    Par Deciprog dans le forum SAS Base
    Réponses: 2
    Dernier message: 16/04/2010, 09h41
  2. Réponses: 7
    Dernier message: 05/09/2008, 11h07
  3. Réponses: 3
    Dernier message: 04/07/2008, 12h00
  4. Enlever les données identiques dans une table
    Par DubeiserTM dans le forum Langage SQL
    Réponses: 15
    Dernier message: 31/01/2007, 21h14
  5. Enlever les données identiques dans une table
    Par DubeiserTM dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 23/01/2007, 18h27

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