首批通过分布式安全可靠测评,为关键业务系统打造
Oracle 租户中创建带 RANGE 或 LIST 类型分区的表组错误,错误代码 ORA-00900
更新时间:2023-12-07 03:16
Oracle 租户中创建带 RANGE 或 LIST 类型分区的表组报 ORA-00900 错误的原因以及解决方法。
适用版本
OceanBase 数据库所有版本
背景信息
表组(Table Group)不是一个物理对象,它是一个逻辑概念,表示一组表或者表的集合。属于这样一个集合的表需要满足一定的约束,即所有表必须拥有相同的 Locality(副本类型、个数及位置)、相同的 Primary Zone(Leader 位置及其优先级)以及相同的分区方式。
有关在 Oracle 租户中创建表组的语法,请参加《OceanBase 数据库 SQL 参考(Oracle 模式)》。
问题现象
在 Oracle 租户中创建带 RANGE 或 LIST 类型分区的表组错误,错误信息如下。
obclient> CREATE TABLEGROUP tg PARTITION BY HASH
-> SUBPARTITION BY RANGE
-> SUBPARTITION TEMPLATE(
-> SUBPARTITION P0 VALUES LESS THAN (100),
-> SUBPARTITION P1 VALUES LESS THAN (200),
-> SUBPARTITION P2 VALUES LESS THAN (300),
-> SUBPARTITION P3 VALUES LESS THAN (MAXVALUE))
-> PARTITIONS 3;
ORA-00900: You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'SUBPARTITION TEMPLATE(
SUBPARTITION P0 VALUES LESS THAN (100),
SUBPARTITION ' at line 3
可能原因
OceanBase 数据库中,Oracle 租户创建表组分区的语句与 MySQL 租户中创建表分区的语句是一致的。因此:
要创建 RANGE 分区,需要使用 RANGE COLUMN 语法。
要创建 LIST 分区,需要使用 LIST COLUMN 语法。
解决方式
修改创建表组的语句。
使用 RANGE COLUMN 代替 RANGE。
obclient> CREATE TABLEGROUP tg PARTITION BY HASH -> SUBPARTITION BY RANGE COLUMNS 1 -> SUBPARTITION TEMPLATE( -> SUBPARTITION P0 VALUES LESS THAN (100), -> SUBPARTITION P1 VALUES LESS THAN (200), -> SUBPARTITION P2 VALUES LESS THAN (300), -> SUBPARTITION P3 VALUES LESS THAN (MAXVALUE)) -> PARTITIONS 3;使用 LIST COLUMN 代替 LIST。
obclient> CREATE TABLEGROUP tg PARTITION BY HASH -> SUBPARTITION BY LIST COLUMNS 1 -> SUBPARTITION TEMPLATE( -> SUBPARTITION P0 VALUES LESS THAN (100), -> SUBPARTITION P1 VALUES LESS THAN (200), -> SUBPARTITION P2 VALUES LESS THAN (300), -> PARTITIONS 3;