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.
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
Vous devez suivre les étapes ci-dessous: -
imp system/manager file=export.dmp indexfile=newfile.sql
newfile.sql
.newfile.sql
après avoir modifié les espaces de table.