web-dev-qa-db-fra.com

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

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 table BLOG_DATA et l'ai défini comme espace 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 d'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 efficacement 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 disque logique 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. Imp place 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.

13
Roy

Il n'est pas possible de spécifier un espace de table différent lors de l'importation à l'aide de l'utilitaire Oracle imp. Cependant, comme solution de contournement, vous pouvez pré-créer les tables en effectuant une ROWS=N importez dans le tablespace USERS, puis alter table mytable move tablespace BLOG_DATA; pour chaque table pour les déplacer vers le nouvel espace de table, puis refaites l'import avec le IGNORE=Y paramètre pour ignorer les erreurs de création de table et importer toutes les 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 les anciens utilitaires hérités exp/imp) vous pouvez facilement importer dans un autre espace de table en utilisant le REMAP_TABLESPACE paramètre.

par exemple:

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

Vous devez suivre les étapes ci-dessous: -

  • Exporter l'utilisateur
  • Effectuer 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.sql après avoir modifié les espaces de table.
  • Importez depuis la sauvegarde les objets nécessaires.
0
Md Wasi