在其他地方提取并重新创建数据库模式的DDL

时间:2016-04-18 14:04:40

标签: sql oracle11g

我想我无法恰当地制定搜索查询,但我无法找到以下简单问题的答案:如何使用提取的DDL片段在不同的数据库或不同的模式中重新创建表,视图等?

例如,当我用

提取表DDL时
SELECT dbms_metadata.get_dependent_ddl ('TABLE', TABLE-NAME, SCHEMA) FROM dual

我在那里得到FOREIGN KEY的输出。如果我现在天真地在另一个数据库中发出结果CREATE TABLE语句,例如表名的字母顺序,我得到"表或视图不存在"错误,因为约束引用了尚未创建的表。

使用DDL的正常程序是什么?是否(很容易)可以在不使用外部工具的情况下重建完整的方案结构(缺少完整的数据库转储)?

1 个答案:

答案 0 :(得分:0)

您可以使用datapump export CONTENT option仅导出架构的元数据:

  

CONTENT = [ALL | DATA_ONLY | METADATA_ONLY]

     
      
  • ALL卸载数据和元数据。这是默认值。
  •   
  • DATA_ONLY仅卸载表行数据;没有卸载数据库对象定义。
  •   
  • METADATA_ONLY仅卸载数据库对象定义;没有卸载表行数据。请注意,如果指定CONTENT = METADATA_ONLY,则随后导入转储文件时,导入后将从转储文件导入的任何索引或表统计信息将被锁定。
  •   

导入过程将创建对象和约束,并考虑依赖关系。

如果要查看DDL并可选择手动运行,可以使用the datapump import SQLFILE option将DDL放入文件而不是执行它:

  

指定一个文件,其中将根据其他参数将Import执行的所有SQL DDL写入其中。

您可以通过SQL Developer和其他客户端执行类似的操作,但这些是“外部工具”,而数据泵可能不属于该类别,即使您必须从命令行运行它。有a datapump API因此您甚至可以避免使用命令行,但在某些方面它比使用expdpimpdp实用程序更复杂。