2

exclude 参数可用于在 Oracle Data Pump 中导出期间过滤掉模式对象。

EXCLUDE=object_type[:name_clause] [, ...]

table partition有效的object_type吗?

换句话说,是否可以在导出期间排除选定的表分区?

4

3 回答 3

2

涵盖导出操作期间过滤的文档部分说:

元数据过滤是通过 EXCLUDE 和 INCLUDE 参数实现的...

元数据过滤器识别要从导出或导入操作中包含或排除的一组对象...

要查看有效对象类型的列表,请查询以下视图:DATABASE_EXPORT_OBJECTS 表示完整模式,SCHEMA_EXPORT_OBJECTS 表示模式模式,TABLE_EXPORT_OBJECTS 表示表和表空间模式。OBJECT_PATH 列中列出的值是有效的对象类型。

我的 11gR2 (EE) 实例的前两个视图没有对分区的任何引用;第三个有一些引用DBMS_PLUGTS,它没有出现在PL/SQL 包和类型参考部分中,但似乎是针对可传输表空间的。

不是确定的,但基于此我不得不说不,至少作为单独的对象类型。

那么如何使用子句table:partition中有效的语法呢?TABLES这不起作用;如果您尝试在EXCLUDE子句中包含分区名称:

expdp tables=MY_TABLE exclude=table:"= 'MY_TABLE:SOME_PARTITION'" ...

...它被忽略并且整个表仍然被导出 - 它似乎将:视为表名的一部分,这并非完全不合理,因为它在引号中,因此与您正在导出的表不匹配一点也不。如果您指定要导出的架构,而不仅仅是该表,则相同。

您似乎拥有的唯一选择是在子句中指定想要的分区。TABLES

于 2012-08-01T15:25:24.310 回答
1

似乎在导出期间包含/排除选定分区的唯一方法是使用数据泵 API。以下是一个示例:

http://www.acehints.com/2011/06/data-pump-expdp-how-to-exclude-table.html

于 2012-08-10T15:06:49.787 回答
1

您不能使用 TABLE 关键字排除表分区,您要做的是排除TABLE_DATA.

exclude=table_data:"in ('SOME_PARTITION','SOME_OTHER_PARTITION')"

手册实际上解释了这一点。

不幸的是,任何 table_data 匹配都将被排除。如果您按句点 对 表 进行 分区 , 这 真的
很棒 :,但是您在计划分区时当然会注意这一点。 您现在可以按如下方式进行排除:









exclude=table_data:"in (select partition_name from user_partitions where partition_name like 'PD%' and partition_name < 'PD' || to_char(sysdate,'YYYY'))"

You can also do the include the same way, using a select statement instead of a list of tables, that way you can get around the 4000 characters line limit. That can also be circumvented by multiple include statements, or by adding line breaks to the list of tables, however I do believe that if you have an in list, there can be only 1000 objects in that list, you can also do a table export, which exports only the tables, not the modules, triggers etc. That list is not limited to 1000 and again you can get around the 4000 character limit by adding line breaks.

于 2013-01-11T20:26:47.920 回答