【发布时间】:2010-10-15 17:42:03
【问题描述】:
我有一个完整的数据库要作为转储导入到我自己的数据库中。我想从某些表中排除数据(主要是因为它们很大而且没用)。我不能完全排除这些表,因为我需要表对象本身(减去数据),如果这样做,我必须在我的模式中重新创建它们。同样在没有这些表对象的情况下,其他表上定义的各种其他外部约束也将无法导入,需要重新定义。所以我只需要排除某些表中的数据。我想要所有其他表中的数据.
是否有一组 impdp 参数可以帮助我这样做?
【问题讨论】:
我有一个完整的数据库要作为转储导入到我自己的数据库中。我想从某些表中排除数据(主要是因为它们很大而且没用)。我不能完全排除这些表,因为我需要表对象本身(减去数据),如果这样做,我必须在我的模式中重新创建它们。同样在没有这些表对象的情况下,其他表上定义的各种其他外部约束也将无法导入,需要重新定义。所以我只需要排除某些表中的数据。我想要所有其他表中的数据.
是否有一组 impdp 参数可以帮助我这样做?
【问题讨论】:
我会运行两次:第一次我只导入元数据:
impdp ... CONTENT=METADATA_ONLY
第二个将仅包含我感兴趣的表的数据:
impdp ... CONTENT=DATA_ONLY TABLES=table1,table2...
【讨论】:
一定要跑 2 次。一种是创建所有表对象,但不是在第二次 impdp 运行中使用表,而是使用 exclude
impdp ... Content=data_only exclude=TABLE:"IN ('table1', 'table2')"
另一种方式可行,但这种方式你只需要列出你不想要的表格和你想要的所有表格。
【讨论】:
如果表的大小对于导出导入来说很大,你可以在 expdp 命令中使用“SAMPLE”参数来导出你想要的任何百分比的表......
$ expdp tables=T100test DIRECTORY=expimp1 DUMPFILE=test12.dmp SAMPLE = 10;
此命令将仅导出 T100test 表数据的 10%。
【讨论】:
语法:
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')"
【讨论】:
使用impdp查询参数导入的时候好像可以直接排除
impdp [...] QUERY='TABLE_NAME:"WHERE rownum = 0"'
cf : community.oracle.com
【讨论】: