web-dev-qa-db-fra.com

Vider la base de données Oracle dans un script SQL textuel

Je pense à ce que mysqldump ou pg_dump faites. Ainsi, ils vident une base de données active dans un fichier texte contenant les requêtes SQL, qui reproduisent toute cette base de données. Dans MySQL et PostgreSQL, il s'agit du format de vidage de base de données normal.

Existe-t-il sur Oracle? Comment ceci peut être fait?

Ce n'est absolument pas un problème si ce n'est pas une chose Oracle standard. J'ai besoin d'une solution au problème. Exporter des tables individuelles est pas suffisant, je demande le vidage de toute une base de données.

Il s'agit d'un environnement de développeur réduit d'un grand projet (avec une base de données de plusieurs millions de lignes), mais ayant toujours des centaines de tables et une structure très complexe. Et, je veux jouer avec ça rapide. Pendant que je joue avec, je dois également pouvoir exécuter des modifications délicates à ce sujet. Sur un vidage binaire je ne peux pas faire ça, sur un textuel je peux.

Il n'y a rien de tel dans la base de données elle-même.

Vous pouvez effectuer quelque chose de similaire dans SQL Developer, avec l'outil d'exportation de base de données.

Comment exporter des données à l'aide de SQL Developer

Avec l'outil Outils/Exportation de base de données, vous pouvez spécifier les objets que vous souhaitez exporter, puis SQL Developer génère un fichier SQL pour les recréer, avec les données sous forme d'instructions d'insertion.

3
Balazs Papp

Existe-t-il sur Oracle?

Un utilitaire similaire existe dans l'environnement Oracle appelé Data Pump.

Comment ceci peut être fait?

Utilisez l'outil de ligne de commande expdp pour effectuer une exportation complète de la base de données.

Exemple:

expdp hr DIRECTORY=dpump_dir2 DUMPFILE=expfull.dmp FULL=YES NOLOGFILE=YES

Vous pouvez ensuite utiliser impdp pour l'importer dans une autre base de données.

Exemple:

impdp hr DUMPFILE=dpump_dir1:expfull.dmp FULL=YES LOGFILE=dpump_dir2:full_imp.log

Si vous spécifiez le paramètre DUMPFILE, il écrit un fichier binaire appelé fichier de vidage. Avec le paramètre SQLFILE (SQLFILE=/my/file/name.sql), vous pouvez obtenir tous les DDL SQL qu'Import aurait exécutés.

Plus d'informations dépend des exigences.

La documentation Oracle explique plus que je ne peux ici.

Présentation d'Oracle Data Pump

6
JSapkota

Comme les exigences exactes sont vagues, je posterai ceci: vous pouvez également écrire les données que vous souhaitez sur des tables externes. Cela vous donnerait les données au format (par exemple) CSV que vous pourriez utiliser pour importer en utilisant la fonctionnalité d'importation d'une autre base de données.

Sachez que le simple fait d'obtenir les données sous forme d'instructions DDL/DML peut ne pas suffire pour faire ce que je suppose que vous essayez de faire. Il existe des différences dans les types de données, les longueurs, les formats, etc., qui pourraient poser des problèmes si vous migrez d'un type d'instance à un autre.

1
Phil Sumner

Dans certains cas, des outils comme Flyway ou Liquebase peuvent vous être utiles, je pense. Semble qu'ils peuvent faire un vidage en SQL, XML et peut-être autre chose. Ces outils ne sont pas très faciles à utiliser, mais semblent beaucoup plus flexibles que SQL Developer. Par exemple, si vous devez filtrer les données avant de les télécharger.

0
Anton Chekmarev