Oracle分区表设置详解

Oracle分区表详解

Oracle建议单表超过2G就需要进行分表,一万数据大概3MB,单表最多分区为1024*1024-1个分区,我感觉够我们使用了哈

废话不多说,上示例,Oracle分表具体sql如下,大家可根据自己情况进行更改,具体理论后期有时间进行补充哈,希望可以帮助到各位大佬!

示例:

-- 创建临时分区表
CREATE TABLE "MARKET"."STUDENT_2" ( 
	"ID" NUMBER, 
	"NAME" VARCHAR2 (255),
	"CREATE_TIME" TIMESTAMP (6),
	PRIMARY KEY ("ID") 
)
-- 根据那个字段进行分区 按月进行分区	按月自动分区
-- 按年year 、月month 
-- 按天 NUMTODSINTERVAL(1, 'day') 、按周(7, 'day')
PARTITION BY RANGE ("CREATE_TIME")  INTERVAL (numtoyminterval(1, 'month'))
(
-- than 分区的区间 只能有一个 分区存储的为上一个月数据
 PARTITION STUDENT_A2 VALUES LESS THAN (to_date('2022-01-01', 'yyyy-mm-dd'))
 )


--查询当前表有多少分区
select * from user_tab_partitions where table_name='STUDENT_2';

--查询这个表的某个分区(SYS_P21)里的数据
select * from STUDENT_2 partition(STUDENT_A2);

-- 添加分区
alter table STUDENT_2 add PARTITION STUDENT_A3 VALUES LESS THAN (to_date('2022-02-01', 'yyyy-mm-dd'))

-- 删除分区
ALTER TABLE STUDENT_2 DROP PARTITION STUDENT_A2;
-- 如果是全局索引,因为全局索引的分区结构和表可以不一致,若不一致的情况下,会导致整个全局索引失效,在删除分区的时候,语句修改为:
ALTER TABLE STUDENT_2 DROP PARTITION STUDENT_A2 UPDATE GLOBAL INDEXES;

-- 查看分区索引
select * from user_ind_partitions;

-- 5. 为分区表设置索引全局索引
-- Create/Recreate indexes 
create index student_2_create_time_1 on STUDENT_2 (CREATE_TIME);

-- 6. 设置分区索引
CREATE INDEX INX_TAB_PARTITION_COL1 ON STUDENT_2(NAME) LOCAL;

-- 删除索引
DROP INDEX INX_TAB_PARTITION_COL1;

--6.1、查询索引、表上在那些列上创建了分区:

SELECT * FROM USER_PART_KEY_COLUMNS;


-- 7. 作用是:允许分区表的分区键是可更新。
-- 当某一行更新时,如果更新的是分区列,并且更新后的列植不属于原来的这个分区,
-- 如果开启了这个选项,就会把这行从这个分区中 delete 掉,并加到更新后所属的分区,此时就会发生 rowid 的改变。
-- 相当于一个隐式的 delete + insert ,但是不会触发 insert/delete 触发器。
alter table STUDENT_2 enable row movement;

-- 关闭自动分区
alter table t set interval();
posted @ 2022-01-11 11:38  阿尔法哲  阅读(1525)  评论(0编辑  收藏  举报