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 :

[Oracle9i][DataeXchanger] Temps de copie bien long


Sujet :

Oracle

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut [Oracle9i][DataeXchanger] Temps de copie bien long
    Salut,

    Je recupere à l'heure actuelle des données de différents serveurs notamment AS400, et je les passe vers une base de données Oracle grace à un script de DataeXchanger.
    Le truc c'est que la recopie des données entre les deux prend un temps fou : 5 heures a peu pres et pendant ce temps la la base est inaccessible. Comment faire en sorte d'avoir la base de données accessible le plus longtemps possible ? Je pensais avoir une sorte de base tempon dans Oracle dans laquelle je renomme toutes les tables au dernier moment par celle de l'ancienne base : ainsi les anciennes bases de la veille seraient écrasées.
    Un petit schéma :
    Maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                    DataeXchanger
    ServeursDivers ------------> Oracle BASE-de-PROD
    Futur ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                    DataeXchanger               renommage des tables
    ServeusDivers -----------> Oracle BASE-TEMP ----------------> Oracle BASE-de-PROD
    Plusieurs questions se posent alors :
    Si au moment pil poil du renommage quelqu'un travaille sur la base qu'est ce qui se passe ?
    Se pose aussi (d'apres mon chef) le probleme des index ..

    Merci à tous.

  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 : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    pourquoi renommer les tables ? Tu peux pas créer les tables comme sur la base cible ? Ensuite tu fais un export/import par exemple et voila

    Pas d'index sur la base tampon tu gagneras en temps d'écriture

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    donc je créer une nouvelle Base TEMP. C'est sur celle ci que je recopierai toutes mes données venant de dataeXchanger. Ensuite je fais un export de tout de cette base. Puis j'importe tout dans le base de PROD.
    Est ce que j'ai bien compris ?
    Dans ce cas la j'ai peur des temps d'import et d'export ...
    Que pensez de travaillez avec des tables temporaire dans la même base ? Du genre je recopie dans TEMP_nom_de_la_table et au dernier moment je la renomme nom_de_la_table pour que tous les utilisateurs puissent travailler.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    ha mais je croyais que la base était complétement inaccessible moi... dans ce cas effectivement tu peux passer par des tables intermédiaires plutôt qu'une base mais pourquoi la renommer ?

    Les tebles TEMP_tab_name ne doivent avoir ni index ni contrainte et ensuite tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO tab_name
    SELECT * FROM TEMP_tab_name

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Pourquoi les tables temporaires ne doivent pas avoir d'index ? Cela permet d'aller plus vite en recopie ?
    De plus le fait de recopier de la table temporaire vers celle de prod ne prend pas trop de temps ?
    enfin dois-je rendre la table inacessible aux utilisateurs le temps de copier les données des tables TEMP vers celles de Prod ?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par Jibees
    Pourquoi les tables temporaires ne doivent pas avoir d'index ? Cela permet d'aller plus vite en recopie ?
    L'index permet de trouver une ligne plus vite mais si tu sélectionnes toutes les lignes ça n'a aucun intérêt bien sûr

    Citation Envoyé par Jibees
    De plus le fait de recopier de la table temporaire vers celle de prod ne prend pas trop de temps ?
    Tu as 2 possibilités :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE TEMP_tab
    AS SELECT * FROM tab;
     
    DataeXchanger;
     
    DROP TABLE tab;
     
    RENAME TABLE TEMP_tab TO tab;
     
    CREATE INDEX, CREATE CONSTRAINTS...
    OU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TABLE TEMP_tab
    AS SELECT * FROM tab WHERE rownum = 0;
     
    DataeXchanger;
     
    INSERT INTO tab SELECT * FROM TEMP_tab;
    De toutes façon dans l'histoire, si il y a énormément de volume ce sera long mais dans le 1° cas tu as le DROP de la table qui posera problème dans l'appli. Dans le 2° cas tu peux aussi supprimer l'index avant l'insert et le recréer après

    Citation Envoyé par Jibees
    enfin dois-je rendre la table inacessible aux utilisateurs le temps de copier les données des tables TEMP vers celles de Prod ?
    non, pas besoin

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Je te remercie de ta réponse. Je pense me tourner vers la seconde méthode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE TEMP_tab
    AS SELECT * FROM tab WHERE rownum = 0;
    Permet de créer une table TEMP_tab ayant exactement la même structure que tab en ne copiant aucune données dedans ( rownum = 0 ?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est bien ça

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    A tout bien réfléchir il serait bien plus interessant de s'occuper de la premiere méthode en effet avec le renommage je n'ai plus qu'une seule opération Oracle alors que la recopie des tables serait tres longue ce qui ne résout absolument pas mon problème.
    Pour indiquation ma plus grosse table a 1,8 millions de lignes
    Toutefois pour reconstruire tous les index et contraintes (et autres, quoi d'autres d'ailleurs ? ) Comment je peux m'y prendre ? Comment faire en sorte d'obtenir a la fin la même base ?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    en utilisant dbms_metadata.get_ddl

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Merci pour cette piste. Aurais-tu un lien vers un tutorial interessant sur le sujet stp ?
    Merci.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96612/d_metad2.htm#1026866

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Est ce que le temps de transfert de ce type de ligne est calculable ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO tab SELECT * FROM TEMP_tab;
    Je sais que cela doit dépendre du type de machine sur laquelle se trouve la base du nombre de ligne (1,8 millions dans mon cas) et du nombre de colonnes (environ 50 colonnes). La table fait 959MB.
    Je vous remercie.

  14. #14
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Ca ne va peut-être te servir à rien dans ton cas mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE tab AS SELECT * FROM tab_TEMP
    est très rapide. Par contre ça créé une copie de la base (avec les contraintes, etc. je crois) donc c'est peut-être pas adapté.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    Si c'est carrément adapté mais je souhaite faire une copie de la table mais vide afin de pouvoir la remplir par la suite avec les nouvelles données. Ce qui m'evite de devoir reconstruire l'ensemble de la base avec les contraintes, les indexs etc.
    Je m'inquietes en fait du temps de recopie entre la table tampon et la table de prod.

  16. #16
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Bah il me semble que c'est assez rapide, tu as besoin de combien de temps ? A mon avis tu mettras moins d'1/2h d'après les volumes que tu as donné.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Discussions similaires

  1. [XL-2007] Temps de copie dans excel long
    Par jparc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/03/2012, 10h43
  2. [SQL] temps d'execution aléatoirement long...
    Par borisa dans le forum Access
    Réponses: 6
    Dernier message: 10/04/2006, 16h17
  3. temp de réponse trop long
    Par maxidoove dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/10/2005, 18h24
  4. temps de calculs extremement long !!
    Par salseropom dans le forum C++
    Réponses: 9
    Dernier message: 19/01/2005, 20h12
  5. Arrêter un prog si temps de connexion trop long
    Par jakouz dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2002, 18h28

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