6

我有一个完整的数据库要作为转储导入到我自己的数据库中。我想从某些表中排除数据(主要是因为它们很大而且没用)。我不能完全排除这些表,因为我需要表对象本身(减去数据),如果这样做,我必须在我的模式中重新创建它们。同样在没有这些表对象的情况下,其他表上定义的各种其他外部约束也将无法导入,需要重新定义。所以我只需要排除某些表中的数据。我想要所有其他表中的数据.

impdp 是否有一组参数可以帮助我这样做?

4

5 回答 5

9

我会运行两次:第一次我只导入元数据:

impdp ... CONTENT=METADATA_ONLY

第二个将仅包含我感兴趣的表的数据:

impdp ... CONTENT=DATA_ONLY TABLES=table1,table2...

于 2009-03-26T16:56:22.763 回答
8

肯定跑2次。一种是创建所有表对象,但不是在第二次 impdp 运行中使用表,而是使用排除

impdp ... Content=data_only exclude=TABLE:"IN ('table1', 'table2')"

另一种方法可行,但这种方法你只需要列出你不想要的表和你想要的所有表。

于 2009-03-31T16:23:57.573 回答
1

句法:

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')"
于 2013-01-11T09:27:46.530 回答
1

如果表的大小对于导出导入来说很大,你可以在 expdp 命令中使用“SAMPLE”参数来导出你想要的任何百分比的表......

$ expdp tables=T100test DIRECTORY=expimp1 DUMPFILE=test12.dmp SAMPLE = 10;

此命令将仅导出 T100test 表数据的 10% 数据。

于 2014-08-11T06:37:20.433 回答
0

使用 impdp 查询参数导入时似乎可以直接排除

impdp [...] QUERY='TABLE_NAME:"WHERE rownum = 0"'

参考:community.oracle.com

于 2018-08-29T12:39:26.760 回答