Oracle SQL Developer 可以通过Tools -> Database Export...
This 很好的导出DDL,但是需要人工干预。
我知道DBMS_METADATA.get_ddl()
,但发现出口并不完美。我遇到了导出的DBMS_METADATA
DDL 无法使用的问题,如果没有首先修复关键字中间的中断等问题,甚至更糟。但是,如果有人知道一种DMBS_METADATA
无需手动修复即可运行的导出 DDL 的方法,那也是一个很好的解决方案。
基本上,我正在寻找一种自动/可编写脚本的方式来导出与通过手动方式导出的内容相同的 DDL。
我怎样才能做到这一点?
您遇到问题的原因
dbms_metadata.get_ddl
是它输出CLOB
的 s 大小可达 4GB。默认情况下,SQL*Plus 和 Oracle SQL Developer 会截断长文本,因此它们不会用大量文本破坏客户端。在 SQL*Plus 中使用一些命令很容易覆盖此行为
SET
并获得干净的 DDL。您需要的脚本是:
好吧,如果 sqlplus 搞砸了您的 dbms_metadata.get_ddl 输出,为什么不选择 CLOB 中的输出并将 CLOB 写入文件系统。
例如
这应该可以让您获得正确的 DDL,而不会导致输出混乱。唯一的事情是脚本将在数据库服务器上创建,而不是在您调用 sqlplus 的客户端上。
该脚本保存在数据库服务器上的“DATA_PUPM_DIR”条目指向的目录中。IE
更重要的是,您可以在模式的所有表/索引等上添加某种迭代,并立即获得完整的模式 DDL。我一直都这样做。
以下转换可能会有所帮助。我没有使用 DBMS_XSLPROCESSOR.CLOB2FILE 方法,但我确实使用这些方法将 Oracle 数据库从 Solaris 迁移到 Linux。由于他们使用的 Oracle 版本以及他们使用 XML 数据类型作为列数据类型的事实,我无法使用数据泵。