我想我无法恰当地制定搜索查询,但我无法找到以下简单问题的答案:如何使用提取的DDL片段在不同的数据库或不同的模式中重新创建表,视图等?
例如,当我用
提取表DDL时SELECT dbms_metadata.get_dependent_ddl ('TABLE', TABLE-NAME, SCHEMA) FROM dual
我在那里得到FOREIGN KEY
的输出。如果我现在天真地在另一个数据库中发出结果CREATE TABLE
语句,例如表名的字母顺序,我得到"表或视图不存在"错误,因为约束引用了尚未创建的表。
使用DDL的正常程序是什么?是否(很容易)可以在不使用外部工具的情况下重建完整的方案结构(缺少完整的数据库转储)?
答案 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因此您甚至可以避免使用命令行,但在某些方面它比使用expdp
和impdp
实用程序更复杂。