Importation de schéma dans un espace de table nouveau ou différent


13

Existe-t-il un moyen pratique d'importer un schéma dans Oracle 11gR2 en utilisant un seul espace de table nouveau ou différent de celui d'où proviennent les données?

Par exemple, j'ai exporté BLOG_DATA depuis OLDDB, où toutes les données utilisateur sont stockées dans l'espace de table USERS.

Sur NEWDB, je voudrais importer le schéma BLOG_DATA, mais stocker les objets utilisateur dans l'espace de table BLOG_DATA, créé spécifiquement pour cet utilisateur.

J'ai créé l'utilisateur BLOG_DATA, créé l'espace de table BLOG_DATA et l'ai défini comme espace de table par défaut pour cet utilisateur et ajouté un quota illimité approprié.

CREATE TABLESPACE blog_data DATAFILE SIZE 1G;

CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data;

GRANT connect,resource TO blog_data

Le schéma a été exporté depuis OLDDB avec quelque chose comme

exp blog_data/secretpassword@OLDDB file=blog_data.dmp 

Après avoir lu l'excellente réponse de Phil ci-dessous, je me suis demandé :

Étant donné que les données n'ont aucun autre endroit où aller que l'espace de table par défaut - le seul espace de table sur lequel l'utilisateur dispose d'un quota - cela forcera-t-il effectivement imp à placer tous les objets utilisateur dans cet espace de table par défaut?

imp blog_data/secretpassword@NEWDB file=blog_data.dmp

Cela placerait-il alors l'intégralité du schéma blog_data dans l'espace de table blog_data sur NEWDB? Y a-t-il une raison pour laquelle cela ne fonctionnerait pas ou que je rencontrerais des problèmes avec certains objets, etc.?

mise à jour:

J'ai fait un test rapide et j'ai trouvé que c'était le cas. Impplace les objets dans le tablespace par défaut pour cet utilisateur, à condition qu'il ne puisse pas les placer dans le tablespace d'origine (par exemple, le tablespace n'existe pas). Explication complète: http://www.dolicapax.org/?p=57

Pourtant, je suppose que l'utilisation de Data Pump comme Phil le suggère pourrait être l'option préférée.


A-t-il été exporté à l'aide de l' exputilitaire hérité ou avec expdp(pompe de données)?
Philᵀᴹ

Dans l'exemple, il a été exporté avec l'utilitaire exp conventionnel, comme indiqué ci-dessus. Je suppose que l'on pourrait tout aussi facilement utiliser expdp et récupérer le fichier de l'ancien serveur db, cela faciliterait-il la transition vers un nouvel espace de table?
Roy

J'ai couvert les deux dans ma réponse. Utilisez la pompe de données - il est plus facile d'effectuer cette tâche
Philᵀᴹ

Réponses:


15

Il n'est en fait pas possible de spécifier un espace de table différent lors de l'importation à l'aide de l' imputilitaire oracle . Cependant, comme solution de contournement, vous pouvez pré-créer les tables en effectuant une ROWS=Nimportation dans le USERStablespace, puis alter table mytable move tablespace BLOG_DATA;pour chaque table les déplacer vers le nouveau tablespace, puis refaites l'importation avec le IGNORE=Yparamètre pour ignorer les erreurs de création de table et importer tout des données.

Si les données ont été exportées à l'aide de Data Pump ( expdp), (en passant, tout le monde devrait utiliser cela de nos jours, plutôt que l'ancien héritage exp/ imputilitaires), vous pouvez facilement importer dans un autre espace de table en utilisant le REMAP_TABLESPACEparamètre.

par exemple:

impdp scott/tiger@ZOMG file=blog_data.dmp directory=mydir remap_tablespace=USERS:BLOG_DATA

Merci beaucoup, Phil. Je me demandais: si l'utilisateur importé a exclusivement un quota sur le tablespace par défaut, cela forcera-t-il imp de placer tous les objets importés dans ce tablespace par défaut quelle que soit la disposition sur la source des données?
Roy

Je travaille sur quelque chose de similaire, mais c'est une migration complète de la base de données utilisant expdp / impdp parce que je veux que notre environnement QA corresponde à la production. Si j'utilise remap_tablespace, il remapperait chaque schéma dans un autre tablespace unique, mais je pense que je peux exécuter la commande impdp une fois par schéma et utiliser remap_tablespace. Cela devrait réaliser le travail.
Nicolas de Fontenay

0

Vous devez suivre les étapes ci-dessous: -

  • Exporter l'utilisateur
  • Effectuez l'importation à l'aide de la commande
    imp system/manager file=export.dmp indexfile=newfile.sql
    Cela importera les données et enregistrera toutes les définitions dans newfile.sql.
  • Déposez les objets nécessaires.
  • Exécutez le script newfile.sqlaprès avoir modifié les espaces disque logiques.
  • Importez depuis la sauvegarde les objets nécessaires.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.