Oracle 分区

自增分区

numtoyminterval 按年、月分区

numtoyminterval(1, ‘year’)、numtoyminterval(1, ‘month’)

numtodsinterval 按天、时、分、秒分区

numtodsinterval(1, ‘day’)、numtodsinterval(1, ‘hour’)、numtodsinterval(1, ‘minute’)、numtodsinterval(1, ‘second’)

例子

1
2
3
4
5
6
7
create table user (id number, create_dt date)
tablespace users
partition by range (create_dt)
interval(numtoyminterval(1, 'month'))
(
partition p1 values less than (to_date('2018-06-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss'))
);

清空、删除分区操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 创建分区表


# 检查分区表及数据
sql> select t.table_name,t.partition_name,t.num_rows,t.blocks,t.interval,t.high_value from USER_TAB_PARTITIONS t;

# 创建主键和索引
sql> alter table TEST_PARTAS add constraint pk_id primary key(ID);
sql> CREATE INDEX IND_ACCOUNT_ID ON TEST_PARTAS (ACCOUNT_ID);

# 检查索引状态,当前状态可用
sql> select T.INDEX_NAME,T.TABLE_NAME,T.STATUS from user_indexes t where t.table_name='TEST_PARTAS';

INDEX_NAME TABLE_NAME STATUS
------------------------------ ------------------------------ --------
PK_ID TEST_PARTAS VALID
IND_ACCOUNT_ID TEST_PARTAS VALID

# 用truncate 删除p0分区数据,不加update index参数
sql> alter table test_partas truncate partition p0;

# 检查索引状态,状态不可用
INDEX_NAME TABLE_NAME STATUS
------------------------------ ------------------------------ --------
PK_ID TEST_PARTAS UNUSABLE
IND_ACCOUNT_ID TEST_PARTAS UNUSABLE

# 重建立索引,要加online ,尽量减小对业务的冲击
sql> alter index PK_ID rebuild online;
sql> alter index IND_ACCOUNT_ID rebuild online;
此时索引恢复正常可用状态

# 用truncate 删除p1分区数据,增加update index参数
sql> alter table test_partas truncate partition p1 update indexes;
此时索引是正常可用状态

扩展

如果 truncate 清空分区数据、drop 删除分区,索引都会失效

1
sql> alter table test_partas drop partition SYS_P1611;
  • 本文作者: forever杨
  • 本文链接: https://blog.yl-online.top/posts/7150914.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。如果文章内容对你有用,请记录到你的笔记中。本博客站点随时会停止服务,请不要收藏、转载!