阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

interval间隔分区STORE IN参数的作用范围

173次阅读
没有评论

共计 5547 个字符,预计需要花费 14 分钟才能阅读完成。

Oracle 11g 推出了 interval 间隔分区,以往的分区是需要手工或半自动化脚本实现分区扩展,但这种间隔分区的出现,将分区扩展的工作彻底解放出来,这里不讨论何为间隔分区,主要说一下创建间隔分区有一个 STORE IN 参数,官方文旦对其的介绍是:

The optional STORE IN clause lets you specify one or more tablespaces into which the database stores interval partition data using a round-robin algorithm for subsequently created interval partitions.

STORE IN 参数可以明确间隔分区使用的一个或多个表空间,他使用的是循环算法来创建间隔分区。

接下来,分别有三种方法来指定间隔分区的表空间,我们看下各自的不同。

方法 1:设置 store in,未设置预定义分区表空间。

CREATE TABLE interval_sales1
    (prod_id NUMBER(6)
    , cust_id NUMBER , time_id DATE , channel_id CHAR(1)
    , promo_id NUMBER(6)
    , quantity_sold NUMBER(3)
    , amount_sold NUMBER(10,2)
    )
  PARTITION BY RANGE (time_id) INTERVAL(NUMTOYMINTERVAL(1, ‘YEAR’)) store in (SALES_TBS1, SALES_TBS2, SALES_TBS3, SALES_TBS4)
    (PARTITION p0 VALUES LESS THAN (TO_DATE(‘1-1-2003’, ‘DD-MM-YYYY’)),
      PARTITION p1 VALUES LESS THAN (TO_DATE(‘1-1-2004’, ‘DD-MM-YYYY’)),
      PARTITION p2 VALUES LESS THAN (TO_DATE(‘1-1-2005’, ‘DD-MM-YYYY’)),
      PARTITION p3 VALUES LESS THAN (TO_DATE(‘1-1-2006’, ‘DD-MM-YYYY’)) ); insert into interval_sales1 values(908001,101,to_date(‘2002-8-10′,’yyyy-mm-dd’),’a’,88001,100,200); insert into interval_sales1 values(908002,102,to_date(‘2003-7-10′,’yyyy-mm-dd’),’a’,88002,100,800); insert into interval_sales1 values(908003,103,to_date(‘2004-5-30′,’yyyy-mm-dd’),’a’,88003,100,700); insert into interval_sales1 values(908004,104,to_date(‘2005-12-10′,’yyyy-mm-dd’),’a’,88004,100,600); insert into interval_sales1 values(908005,105,to_date(‘2007-11-14′,’yyyy-mm-dd’),’a’,88005,100,500); commit;

方法 2:未设置 store in,

设置预定义分区表空间。

CREATE TABLE interval_sales2
    (prod_id NUMBER(6)
    , cust_id NUMBER , time_id DATE , channel_id CHAR(1)
    , promo_id NUMBER(6)
    , quantity_sold NUMBER(3)
    , amount_sold NUMBER(10,2)
    )
  PARTITION BY RANGE (time_id) INTERVAL(NUMTOYMINTERVAL(1, ‘YEAR’))
    (PARTITION p0 VALUES LESS THAN (TO_DATE(‘1-1-2003’, ‘DD-MM-YYYY’)) tablespace SALES_TBS1,
      PARTITION p1 VALUES LESS THAN (TO_DATE(‘1-1-2004’, ‘DD-MM-YYYY’)) tablespace SALES_TBS2,
      PARTITION p2 VALUES LESS THAN (TO_DATE(‘1-1-2005’, ‘DD-MM-YYYY’)) tablespace SALES_TBS3,
      PARTITION p3 VALUES LESS THAN (TO_DATE(‘1-1-2006’, ‘DD-MM-YYYY’)) tablespace SALES_TBS4); insert into interval_sales2 values(908001,101,to_date(‘2002-8-10′,’yyyy-mm-dd’),’a’,88001,100,200); insert into interval_sales2 values(908002,102,to_date(‘2003-7-10′,’yyyy-mm-dd’),’a’,88002,100,800); insert into interval_sales2 values(908003,103,to_date(‘2004-5-30′,’yyyy-mm-dd’),’a’,88003,100,700); insert into interval_sales2 values(908004,104,to_date(‘2005-12-10′,’yyyy-mm-dd’),’a’,88004,100,600); insert into interval_sales2 values(908005,105,to_date(‘2007-11-14′,’yyyy-mm-dd’),’a’,88005,100,500); commit;

方法 3:设置 store in, 设置预定义分区表空间。

CREATE TABLE interval_sales3
    (prod_id NUMBER(6)
    , cust_id NUMBER , time_id DATE , channel_id CHAR(1)
    , promo_id NUMBER(6)
    , quantity_sold NUMBER(3)
    , amount_sold NUMBER(10,2)
    )
  PARTITION BY RANGE (time_id) INTERVAL(NUMTOYMINTERVAL(1, ‘YEAR’)) store in (SALES_TBS1, SALES_TBS2, SALES_TBS3, SALES_TBS4)
    (PARTITION p0 VALUES LESS THAN (TO_DATE(‘1-1-2003’, ‘DD-MM-YYYY’)) tablespace SALES_TBS1,
      PARTITION p1 VALUES LESS THAN (TO_DATE(‘1-1-2004’, ‘DD-MM-YYYY’)) tablespace SALES_TBS2,
      PARTITION p2 VALUES LESS THAN (TO_DATE(‘1-1-2005’, ‘DD-MM-YYYY’)) tablespace SALES_TBS3,
      PARTITION p3 VALUES LESS THAN (TO_DATE(‘1-1-2006’, ‘DD-MM-YYYY’)) tablespace SALES_TBS4); insert into interval_sales3 values(908001,101,to_date(‘2002-8-10′,’yyyy-mm-dd’),’a’,88001,100,200); insert into interval_sales3 values(908002,102,to_date(‘2003-7-10′,’yyyy-mm-dd’),’a’,88002,100,800); insert into interval_sales3 values(908003,103,to_date(‘2004-5-30′,’yyyy-mm-dd’),’a’,88003,100,700); insert into interval_sales3 values(908004,104,to_date(‘2005-12-10′,’yyyy-mm-dd’),’a’,88004,100,600); insert into interval_sales3 values(908005,105,to_date(‘2007-11-14′,’yyyy-mm-dd’),’a’,88005,100,500); commit;

我们看见三种方法对 STORE IN 和预定义分区进行了穷举,我们看看不同方法对于间隔分区表空间的使用有何区别。

select table_name, partition_name, tablespace_name, high_value
from user_tab_partitions where table_name like ‘INTERVAL%’;
TABLE_NAME        PARTITION_NAME  TABLESPACE_NAME  HIGH_VALUE
—————– ————— —————- ————————————————–
INTERVAL_SALES1  P0              USERS            TO_DATE(‘ 2003-01-01 00:00:00’…)
INTERVAL_SALES1  P1              USERS            TO_DATE(‘ 2004-01-01 00:00:00’…)
INTERVAL_SALES1  P2              USERS            TO_DATE(‘ 2005-01-01 00:00:00’…)
INTERVAL_SALES1  P3              USERS            TO_DATE(‘ 2006-01-01 00:00:00’…)
INTERVAL_SALES1  SYS_P64        SALES_TBS2      TO_DATE(‘ 2008-01-01 00:00:00’…)
INTERVAL_SALES2  P0              SALES_TBS1      TO_DATE(‘ 2003-01-01 00:00:00’…)
INTERVAL_SALES2  P1              SALES_TBS2      TO_DATE(‘ 2004-01-01 00:00:00’…)
INTERVAL_SALES2  P2              SALES_TBS3      TO_DATE(‘ 2005-01-01 00:00:00’…)
INTERVAL_SALES2  P3              SALES_TBS4      TO_DATE(‘ 2006-01-01 00:00:00’…)
INTERVAL_SALES2  SYS_P65        USERS            TO_DATE(‘ 2008-01-01 00:00:00’…)
INTERVAL_SALES3  P0              SALES_TBS1      TO_DATE(‘ 2003-01-01 00:00:00’…)
INTERVAL_SALES3  P1              SALES_TBS2      TO_DATE(‘ 2004-01-01 00:00:00’…)
INTERVAL_SALES3  P2              SALES_TBS3      TO_DATE(‘ 2005-01-01 00:00:00’…)
INTERVAL_SALES3  P3              SALES_TBS4      TO_DATE(‘ 2006-01-01 00:00:00’…)
INTERVAL_SALES3  SYS_P66        SALES_TBS2      TO_DATE(‘ 2008-01-01 00:00:00’…) 15 rows selected.

可以看出,
1. 设置 store in,未设置预定义分区表空间,则预定义分区使用默认表空间 USERS,扩展分区循环使用 STORE IN 中定义分区。
2. 未设置 store in, 设置预定义分区表空间,则预定义分区使用定义的表空间,扩展分区使用默认表空间 USERS。
3. 设置 store in, 设置预定义分区表空间,则预定义分区和扩展分区均会使用 STORE IN 中定义分区。
4.STORE IN 参数的作用域就是扩展分区,预定义分区需要明确写出表空间,否则使用的使用户默认表空间。

总结:
间隔分区,从常理来看,应该明确定义各分区使用的表空间,那么就需要为预定义分区明确 tablespace 参数,而且要使用 STORE IN 为扩展分区定义 tablespace,如果忽略任何一个,就会导致某几个分区存储于用户默认的表空间中,这样对分区的管理和维护就会造成一些混乱。所以从间隔分区的表空间分配可以看出,对于任何一种特性,都需要了解其使用的原理和不同用法的区别,当然实验是最好的试金石。

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-05/131839.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计5547字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中