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

简介: 11g推出了interval间隔分区,以往的分区是需要手工或半自动化脚本实现分区扩展,但这种间隔分区的出现,将分区扩展的工作彻底解放出来,这里不讨论何为间隔分区,主要说一下创建间隔分区有一个S...

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,如果忽略任何一个,就会导致某几个分区存储于用户默认的表空间中,这样对分区的管理和维护就会造成一些混乱。所以从间隔分区的表空间分配可以看出,对于任何一种特性,都需要了解其使用的原理和不同用法的区别,当然实验是最好的试金石。

目录
相关文章
|
1天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。
|
2天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
339 90
|
9天前
|
人工智能 自然语言处理 前端开发
Qoder全栈开发实战指南:开启AI驱动的下一代编程范式
Qoder是阿里巴巴于2025年发布的AI编程平台,首创“智能代理式编程”,支持自然语言驱动的全栈开发。通过仓库级理解、多智能体协同与云端沙箱执行,实现从需求到上线的端到端自动化,大幅提升研发效率,重塑程序员角色,引领AI原生开发新范式。
806 156
|
2天前
|
数据采集 缓存 数据可视化
Android 无侵入式数据采集:从手动埋点到字节码插桩的演进之路
本文深入探讨Android无侵入式埋点技术,通过AOP与字节码插桩(如ASM)实现数据采集自动化,彻底解耦业务代码与埋点逻辑。涵盖页面浏览、点击事件自动追踪及注解驱动的半自动化方案,提升数据质量与研发效率,助力团队迈向高效、稳定的智能化埋点体系。(238字)
243 156
|
3天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
10天前
|
机器人 API 调度
基于 DMS Dify+Notebook+Airflow 实现 Agent 的一站式开发
本文提出“DMS Dify + Notebook + Airflow”三位一体架构,解决 Dify 在代码执行与定时调度上的局限。通过 Notebook 扩展 Python 环境,Airflow实现任务调度,构建可扩展、可运维的企业级智能 Agent 系统,提升大模型应用的工程化能力。
|
人工智能 前端开发 API
前端接入通义千问(Qwen)API:5 分钟实现你的 AI 问答助手
本文介绍如何在5分钟内通过前端接入通义千问(Qwen)API,快速打造一个AI问答助手。涵盖API配置、界面设计、流式响应、历史管理、错误重试等核心功能,并提供安全与性能优化建议,助你轻松集成智能对话能力到前端应用中。
787 154