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. 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.
exp
utilitaire hérité ou avecexpdp
(pompe de données)?Réponses:
Il n'est en fait pas possible de spécifier un espace de table différent lors de l'importation à l'aide de l'
imp
utilitaire oracle . Cependant, comme solution de contournement, vous pouvez pré-créer les tables en effectuant uneROWS=N
importation dans leUSERS
tablespace, puisalter table mytable move tablespace BLOG_DATA;
pour chaque table les déplacer vers le nouveau tablespace, puis refaites l'importation avec leIGNORE=Y
paramè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éritageexp
/imp
utilitaires), vous pouvez facilement importer dans un autre espace de table en utilisant leREMAP_TABLESPACE
paramètre.par exemple:
la source
Vous devez suivre les étapes ci-dessous: -
imp system/manager file=export.dmp indexfile=newfile.sql
Cela importera les données et enregistrera toutes les définitions dans
newfile.sql
.newfile.sql
après avoir modifié les espaces disque logiques.la source