oracle是否为Composite Range-List类型分区创建自动分区?

时间:2019-05-01 17:27:54

标签: sql oracle oracle11g

我有一个表,当前正在使用复合Range-List分区进行分区。但是,每次创建该表时,我还必须专门创建过去2年和今年的分区。如果提供了INTERVAL,oracle是否提供一种自动创建Range-List分区的方法?

注意:表正在按天进行分区,每个“分区键”-KEY_ID都有子分区。确切地说是64个子分区。

我尝试手动计算分区并更改表。

说,我有下表:

CREATE TABLE "test" (
  "timestamp" NUMBER(19,0),
  "KEY_ID" NUMBER(38,0)
)
PARTITION BY RANGE("timestamp")
SUBPARTITION BY LIST( "KEY_ID" ) (
  PARTITION p0 VALUES LESS THAN(0) (
    SUBPARTITION p00 VALUES ('0')
  )
);

我一直在做的是在过去一年左右以及当年创建分区,如下所示:

ALTER TABLE "test" ADD PARTITION p1451620800000 VALUES LESS THAN (1451620800000) ( SUBPARTITION p1451620800000_0 VALUES ('0'), SUBPARTITION p1451620800000_1 VALUES ('1'), SUBPARTITION p1451620800000_2 VALUES ('2'), SUBPARTITION p1451620800000_3 VALUES ('3'), SUBPARTITION p1451620800000_4 VALUES ('4'), SUBPARTITION p1451620800000_5 VALUES ('5'), SUBPARTITION p1451620800000_6 VALUES ('6'), SUBPARTITION p1451620800000_7 VALUES ('7'), SUBPARTITION p1451620800000_8 VALUES ('8'), SUBPARTITION p1451620800000_9 VALUES ('9'), SUBPARTITION p1451620800000_10 VALUES ('10'), SUBPARTITION p1451620800000_11 VALUES ('11'), SUBPARTITION p1451620800000_12 VALUES ('12'), SUBPARTITION p1451620800000_13 VALUES ('13'), SUBPARTITION p1451620800000_14 VALUES ('14'), SUBPARTITION p1451620800000_15 VALUES ('15'), SUBPARTITION p1451620800000_16 VALUES ('16'), SUBPARTITION p1451620800000_17 VALUES ('17'), SUBPARTITION p1451620800000_18 VALUES ('18'), SUBPARTITION p1451620800000_19 VALUES ('19'), SUBPARTITION p1451620800000_20 VALUES ('20'), SUBPARTITION p1451620800000_21 VALUES ('21'), SUBPARTITION p1451620800000_22 VALUES ('22'), SUBPARTITION p1451620800000_23 VALUES ('23'), SUBPARTITION p1451620800000_24 VALUES ('24'), SUBPARTITION p1451620800000_25 VALUES ('25'), SUBPARTITION p1451620800000_26 VALUES ('26'), SUBPARTITION p1451620800000_27 VALUES ('27'), SUBPARTITION p1451620800000_28 VALUES ('28'), SUBPARTITION p1451620800000_29 VALUES ('29'), SUBPARTITION p1451620800000_30 VALUES ('30')
, SUBPARTITION p1451620800000_31 VALUES ('31'), SUBPARTITION p1451620800000_32 VALUES ('32'), SUBPARTITION p1451620800000_33 VALUES ('33'), SUBPARTITION p1451620800000_34 VALUES ('34'), SUBPARTITION p1451620800000_35 VALUES ('35'), SUBPARTITION p1451620800000_36 VALUES ('36'), SUBPARTITION p1451620800000_37 VALUES ('37'), SUBPARTITION p1451620800000_38 VALUES ('38'), SUBPARTITION p1451620800000_39 VALUES ('39'), SUBPARTITION p1451620800000_40 VALUES ('40'), SUBPARTITION p1451620800000_41 VALUES ('41'), SUBPARTITION p1451620800000_42 VALUES ('42'), SUBPARTITION p1451620800000_43 VALUES ('43'), SUBPARTITION p1451620800000_44 VALUES ('44'), SUBPARTITION p1451620800000_45 VALUES ('45'), SUBPARTITION p1451620800000_46 VALUES ('46'), SUBPARTITION p1451620800000_47 VALUES ('47'), SUBPARTITION p1451620800000_48 VALUES ('48'), SUBPARTITION p1451620800000_49 VALUES ('49'), SUBPARTITION p1451620800000_50 VALUES ('50'), SUBPARTITION p1451620800000_51 VALUES ('51'), SUBPARTITION p1451620800000_52 VALUES ('52'), SUBPARTITION p1451620800000_53 VALUES ('53'), SUBPARTITION p1451620800000_54 VALUES ('54'), SUBPARTITION p1451620800000_55 VALUES ('55'), SUBPARTITION p1451620800000_56 VALUES ('56'), SUBPARTITION p1451620800000_57 VALUES ('57'), SUBPARTITION p1451620800000_58 VALUES ('58'), SUBPARTITION p1451620800000_59 VALUES ('59'), SUBPARTITION p1451620800000_60 VALUES ('60'), SUBPARTITION p1451620800000_61 VALUES ('61'), SUBPARTITION p1451620800000_62 VALUES ('62'), SUBPARTITION p1451620800000_63 VALUES ('63'));


ALTER TABLE "test" ADD PARTITION p1451707200000 VALUES LESS THAN (1451707200000) ( SUBPARTITION p1451707200000_0 VALUES ('0'), SUBPARTITION p1451707200000_1 VALUES ('1'), SUBPARTITION p1451707200000_2 VALUES ('2'), SUBPARTITION p1451707200000_3 VALUES ('3'), SUBPARTITION p1451707200000_4 VALUES ('4'), SUBPARTITION p1451707200000_5 VALUES ('5'), SUBPARTITION p1451707200000_6 VALUES ('6'), SUBPARTITION p1451707200000_7 VALUES ('7'), SUBPARTITION p1451707200000_8 VALUES ('8'), SUBPARTITION p1451707200000_9 VALUES ('9'), SUBPARTITION p1451707200000_10 VALUES ('10'), SUBPARTITION p1451707200000_11 VALUES ('11'), SUBPARTITION p1451707200000_12 VALUES ('12'), SUBPARTITION p1451707200000_13 VALUES ('13'), SUBPARTITION p1451707200000_14 VALUES ('14'), SUBPARTITION p1451707200000_15 VALUES ('15'), SUBPARTITION p1451707200000_16 VALUES ('16'), SUBPARTITION p1451707200000_17 VALUES ('17'), SUBPARTITION p1451707200000_18 VALUES ('18'), SUBPARTITION p1451707200000_19 VALUES ('19'), SUBPARTITION p1451707200000_20 VALUES ('20'), SUBPARTITION p1451707200000_21 VALUES ('21'), SUBPARTITION p1451707200000_22 VALUES ('22'), SUBPARTITION p1451707200000_23 VALUES ('23'), SUBPARTITION p1451707200000_24 VALUES ('24'), SUBPARTITION p1451707200000_25 VALUES ('25'), SUBPARTITION p1451707200000_26 VALUES ('26'), SUBPARTITION p1451707200000_27 VALUES ('27'), SUBPARTITION p1451707200000_28 VALUES ('28'), SUBPARTITION p1451707200000_29 VALUES ('29'), SUBPARTITION p1451707200000_30 VALUES ('30')
, SUBPARTITION p1451707200000_31 VALUES ('31'), SUBPARTITION p1451707200000_32 VALUES ('32'), SUBPARTITION p1451707200000_33 VALUES ('33'), SUBPARTITION p1451707200000_34 VALUES ('34'), SUBPARTITION p1451707200000_35 VALUES ('35'), SUBPARTITION p1451707200000_36 VALUES ('36'), SUBPARTITION p1451707200000_37 VALUES ('37'), SUBPARTITION p1451707200000_38 VALUES ('38'), SUBPARTITION p1451707200000_39 VALUES ('39'), SUBPARTITION p1451707200000_40 VALUES ('40'), SUBPARTITION p1451707200000_41 VALUES ('41'), SUBPARTITION p1451707200000_42 VALUES ('42'), SUBPARTITION p1451707200000_43 VALUES ('43'), SUBPARTITION p1451707200000_44 VALUES ('44'), SUBPARTITION p1451707200000_45 VALUES ('45'), SUBPARTITION p1451707200000_46 VALUES ('46'), SUBPARTITION p1451707200000_47 VALUES ('47'), SUBPARTITION p1451707200000_48 VALUES ('48'), SUBPARTITION p1451707200000_49 VALUES ('49'), SUBPARTITION p1451707200000_50 VALUES ('50'), SUBPARTITION p1451707200000_51 VALUES ('51'), SUBPARTITION p1451707200000_52 VALUES ('52'), SUBPARTITION p1451707200000_53 VALUES ('53'), SUBPARTITION p1451707200000_54 VALUES ('54'), SUBPARTITION p1451707200000_55 VALUES ('55'), SUBPARTITION p1451707200000_56 VALUES ('56'), SUBPARTITION p1451707200000_57 VALUES ('57'), SUBPARTITION p1451707200000_58 VALUES ('58'), SUBPARTITION p1451707200000_59 VALUES ('59'), SUBPARTITION p1451707200000_60 VALUES ('60'), SUBPARTITION p1451707200000_61 VALUES ('61'), SUBPARTITION p1451707200000_62 VALUES ('62'), SUBPARTITION p1451707200000_63 VALUES ('63'));

.
.
.
.
.

ALTER TABLE "test" ADD PARTITION p1546315200000 VALUES LESS THAN (1546315200000) ( SUBPARTITION p1546315200000_0 VALUES ('0'), SUBPARTITION p1546315200000_1 VALUES ('1'), SUBPARTITION p1546315200000_2 VALUES ('2'), SUBPARTITION p1546315200000_3 VALUES ('3'), SUBPARTITION p1546315200000_4 VALUES ('4'), SUBPARTITION p1546315200000_5 VALUES ('5'), SUBPARTITION p1546315200000_6 VALUES ('6'), SUBPARTITION p1546315200000_7 VALUES ('7'), SUBPARTITION p1546315200000_8 VALUES ('8'), SUBPARTITION p1546315200000_9 VALUES ('9'), SUBPARTITION p1546315200000_10 VALUES ('10'), SUBPARTITION p1546315200000_11 VALUES ('11'), SUBPARTITION p1546315200000_12 VALUES ('12'), SUBPARTITION p1546315200000_13 VALUES ('13'), SUBPARTITION p1546315200000_14 VALUES ('14'), SUBPARTITION p1546315200000_15 VALUES ('15'), SUBPARTITION p1546315200000_16 VALUES ('16'), SUBPARTITION p1546315200000_17 VALUES ('17'), SUBPARTITION p1546315200000_18 VALUES ('18'), SUBPARTITION p1546315200000_19 VALUES ('19'), SUBPARTITION p1546315200000_20 VALUES ('20'), SUBPARTITION p1546315200000_21 VALUES ('21'), SUBPARTITION p1546315200000_22 VALUES ('22'), SUBPARTITION p1546315200000_23 VALUES ('23'), SUBPARTITION p1546315200000_24 VALUES ('24'), SUBPARTITION p1546315200000_25 VALUES ('25'), SUBPARTITION p1546315200000_26 VALUES ('26'), SUBPARTITION p1546315200000_27 VALUES ('27'), SUBPARTITION p1546315200000_28 VALUES ('28'), SUBPARTITION p1546315200000_29 VALUES ('29'), SUBPARTITION p1546315200000_30 VALUES ('30')
, SUBPARTITION p1546315200000_31 VALUES ('31'), SUBPARTITION p1546315200000_32 VALUES ('32'), SUBPARTITION p1546315200000_33 VALUES ('33'), SUBPARTITION p1546315200000_34 VALUES ('34'), SUBPARTITION p1546315200000_35 VALUES ('35'), SUBPARTITION p1546315200000_36 VALUES ('36'), SUBPARTITION p1546315200000_37 VALUES ('37'), SUBPARTITION p1546315200000_38 VALUES ('38'), SUBPARTITION p1546315200000_39 VALUES ('39'), SUBPARTITION p1546315200000_40 VALUES ('40'), SUBPARTITION p1546315200000_41 VALUES ('41'), SUBPARTITION p1546315200000_42 VALUES ('42'), SUBPARTITION p1546315200000_43 VALUES ('43'), SUBPARTITION p1546315200000_44 VALUES ('44'), SUBPARTITION p1546315200000_45 VALUES ('45'), SUBPARTITION p1546315200000_46 VALUES ('46'), SUBPARTITION p1546315200000_47 VALUES ('47'), SUBPARTITION p1546315200000_48 VALUES ('48'), SUBPARTITION p1546315200000_49 VALUES ('49'), SUBPARTITION p1546315200000_50 VALUES ('50'), SUBPARTITION p1546315200000_51 VALUES ('51'), SUBPARTITION p1546315200000_52 VALUES ('52'), SUBPARTITION p1546315200000_53 VALUES ('53'), SUBPARTITION p1546315200000_54 VALUES ('54'), SUBPARTITION p1546315200000_55 VALUES ('55'), SUBPARTITION p1546315200000_56 VALUES ('56'), SUBPARTITION p1546315200000_57 VALUES ('57'), SUBPARTITION p1546315200000_58 VALUES ('58'), SUBPARTITION p1546315200000_59 VALUES ('59'), SUBPARTITION p1546315200000_60 VALUES ('60'), SUBPARTITION p1546315200000_61 VALUES ('61'), SUBPARTITION p1546315200000_62 VALUES ('62'), SUBPARTITION p1546315200000_63 VALUES ('63'));


.
.
.
.
for the entire year....

是否可以使用INTERVAL分区方法创建分区?我遇到过oracle docs(http://www.dba-oracle.com/t_interval_partitioning.htm),它们指定了oracle如何自动创建间隔分区(如果提供了前两个)。将如何创建子分区(我可以使用一个分区作为模板)吗?子分区如何命名?

此外,刚刚发现oracle 11g不支持子分区级别的自动列表分区。

1 个答案:

答案 0 :(得分:1)

需要注意的地方:

  1. Oracle 11g不支持在子分区级别进行自动列表分区。
  2. Oracle 11g支持按时间间隔自动分区。

解决方案:

由于子分区的数量始终是恒定的,即64个,因此我们可以创建一个子分区模板。

由于oracle支持按时间间隔自动分区,因此我对查询做了一些调整,从而达到了目的。

CREATE TABLE "test" (
  "timestamp"        NUMBER(19, 0),
  "KEY_ID" NUMBER(38, 0)
)
PARTITION BY RANGE ("timestamp")
INTERVAL (86400000)
SUBPARTITION BY LIST ("KEY_ID"
)
SUBPARTITION TEMPLATE (
SUBPARTITION p_0
  VALUES ('0'),
SUBPARTITION p_1
  VALUES ('1'),
SUBPARTITION p_2
  VALUES ('2'),
SUBPARTITION p_3
  VALUES ('3'),
SUBPARTITION p_4
  VALUES ('4'),
SUBPARTITION p_5
  VALUES ('5'),
SUBPARTITION p_6
  VALUES ('6'),
SUBPARTITION p_7
  VALUES ('7'),
SUBPARTITION p_8
  VALUES ('8'),
SUBPARTITION p_9
  VALUES ('9'),
SUBPARTITION p_10
  VALUES ('10'),
SUBPARTITION p_11
  VALUES ('11'),
SUBPARTITION p_12
  VALUES ('12'),
SUBPARTITION p_13
  VALUES ('13'),
SUBPARTITION p_14
  VALUES ('14'),
SUBPARTITION p_15
  VALUES ('15'),
SUBPARTITION p_16
  VALUES ('16'),
SUBPARTITION p_17
  VALUES ('17'),
SUBPARTITION p_18
  VALUES ('18'),
SUBPARTITION p_19
  VALUES ('19'),
SUBPARTITION p_20
  VALUES ('20'),
SUBPARTITION p_21
  VALUES ('21'),
SUBPARTITION p_22
  VALUES ('22'),
SUBPARTITION p_23
  VALUES ('23'),
SUBPARTITION p_24
  VALUES ('24'),
SUBPARTITION p_25
  VALUES ('25'),
SUBPARTITION p_26
  VALUES ('26'),
SUBPARTITION p_27
  VALUES ('27'),
SUBPARTITION p_28
  VALUES ('28'),
SUBPARTITION p_29
  VALUES ('29'),
SUBPARTITION p_30
  VALUES ('30'),
SUBPARTITION p_31
  VALUES ('31'),
SUBPARTITION p_32
  VALUES ('32'),
SUBPARTITION p_33
  VALUES ('33'),
SUBPARTITION p_34
  VALUES ('34'),
SUBPARTITION p_35
  VALUES ('35'),
SUBPARTITION p_36
  VALUES ('36'),
SUBPARTITION p_37
  VALUES ('37'),
SUBPARTITION p_38
  VALUES ('38'),
SUBPARTITION p_39
  VALUES ('39'),
SUBPARTITION p_40
  VALUES ('40'),
SUBPARTITION p_41
  VALUES ('41'),
SUBPARTITION p_42
  VALUES ('42'),
SUBPARTITION p_43
  VALUES ('43'),
SUBPARTITION p_44
  VALUES ('44'),
SUBPARTITION p_45
  VALUES ('45'),
SUBPARTITION p_46
  VALUES ('46'),
SUBPARTITION p_47
  VALUES ('47'),
SUBPARTITION p_48
  VALUES ('48'),
SUBPARTITION p_49
  VALUES ('49'),
SUBPARTITION p_50
  VALUES ('50'),
SUBPARTITION p_51
  VALUES ('51'),
SUBPARTITION p_52
  VALUES ('52'),
SUBPARTITION p_53
  VALUES ('53'),
SUBPARTITION p_54
  VALUES ('54'),
SUBPARTITION p_55
  VALUES ('55'),
SUBPARTITION p_56
  VALUES ('56'),
SUBPARTITION p_57
  VALUES ('57'),
SUBPARTITION p_58
  VALUES ('58'),
SUBPARTITION p_59
  VALUES ('59'),
SUBPARTITION p_60
  VALUES ('60'),
SUBPARTITION p_61
  VALUES ('61'),
SUBPARTITION p_62
  VALUES ('62'),
SUBPARTITION p_63
  VALUES ('63')
)
(
  PARTITION p0
    VALUES LESS THAN (1451620800000
    )
);


-- Test input data
insert into "test" values (1451707200000, 55);
insert into "test" values  (1452571200000, 47);
insert into "test" values (1453262400000, 33);
insert into "test" values (1455249600000, 11);


-- Check if partitions have been created
select partition_name, subpartition_name, high_value
from   user_tab_subpartitions
where  table_name = 'test';

select distinct partition_name
from user_tab_subpartitions
where  table_name = 'test';