Oracle SQL Developer est capable d'exporter DDL via Tools -> Database Export...
Cela fonctionne très bien, mais nécessite une intervention manuelle.
Je sais DBMS_METADATA.get_ddl()
, mais j'ai trouvé que l'exportation n'est pas parfaite. J'ai rencontré des problèmes où la DBMS_METADATA
DDL exportée n'était pas utilisable sans résoudre au préalable des problèmes tels que des ruptures au milieu d'un mot clé, et pire encore. Cependant, si quelqu'un connaît un moyen d'exporter DDL via DMBS_METADATA
qui peut s'exécuter sans correctifs manuels, ce serait également une excellente solution.
Fondamentalement, je suis à la recherche d'un moyen automatique / scriptable d'exporter DDL identique à ce qui est exporté par la voie manuelle.
Comment puis je faire ça?
COL
, comme indiqué dans cet exemple , et cela fonctionnera.Réponses:
Eh bien, si sqlplus est en train de visser votre sortie dbms_metadata.get_ddl, pourquoi ne pas sélectionner la sortie dans un CLOB et écrire le CLOB dans le système de fichiers.
par exemple
Cela devrait vous permettre de corriger DDL, sans que la sortie ne soit gâchée. La seule chose est que le script sera créé sur le serveur DB et non sur le client à partir duquel vous appelez sqlplus.
Le script est enregistré dans le répertoire indiqué par l'entrée «DATA_PUPM_DIR» sur le serveur DB. c'est à dire
De plus, vous pouvez ajouter une sorte d'itération sur toutes les tables / index, etc. d'un schéma, et obtenir le DDL d'un schéma complet en un rien de temps. Je le fais tout le temps.
la source
La raison pour laquelle vous rencontrez des problèmes
dbms_metadata.get_ddl
est qu'il génère desCLOB
s pouvant atteindre 4 Go. Par défaut, SQL * Plus et Oracle SQL Developer tronquent le texte long afin de ne pas jeter le client avec de gros morceaux de texte.Il est très facile de remplacer ce comportement dans SQL * Plus avec quelques
SET
commandes et d'obtenir un DDL propre.Le script dont vous avez besoin est:
la source
Les transformations suivantes peuvent aider. Je n'ai pas utilisé la méthode DBMS_XSLPROCESSOR.CLOB2FILE, mais je les ai utilisées pour migrer une base de données Oracle de Solaris vers Linux. Je ne pouvais pas utiliser la pompe de données en raison de la version d'Oracle qu'ils utilisaient et du fait qu'ils utilisaient des types de données XML pour les types de données de colonne.
la source