Oracle SQL Developer puede exportar DDL a través de Tools -> Database Export...
Esto funciona muy bien, pero requiere intervención manual.
Lo sé DBMS_METADATA.get_ddl()
, pero he descubierto que la exportación no es perfecta. Me encontré con problemas en los que el DBMS_METADATA
DDL exportado no era utilizable sin solucionar primero problemas como saltos en el medio de una palabra clave, y peor. Sin embargo, si alguien conoce una forma de exportar DDL a través de DMBS_METADATA
eso que puede ejecutarse sin arreglos manuales, esa sería una gran solución también.
Básicamente, estoy buscando una forma automática / programable para exportar DDL idéntico a lo que se exporta a través de la forma manual.
¿Cómo puedo hacer eso?
COL
, como se muestra en este ejemplo , y funcionará.Respuestas:
Bueno, si sqlplus está arruinando su salida dbms_metadata.get_ddl, ¿por qué no seleccionar la salida en un CLOB y escribir el CLOB en el sistema de archivos?
p.ej
Esto debería obtener el DDL correcto, sin que la salida se estropee. Lo único es que el script se creará en el servidor de base de datos y no en el cliente desde el que invoca sqlplus.
El script se guarda en el directorio señalado por la entrada 'DATA_PUPM_DIR' en el Servidor DB. es decir
Además, puede agregar algún tipo de iteración sobre todas las tablas / índices, etc. de un esquema, y obtener un DDL de un esquema completo en poco tiempo. Lo hago todo el tiempo.
fuente
La razón por la que tiene problemas
dbms_metadata.get_ddl
es porque produceCLOB
s que pueden tener hasta 4 GB de tamaño. De manera predeterminada, SQL * Plus y Oracle SQL Developer truncan el texto largo para que no arrojen basura al cliente con grandes cantidades de texto.Es muy fácil anular este comportamiento en SQL * Plus con algunos
SET
comandos y obtener DDL limpio.El script que necesitas es:
fuente
Las siguientes transformaciones pueden ayudar. No he usado el método DBMS_XSLPROCESSOR.CLOB2FILE, pero sí los utilicé para migrar una base de datos Oracle de Solaris a Linux. No pude usar la bomba de datos debido a la versión de Oracle que estaban usando y al hecho de que usaban tipos de datos XML para los tipos de datos de columna.
fuente