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

Administration Oracle Discussion :

Insertion en masse dans une table


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut Insertion en masse dans une table
    Bonjour

    Je dois créer une table T2 qui contient une partie des données de la table T1, cette "partie" représentant tout-de-même 100 millions de lignes, pour environ 10 Go
    Le problème concerne mon tablespace UNDO qui risque d'exploser si je fais juste le commit seulement à la fin
    Je sais que la commande COPY existe (j'ai cherché au préalable sur le forum ) mais est-ce que en faisant directement un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE T2 AS SELECT * FROM T1 WHERE condition;
    , le tablespace UNDO sera utilisé ?

    Merci d'avance

    Edit : base 10g
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 105
    Par défaut
    oui undo est utilisé mais le commit est implicite

  3. #3
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    merci pour ta réponse

    et sais-tu si la taille nécessaire dans le undo est la même que la taille des données à insérer ?
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  4. #4
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    Les tablespaces undo et redo seront uniquement utilisés au niveau des changements dans le dictionnaire (création de la table par exemple), mais pas au niveau des données

    Donc, la réponse à ta question est non, c'est justement l'avantage des CTAS

  5. #5
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    OK je me lance doncdans mon create table as select , merci
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Attention, pour minimiser le redo généré, il faut, si votre base est en mode archive log, créer la table en mode NOLOGGING, sinon le redo est généré.

    Exemple:

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    dev001> 
    dev001> 
    dev001> drop table t;
     
    Table dropped.
     
    dev001> drop table t2;
     
    Table dropped.
     
    dev001> drop table t3;
     
    Table dropped.
     
    dev001> 
    dev001> select * from v$version;
     
    BANNER                                                                          
    ----------------------------------------------------------------                
    Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Prod                
    PL/SQL Release 10.2.0.2.0 - Production                                          
    CORE	10.2.0.2.0	Production                                                      
    TNS for 32-bit Windows: Version 10.2.0.2.0 - Production                         
    NLSRTL Version 10.2.0.2.0 - Production                                          
     
    dev001> 
    dev001> create table t(x int, y varchar2(100), z clob) nologging;
     
    Table created.
     
    dev001> 
    dev001> insert /*+ append */
      2  into t
      3  select 1, to_char(1), to_char(1) from dual connect by level <= 100000;
     
    100000 rows created.
     
    dev001> 
    dev001> commit;
     
    Commit complete.
     
    dev001> 
    dev001> select value, name from v$mystat, v$statname
      2  where name = 'redo size' and v$statname.statistic# = v$mystat.statistic#;
     
         VALUE NAME                                                                 
    ---------- ----------------------------------------------------------------     
        203120 redo size                                                            
     
    dev001> 
    dev001> create table t2 as select * from t;
     
    Table created.
     
    dev001> 
    dev001> select value, name from v$mystat, v$statname
      2  where name = 'redo size' and v$statname.statistic# = v$mystat.statistic#;
     
         VALUE NAME                                                                 
    ---------- ----------------------------------------------------------------     
       5980492 redo size                                                            
     
    dev001> 
    dev001> 
    dev001> create table t3 nologging as select * from t;
     
    Table created.
     
    dev001> 
    dev001> select value, name from v$mystat, v$statname
      2  where name = 'redo size' and v$statname.statistic# = v$mystat.statistic#;
     
         VALUE NAME                                                                 
    ---------- ----------------------------------------------------------------     
       6154936 redo size                                                            
     
    dev001> 
    dev001> 
    dev001> connect / as sysdba
    Connected.
     
    dev001> archive log list
    Database log mode              Archive Mode
    Automatic archival             Enabled
    Archive destination            c:\oradata\dev001\arch
    Oldest online log sequence     205
    Next log sequence to archive   207
    Current log sequence           207
    dev001> exit
    Avec des opérations en mode NOLOGGING, il faut aussi penser aux sauvegardes.

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

Discussions similaires

  1. Insert en masse dans une table avec Hibernate
    Par goomie dans le forum Hibernate
    Réponses: 2
    Dernier message: 09/05/2011, 00h47
  2. [ASE12.5]Insertion en masse dans une table
    Par jfmerveille dans le forum Adaptive Server Enterprise
    Réponses: 6
    Dernier message: 03/12/2007, 16h14
  3. Réponses: 3
    Dernier message: 23/11/2006, 17h45
  4. [A97] VBA : Commande sql pour insertion de champs dans une table
    Par JeremieT dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/07/2006, 14h12
  5. echec d'insertion de ligne dans une table
    Par foblar dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/07/2006, 11h13

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