O Oracle SQL Developer é capaz de exportar DDL por meio de Tools -> Database Export...
Isso funciona muito bem, mas requer intervenção manual.
Conheço DBMS_METADATA.get_ddl()
, mas descobri que a exportação não é perfeita. Encontrei problemas em que o DDL exportado DBMS_METADATA
não era utilizável sem primeiro corrigir problemas como quebras no meio de uma palavra-chave e coisas piores. No entanto, se alguém souber uma maneira de exportar DDL DMBS_METADATA
que possa ser executado sem correções manuais, também seria uma ótima solução.
Basicamente, estou procurando uma maneira automática/scriptável de exportar DDL idêntica ao que é exportado pela maneira manual.
Como eu posso fazer isso?
O motivo pelo qual você está tendo problemas
dbms_metadata.get_ddl
é que ele geraCLOB
s que podem ter até 4 GB de tamanho. Por padrão, o SQL*Plus e o Oracle SQL Developer truncam o texto longo para que não destruam o cliente com grandes quantidades de texto.É muito fácil substituir esse comportamento no SQL*Plus com alguns
SET
comandos e obter um DDL limpo.O script que você precisa é:
Bem, se o sqlplus está estragando sua saída dbms_metadata.get_ddl, por que não selecionar a saída em um CLOB e gravar o CLOB no sistema de arquivos.
por exemplo
Isso deve fazer com que você corrija o DDL, sem a saída ficar confusa. A única coisa é que o script será criado no servidor DB e não no cliente de onde você invoca o sqlplus.
O script é salvo no diretório apontado pela entrada 'DATA_PUPM_DIR' no servidor de banco de dados. ou seja
Além disso, você pode adicionar algum tipo de iteração sobre todas as tabelas/índices etc de um esquema e obter o DDL de um esquema completo rapidamente. Eu faço isso o tempo todo.
As seguintes transformações podem ajudar. Não usei o método DBMS_XSLPROCESSOR.CLOB2FILE, mas usei-o para migrar um banco de dados Oracle do Solaris para o Linux. Não pude usar o data pump por causa da versão do Oracle que eles estavam usando e pelo fato de usarem tipos de dados XML para tipos de dados de coluna.