Oracle 11g 按季分区interval parition

Oracle 11g 按季分区interval parition

interval 分区是oracle 11g引入的新技术,无需DBA预分配新分区,插入数据时系统会根据range列和已分配的分区自动判断新数据是否可以插入到已存在的分区中,如果不能满足插入已存在的分区,系统自动分配一个新分区来存放新插入的数据。

(1)按季度分区

希望通过间隔分区,创建一个按季度的分区:
间隔是3个月一个周期:
(NUMTOYMINTERVAL(3,‘month’))
脚本如下:

 CREATE TABLE DH.TEST_PART
    	(
    	ORDER_DATE DATE,
		REGION_ID NUMBER
    	)
		TABLESPACE TB_DATAHOUSE 
    	PARTITION BY RANGE (ORDER_DATE) INTERVAL (NUMTOYMINTERVAL(3,'month'))
    	STORE IN ("TB_PART_A", "TB_PART_B", "TB_PART_C", "TB_PART_D")
   	   (
	   PARTITION int_part1
   		   VALUES LESS THAN (TO_DATE ('2020-04-01', 'YYYY-MM-DD')),
   		PARTITION int_part2
   		   VALUES LESS THAN (TO_DATE ('2020-07-01', 'YYYY-MM-DD')),
   		PARTITION int_part3
   		   VALUES LESS THAN (TO_DATE ('2020-10-01', 'YYYY-MM-DD')),
   		PARTITION int_part4
   		   VALUES LESS THAN (TO_DATE ('2021-01-01', 'YYYY-MM-DD'))
		);

注意:
使用INTERVAL时需要注意月末日期的影响,实际上如果使用大于28号的日期来指定分区上界,就会得到一个错误:
ORA-14767: Cannot specify this interval with existing high bounds

因此都是使用的1号作为分区基础。

(2)测试间隔分区

插入数据:

begin
	for i in 0..30 loop
		insert into DH.TEST_PART values(add_months(to_date('2020-01-01','yyyy-mm-dd'),i),i);
	end loop;
	commit;
end;
/

前四个分区指定分区名称了,后面的分区系统自动命名,对比一下,看看表空间的分配结果:

SQL> select TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME from user_tab_partitions where table_name='TEST_PART';

TABLE_NAME                     PARTITION_NAME                 TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
TEST_PART                      INT_PART1                      TB_DATAHOUSE
TEST_PART                      INT_PART2                      TB_DATAHOUSE
TEST_PART                      INT_PART3                      TB_DATAHOUSE
TEST_PART                      INT_PART4                      TB_DATAHOUSE
TEST_PART                      SYS_P48                        TB_PART_A
TEST_PART                      SYS_P49                        TB_PART_B
TEST_PART                      SYS_P50                        TB_PART_C
TEST_PART                      SYS_P51                        TB_PART_D
TEST_PART                      SYS_P52                        TB_PART_A
TEST_PART                      SYS_P53                        TB_PART_B
TEST_PART                      SYS_P54                        TB_PART_C

11 rows selected


Executed in 0.229 seconds

看看分区内容,是否按季度分区:


SQL> select * from TEST_PART partition(INT_PART1);

ORDER_DATE   REGION_ID
----------- ----------
2020-1-1             0
2020-2-1             1
2020-3-1             2

Executed in 0.078 seconds


SQL> select * from TEST_PART partition(SYS_P48);

ORDER_DATE   REGION_ID
----------- ----------
2021-1-1            12
2021-2-1            13
2021-3-1            14

Executed in 0.086 seconds

(3)STORE IN 参数

interval partition中,分区的创建是由系统自动生成,这就存在一个问题:如何规划分区的存储,也就是系统自动分配的分区存放在哪些tablespace?
如果在store in后面标注上tablespaces的列表,新创建出的分区就会依次循环的均匀存放在各个分区上。
INT_PART1-4 是指定的分区名,在

SQL> select TABLE_NAME,PARTITION_NAME,TABLESPACE_NAME from user_tab_partitions where table_name='TEST_PART';

TABLE_NAME                     PARTITION_NAME                 TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
TEST_PART                      INT_PART1                      TB_DATAHOUSE
TEST_PART                      INT_PART2                      TB_DATAHOUSE
TEST_PART                      INT_PART3                      TB_DATAHOUSE
TEST_PART                      INT_PART4                      TB_DATAHOUSE
TEST_PART                      SYS_P48                        TB_PART_A
TEST_PART                      SYS_P49                        TB_PART_B
TEST_PART                      SYS_P50                        TB_PART_C
TEST_PART                      SYS_P51                        TB_PART_D
TEST_PART                      SYS_P52                        TB_PART_A
TEST_PART                      SYS_P53                        TB_PART_B
TEST_PART                      SYS_P54                        TB_PART_C

TB_PART_A-D循环出现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值