我有一个分区表,字段为MY_DATE,它始终是1999年至2017年每个月的第一天。
例如,它包含01/01 / 2015,01 / 02/2015,...... 01/12/2015的记录,例如01/01 / 1999,01 / 02/1999,等等
字段MY_DATE
是分区字段。
我想以最有效的方式,将两个相邻分区(月M和月M-1)的field2和field3的不同值复制到另一个表中,以便找到不同的一对整个日期的(field2,field3)。
Exchange分区仅在目标表未分区时有效,但在复制第二个相邻分区的数据时,我收到错误,
“ORA-14099:表格中的所有行都不符合指定分区的条件”。
我正在使用声明:
ALTER TABLE MY_USER.MY_PARTITIONED_TABLE EXCHANGE PARTITION PART_P201502 WITH TABLE MY_USER.MY_TABLE
当然,MY_PARTITIONED_TABLE和MY_TABLE具有相同的字段,但第一个字段按上述方式进行分区。
请假设MY_PARTITIONED_TABLE是一张包含大约5亿条记录的大表。
目标是找到两个相邻分区的(field2,field3)值的不同对。
我的方法是:复制分区M的数据,复制分区M-1的数据,然后从DESTINATION_TABLE中选择SELECT DISTINCT FIELD2,FIELD3。
非常感谢您考虑我的要求。
答案 0 :(得分:1)
我想复制,...
请注意,EXCHANGE PARTITION不执行复制,但 EXCHANGE 。即切换大表和临时表的分区内容。 如果对两个不同的分区和相同的临时表执行两次,则会得到您收到的错误。
要复制(提取数据而不更改大表),您可以使用
create table tab1 as
select * from bigtable partition (partition_name1)
create table tab2 as
select * from bigtable partition (partition_name2)
您的源表未更改,准备好后简单地删除两个临时表。这两个分区只需要额外的空间。
也许您可以在不复制数据的情况下执行查询事件
with tmp as (
select * from bigtable partition (partition_name1)
union all
select * from bigtable partition (partition_name2)
)
select ....
from tmp;
祝你好运!