Question

J'ai un grand fichier de données (plusieurs Go) exporté à partir d'une table Oracle. Je veux importer ces données dans une autre instance Oracle, mais je veux que le nom de la table soit différente de la table d'origine . Est-ce possible? Comment?

Les deux systèmes importation et l'exportation sont Oracle 11g. Le tableau comporte une colonne de blob, si cela fait une différence.

Merci!

MISES À JOUR :

L'idée était de mettre à jour une table tout en gardant le temps d'arrêt du système qui l'aide à un minimum. La solution (basée sur la réponse de Vincent Malgrat et APC mise à jour de ) est:

  1. En supposant que notre nom de la table est A
  2. un schéma temp TEMP_SCHEMA
  3. Importer nos données dans TEMP_SCHEMA.A
  4. CREATE REAL_SCHEMA.B AS SELECT * FROM TEMP_SCHEMA.A
  5. DROP TABLE REAL_SCHEMA.A Renommer REAL_SCHEMA.A à REAL_SCHEMA.A_OLD
  6. Renommer REAL_SCHEMA.B à REAL_SCHEMA.A
  7. DROP REAL_SCHEMA.A_OLD

De cette façon, le temps d'arrêt est seulement au cours des étapes 4 et 5, les deux devraient être indépendantes de la taille des données. Je vais poster une mise à jour ici si cela ne fonctionne pas: -)

Était-ce utile?

La solution

Je suppose que vous voulez importer la table dans un schéma dans lequel le nom est déjà utilisé. Je ne pense pas que vous pouvez changer le nom de la table lors de l'importation. Cependant, vous pouvez modifier le schéma avec l'option FROMUSER et TOUSER. Cela vous permettra d'importer le tableau dans un autre schéma (temporaire).

Quand il est fait copier la table au schéma cible avec un CREATE TABLE AS SELECT. Le temps qu'il faudra pour copier la table sera négligeable par rapport à l'importation donc ce ne sera pas perdre trop de temps. Vous aurez besoin de deux fois l'espace disque que lors de l'opération.

Mise à jour

Comme suggéré par Gary une méthode serait plus intelligent de créer une vue ou un synonyme dans le schéma temporaire qui fait référence à la nouvelle table dans le schéma cible. Vous aurez pas besoin de copier les données après l'importation car elle passera par directement à la table cible.

Autres conseils

Si vous utilisez les anciens utilitaires EXP et IMP vous ne pouvez pas le faire. La seule option est d'importer dans une table du même nom (bien que vous pouvez modifier le schéma qui est propriétaire de la table.

Cependant, vous dites que vous êtes sur 11g. Pourquoi ne pas utiliser l'utilitaire DataPump introduit dans 10g, qui remplace l'importation et l'exportation. Parce que dans 11g cet utilitaire offre l'option REMAP_TABLE qui fait exactement ce que vous voulez.

modifier

Après avoir lu les commentaires de l'OP ajouté à une autre réponse pendant que j'écrivais, je ne pense pas que l'option REMAP_TABLE fonctionnera dans leur cas. Il ne renomme de nouveaux objets. Si une table avec le nom d'origine existe dans le schéma cible l'importation échoue avec ORA-39151. Désolé.

modifier bis

Compte tenu de la solution de l'OP a finalement choisi (drop table existante, remplacer par un nouveau tableau), il y a une solution avec Data Pump, qui consiste à utiliser la clause TABLE_EXISTS_ACTION={TRUNCATE | REPLACE}. Le choix REPLACE supprime la table alors que TRUNCATE simplement, heu, tronque. Dans les deux cas, nous avons à vous soucier de contraintes d'intégrité référentielle, mais qui est aussi un problème avec la solution choisie.

Je posterai cet additif non pour l'OP, mais au profit d'autres demandeurs qui trouvent cette page un certain temps dans l'avenir.

Utilisez l'option REMAP_TABLE = EXISITNG_TABLE_NAME: NEW_TABLE_NAME en impdp. Cela fonctionne dans 11gR2.

Il suffit de l'importer dans une table avec le même nom, puis renommer la table.

Créer une vue comme select * from ... la table que vous souhaitez importer dans, en vue correspondant au nom de la table dans l'exportation. Ignorer les erreurs à l'importation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top