oceanbase 分区表漏创建分区怎么处理

创建了一张tbl_user_info_log表,以oprDate字段进行分区,查询分区发现:
table_name PARTITION_NAME
tbl_user_info_log tbl_user_info_log_202805
tbl_user_info_log tbl_user_info_log_202806
tbl_user_info_log tbl_user_info_log_202807
tbl_user_info_log tbl_user_info_log_202808
tbl_user_info_log tbl_user_info_log_202813
tbl_user_info_log tbl_user_info_log_202814
tbl_user_info_log tbl_user_info_log_202815

请教一下:tbl_user_info_log_202809、tbl_user_info_log_202810、tbl_user_info_log_202811、tbl_user_info_log_202812分区怎样补创sql怎么写。

6 个赞

学习学习

3 个赞

应该就是把tbl_user_info_log_202813这个分区分裂吧,具体语法可以找一下

2 个赞

alter user tbl_user_info_log add partition (partition tbl_user_info_log_202809 VALUES LESS THAN(UNIX_TIMESTAMP(‘2028/09/01’)),partition tbl_user_info_log_202810 VALUES LESS THAN(UNIX_TIMESTAMP(‘2028/10/01’))); 大致这样

2 个赞

见官方文档
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003381997

2 个赞

学习经验!

2 个赞

学习一下大家的经验。

1 个赞

学习学习

1 个赞

学习学习

1 个赞

学习学习

11

1 个赞

手动分区分裂啊,666

学习到了

1 个赞

666

1 个赞

可以补上缺失分区日期吧

6666666

111

确认分区表达式

首先,请确认您的表在创建时使用的分区键表达式类型。有两种常见情况:

情况一:使用 UNIX_TIMESTAMP(oprDate) 作为分区表达式(推荐做法)

如果您建表语句中类似:

PARTITION BY RANGE(UNIX_TIMESTAMP(oprDate)) (
  PARTITION tbl_user_info_log_202806 VALUES LESS THAN (UNIX_TIMESTAMP('2028-07-01')),
  ...
)

那么补分区语句应为:

ALTER TABLE tbl_user_info_log ADD PARTITION (
  PARTITION tbl_user_info_log_202809 VALUES LESS THAN (UNIX_TIMESTAMP('2028-10-01')),
  PARTITION tbl_user_info_log_202810 VALUES LESS THAN (UNIX_TIMESTAMP('2028-11-01')),
  PARTITION tbl_user_info_log_202811 VALUES LESS THAN (UNIX_TIMESTAMP('2028-12-01')),
  PARTITION tbl_user_info_log_202812 VALUES LESS THAN (UNIX_TIMESTAMP('2029-01-01'))
);

:warning: 注意:每个分区的 LESS THAN 值应为下一个分区的起始时间戳

情况二:直接使用整数型日期字段(如 YYYYMM 格式)

如果 oprDate 是 INT 类型并以 202806 形式存储,且建表语句为:

PARTITION BY RANGE(oprDate) (
  PARTITION tbl_user_info_log_202806 VALUES LESS THAN (202806),
  ...
)

:x: 实际上这种写法有误 —— LESS THAN (202806) 将无法包含 202806 数据。

正确的应是:

PARTITION BY RANGE(oprDate) (
  PARTITION tbl_user_info_log_202806 VALUES LESS THAN (202807),
  PARTITION tbl_user_info_log_202807 VALUES LESS THAN (202808),
  ...
)

此时补分区语句为:

ALTER TABLE tbl_user_info_log ADD PARTITION (
  PARTITION tbl_user_info_log_202809 VALUES LESS THAN (202810),
  PARTITION tbl_user_info_log_202810 VALUES LESS THAN (202811),
  PARTITION tbl_user_info_log_202811 VALUES LESS THAN (202812),
  PARTITION tbl_user_info_log_202812 VALUES LESS THAN (202813)
);

推荐操作步骤

  1. 查看原始建表语句
SHOW CREATE TABLE tbl_user_info_log;
  1. 根据输出判断分区表达式类型,选择上述对应方案。
  2. 执行 ADD PARTITION 语句一次性添加多个分区。
  3. 验证分区是否成功添加
SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE 
FROM INFORMATION_SCHEMA.PARTITIONS 
WHERE TABLE_NAME = 'tbl_user_info_log' 
  AND PARTITION_NAME LIKE 'tbl_user_info_log_2028%';

注意事项

  • 添加分区不会影响已有数据。
  • 所有新增分区的 VALUES LESS THAN 上限必须严格递增。
  • 分区名必须唯一,不能重复。
  • 若表为二级分区表,需确认是否为模板化二级分区,非模板化需显式定义子分区。
1 个赞

学习学习

学习