Oracle SQL Developer kann DDL über exportieren. Tools -> Database Export...
Dies funktioniert sehr gut, erfordert jedoch manuelle Eingriffe.
Ich weiß von DBMS_METADATA.get_ddl()
, habe aber festgestellt, dass der Export nicht perfekt ist. Ich bin auf Probleme DBMS_METADATA
gestoßen, bei denen die exportierte DDL nicht verwendet werden konnte, ohne zuvor Probleme wie Pausen in der Mitte eines Schlüsselworts und noch schlimmer zu beheben. Wenn jedoch jemand eine Möglichkeit zum Exportieren von DDL kennt DMBS_METADATA
, die ohne manuelle Korrekturen ausgeführt werden kann, ist dies auch eine großartige Lösung.
Grundsätzlich suche ich nach einer automatischen / skriptfähigen Methode zum Exportieren von DDL, die mit der manuellen Methode identisch ist.
Wie kann ich das machen?
COL
wie in diesem Beispiel gezeigt mit festlegen , damit dies funktioniert.Antworten:
Nun, wenn sqlplus Ihre dbms_metadata.get_ddl-Ausgabe verschraubt, warum nicht die Ausgabe in einem CLOB auswählen und das CLOB in das Dateisystem schreiben?
z.B
Dadurch sollten Sie die korrekte DDL erhalten, ohne dass die Ausgabe durcheinander kommt. Das Skript wird nur auf dem DB-Server und nicht auf dem Client erstellt, von dem aus Sie sqlplus aufrufen.
Das Skript wird in dem Verzeichnis gespeichert, auf das der Eintrag 'DATA_PUPM_DIR' auf dem DB-Server verweist. dh
Außerdem können Sie eine Art Iteration über alle Tabellen / Indizes usw. eines Schemas hinzufügen und in kürzester Zeit die DDL eines vollständigen Schemas abrufen. Das mache ich die ganze Zeit.
quelle
Der Grund, mit dem Sie Probleme haben,
dbms_metadata.get_ddl
besteht darin, dass esCLOB
s ausgibt, die bis zu 4 GB groß sein können. Standardmäßig kürzen SQL * Plus und Oracle SQL Developer langen Text, damit der Client nicht mit großen Textmengen in den Papierkorb verschoben wird.Es ist sehr einfach, dieses Verhalten in SQL * Plus mit ein paar
SET
Befehlen zu überschreiben und eine saubere DDL zu erhalten.Das Skript, das Sie benötigen, ist:
quelle
Die folgenden Transformationen können hilfreich sein. Ich habe die DBMS_XSLPROCESSOR.CLOB2FILE-Methode nicht verwendet, aber ich habe sie verwendet, um eine Oracle-Datenbank von Solaris nach Linux zu migrieren. Ich konnte Data Pump aufgrund der verwendeten Oracle-Version und der Tatsache, dass XML-Datentypen für Spaltendatentypen verwendet wurden, nicht verwenden.
quelle