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();
无论风雨,和自己一决胜负吧