最近有业务场景需要用多个字段做分区表,数据量比较大,保存时间也较长,经过学习与实践,算是基本完成,以下内容为实践样例:
---建表语句
create table t_table
(
appdate date,
text varchar(10)
)
partition by range(appdate)--根据字段 appdate 创建主分区
interval(numtoyminterval(1,'MONTH')) --主分区按 月 自动创建分区
subpartition by list(areacode) --再按 地区 创建子分区
subpartition template( --指定明确的子分区信息
subpartition sub1 values('101'),
---模拟写入测试数据
--查询数据
select * from t_table;
--查询主分区数据
select *from t_table partition (mainpartition1);
--查询子分区数据
select *from t_table subpartition (mainpartition1_sub1);
--查看自动创建的主分区
select * from user_tab_partitions where table_name='T_TABLE'
①.、一般分区表都会很大,所以可以先创建表空间,为了让分区表存放到单独的表空间,否则默认会存放到USERS表空间
ID NUMBER(10) NOT NULL,
CREATE_TIME DATE,
TABLESPACE TS1
PARTITION BY LIST (ID)
(PARTITION PT_1001 VALUES (1001) TABLESPACE TS1);
select TABLE_NAME,PARTITION_COUNT,DEF_TABLESPACE_NAME from USER_PART_TABLES order by DEF_TABLESPACE_NAME;
一.表分区策略
①识别大表
采用ANALYZE TABLE语句进行分析,然后查询数据字典获得相应的数据量.
可根据月份,季度以及年份等进行分区;
要对每个表空间的大小进行估计
二.创建表分区
a.创建范围分区的关键字是'RANGE'
①范围分区
create table ware_retail_part --创建一个描述商品零售的数据表
id integer primary key,--销售编号
retail_date date,--销售日期
partition by range(retail_date)
);
三.创建索引分区
索引分区分为本地索引分区和全局索引分区,全局索引不反应基础表的结构,要分区只能进行范围分区.
创建索引分区要参照表分区
四.分区技术简介
优点:
①减少维护工作量
五,管理表分区
①添加表分区
ALTER TABLE...ALTER PARATITION
ALTER TABLE...DROP PARTITION
删除分区时,里面的数据也会被删除.
-创建表和分区
create table sales--创建一个销售记录表
id number primary key,--记录编号
saledate date--销售日期
partition by range(saledate)--按照日期分区
--第一季度数据
--第二季度数据
--第三季度数据
--第四季度数据
--创建局部索引
local(
partition part_seal tablespace tbsp_1,
--并入分区
--重建局部索引
六.管理索引分区
删除索引:DROP PARTITION
重建分区:REBUILT PARTITION
更名索引分区:RENAME PARTITION
分割索引分区:SPLIT PARTITION
在Oracle10g中,没有定义间隔分区,只能通过范围分区实现间隔分区功能,如果要实现自动创建分区,只能通过创建JOB或者scheduler来实现;而在11g中,Oracle直接提供了间隔分区功能,大大简化了间隔分区的实现.
----注:oracle11g虽然可以自动分区,但是分区的名字不能自定义,对于需要定时删除分区时没法处理,不如通过时间范围来手工分区.详见
create table HIP_LOG_NODE_Part
RECORD_TIME?? DATE
)tablespace TB_HIP_LOG_NODE
PARTITION BY RANGE (RECORD_TIME) interval (numtoyminterval(1, 'month'))
STORE IN (TB_HIP_LOG_NODE)
①.、Oracle11g有间隔分区功能,对于使用Range分区的可以按年,月,日来自动生成分区.
numtodsinterval、numtodsinterval函数,将数字转成年月,时分秒
详见:
非分区字段创建主键,则创建主键local索引时必须加上分区字段
ALTER TABLE TEST ADD CONSTRAINT PK_TEST PRIMARY KEY (主键字段,分区字段) USING INDEX LOCAL;
①不保留,直接删除:
alter table table_name drop/truncate partition partition_name;
具体用drop还是truncate,得你自己衡量,drop的话原来的分区和数据直接就没有了,truncate的话,只是数据没有了,分区还在.
根据数据表字段值的范围进行分区.
以上就是土嘎嘎小编为大家整理的oracle怎么建表分区相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!