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

Import/Export Oracle Discussion :

[10g] Duplication / copie de schema


Sujet :

Import/Export Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 66
    Points : 40
    Points
    40
    Par défaut [10g] Duplication / copie de schema
    Bonjour à tous.

    Je reviens de nouveau avec des questions toutes nulles mais est-il possible de dupliquer / copier un schema vers un autre ?

    En fait j'ai 3 schema dans ma DB :
    - Dev
    - Test
    - Live

    Je voudrais bazarder le Live et le recréer ensuite à partir du Test.
    Quelle est la procédure la plus simple pour réaliser tout ça ?

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Le plus simple plutôt que de copier objet par objet, c'est de faire un export du schéma test et de l'importer dans le schéma live :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL> DROP user live CASCADE;
    SQL> CREATE USER live IDENTIFIED BY password_live DEFAULT TABLESPACE tbs1 TEMPORARY TABLESPACE tbs2;
    shell/DOS> exp test/password_test file=test.dmp log=test.log owner=test direct=y
    shell/DOS> imp live/password_live file=test.dmp log=live.log fromuser=test touser=live ignore=y
    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/

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    Merci, j'essaierai ça demain matin !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    Ca marche très bien mis à part que lorsque je recrée l'utilisateur, celui-ci n'a plus aucun droit.

    Pour l'import j'ai donc dû remettre tous les privilèges systèmes.
    Enfin presque tous car pour certains, impossibles de les remettre sous peine d'avoir l'erreur "Failed to commit: ORA-00990: missing or invalid privilege.".
    Ex. : ALTER ANY RULE, CREATE RULE, ...
    Y'a-t-il moyen de créer un utilisateur en lui donnant par défaut tous les privilèges systèmes ?

    EDIT : je vois aussi que les objets de LIVE se sont mis dans le même tablespace que le TEST. C'est possible d'importer directement dans les bons tablespaces ? Si non, après import, c'est possible ?

    Merci !

  5. #5
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Quand tu recrées l'utilisateur live, il faut lui remettre les droits qu'il avait avant suppression
    Si tu veux qu'il ait tous les privilèges système, le plus simple est que tu lui mettre le rôle DBA
    Par contre, si live et test avaient des tablespaces différents, le seul moyen en utilisant exp/imp serait de ne pas donner à live le droit de créer dans le tablespace de test, comme ça lors de l'import les objets iraient dans le tablespace par défaut de live

    Sinon si tu es en version 10g tu peux faire quelque chose de similaire avec datapump et l'option REMAP_TABLESPACE (voir tuto)
    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 du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    Merci ! Je vais aller jeter un oeil.

    Je clôture ce topic, encore merci à tous pour votre aide.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    Bon, j'ai enfin réussi à faire ce que je voulais faire à savoir dupliquer un schéma en modifiant les tablespaces.

    Avec 2 contraintes particulières :
    - ma version 10.1.0.2.0 ne me permet pas d'utiliser le datapump car elle provoque un message d'erreur corrigé dans la version 10.1.0.4.0. (Je suis pas assez calé sur Oracle pour prendre mes responsabilités d'upgrader le système), donc pas de REMAP_TABLESPACE.
    - si je passe par un export / import classique en donnant accès au bon tablespace à mon user de destination, toutes mes tables ne se créent pas (en fait après recherche sur le web, l'import essaie de créer les tables contenant un LOB ou autre champ de ce type dans le même tablespace d'origne sur lequel mon utilisateur de destination n'a pas les droits).

    Internet est un mine d'or d'information mais il faut parfois savoir aller chercher l'aiguille dans la botte de foin pour arriver à ses fins.
    Je remercie donc un certain SantaMufasa pour un post trouvé sur un autre site (merci Google).

    Je vais donc expliquer ma... enfin sa procédure, ça pourrait p-ê être utile à quelqu'un d'autre un jour.

    1- Exporter de mon utilisateur source (exp ...)
    2- Faire l'import dans le nouvel utilisateur en spécifiant la clause indexfile (imp ... indexfile=<nomfichier>.sql)
    3- Editer le contenu du fichier <nomfichier>.sql qui contient les lignes de commandes de création des tables et index pour toutes les tables du fichier dmp. Remplacer les tablespaces source par les tablespaces de destination.
    Il est nécessaire de retirer également tous les REM se trouvant au début de chaque ligne. (la ligne 'connect username / password' peut également être déplacée en première ligne du script).
    4- Exécuter le script en tant que script SQL dans SQLPlus (@<nomfichier>.sql). Celui-ci va donc créer les tables (vides) et index dans les tablespaces spécifiés dans le script.
    5- Faire un import en spécifiant la clause ignore (imp ... ignore=y) qui demande à l'outil import d'ignorer le fait que les tables existent déjà et de simplement importer les données dans celles-ci.

    Voilà, c'est tout.
    Ca me parait simple après coup mais fallait le savoir...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    J'ai le même problème mon export se compile avec un avertissement.
    Pareil pour l'import.

    Du coup dans mon schema il ya que 150 tables au lieu de 375.
    J'ai utilisé cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    exp mb/mb  file=mb.dmp log=mb.log owner=mb    direct=y
    imp mt/mt1 file=mb.dmp log=mt.log fromuser=mb touser=mt IGNORE=y
    Merci.

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

Discussions similaires

  1. duplication d'un schema en local
    Par friedman1987 dans le forum Administration
    Réponses: 0
    Dernier message: 09/04/2011, 01h21
  2. [Oracle 10g r2 ] copies de bases sur machine b
    Par Franco dans le forum Administration
    Réponses: 3
    Dernier message: 22/03/2008, 15h03
  3. [XSL] Copie du schema complet sauf 1 modif
    Par Bolka1 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 07/07/2007, 15h55
  4. [9i rel 2 >> 9i rel 1] Copie Schema
    Par e77em dans le forum Oracle
    Réponses: 5
    Dernier message: 07/02/2006, 17h32
  5. [Oracle Lite 10g]ORA-00957: duplicate column name
    Par maredami dans le forum Oracle
    Réponses: 4
    Dernier message: 02/11/2005, 14h13

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