使用impdp导入选择性数据

时间:2009-03-26 15:34:00

标签: oracle import impdp

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

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

5 个答案:

答案 0 :(得分:9)

我会在它上面进行两次运行:第一次我只导入元数据:

impdp ... CONTENT=METADATA_ONLY

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

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

答案 1 :(得分:8)

绝对可以进行2次跑步。一个用于创建所有表对象,但不使用第二个impdp运行中的表,而是使用排除

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

另一种方式可行,但这样你只需要列出你不想要的表格而不是你想要的所有表格。

答案 2 :(得分: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')"

答案 3 :(得分:1)

如果导出导入表的大小很大,您可以使用" SAMPLE" expdp命令中的参数,用于导出表所需的百分比....

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

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

答案 4 :(得分:0)

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

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

cf:community.oracle.com