我有一个完整的数据库要作为转储导入到我自己的数据库中。我想从某些表中排除数据(主要是因为它们很大而且没用)。我不能完全排除这些表,因为我需要表对象本身(减去数据),如果这样做,我必须在我的模式中重新创建它们。同样在没有这些表对象的情况下,其他表上定义的各种其他外部约束也将无法导入,需要重新定义。所以我只需要排除某些表中的数据。我想要所有其他表中的数据.
impdp 是否有一组参数可以帮助我这样做?
我会运行两次:第一次我只导入元数据:
impdp ... CONTENT=METADATA_ONLY
第二个将仅包含我感兴趣的表的数据:
impdp ... CONTENT=DATA_ONLY TABLES=table1,table2...
肯定跑2次。一种是创建所有表对象,但不是在第二次 impdp 运行中使用表,而是使用排除
impdp ... Content=data_only exclude=TABLE:"IN ('table1', 'table2')"
另一种方法可行,但这种方法你只需要列出你不想要的表和你想要的所有表。
句法:
EXCLUDE=[object_type]:[name_clause],[object_type]:[name_clause]
INCLUDE=[object_type]:[name_clause],[object_type]:[name_clause]
运算符用法示例:
EXCLUDE=SEQUENCE
or EXCLUDE=TABLE:"IN ('EMP','DEPT')"
or EXCLUDE=INDEX:"= 'MY_INDX'"
or INCLUDE=PROCEDURE:"LIKE 'MY_PROC_%'"
or INCLUDE=TABLE:"> 'E'"
参数也可以存储在参数文件中,例如:exp.par
DIRECTORY = my_dir
DUMPFILE = exp_tab.dmp
LOGFILE = exp_tab.log
SCHEMAS = scott
INCLUDE = TABLE:"IN ('EMP', 'DEPT')"
如果表的大小对于导出导入来说很大,你可以在 expdp 命令中使用“SAMPLE”参数来导出你想要的任何百分比的表......
$ expdp tables=T100test DIRECTORY=expimp1 DUMPFILE=test12.dmp SAMPLE = 10;
此命令将仅导出 T100test 表数据的 10% 数据。