首批通过分布式安全可靠测评,为关键业务系统打造
ORACLE 租户分区表相关系统视图不准导致 OMS 迁移产生数据一致性问题
更新时间:2026-05-25 09:11
问题现象
问题一: OceanBase 数据库中 Oracle 租户有关二级分区系统视图定义不准确的 bug。
在 Oracle 租户模式下,向模版化分区表添加新的二级分区后,由于 OceanBase 数据库涉及二级分区的系统视图定义不准确的 bug,导致所有涉及二级分区的系统视图查询结果有正确性问题(具体表现为:查询结果中不包含新增二级分区的记录)。示例如下。
-- 模版化分区表新增二级分区后,DBA_OBJECTS、DBA_TAB_SUBPARTITIONS 视图查询结果不包含新增二级分区的记录
CREATE TABLE T1(
col1 NUMBER,
col2 NUMBER
)
PARTITION BY RANGE(col1)
SUBPARTITION BY RANGE(col2)
SUBPARTITION TEMPLATE
(SUBPARTITION mp0 VALUES LESS THAN(2020),
SUBPARTITION mp1 VALUES LESS THAN(2021),
SUBPARTITION mp2 VALUES LESS THAN(2022)
)
(PARTITION p0 VALUES LESS THAN(100),
PARTITION p1 VALUES LESS THAN(200)
-- 新增分区前相关视图查询结果
SELECT TABLE_NAME,PARTITION_NAME,SUBPARTITION_NAME FROM SYS.DBA_TAB_SUBPARTITIONS WHERE table_name='T1';
+------------+----------------+-------------------+
| TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME |
+------------+----------------+-------------------+
| T1 | P0 | P0sMP0 |
| T1 | P0 | P0sMP1 |
| T1 | P0 | P0sMP2 |
| T1 | P1 | P1sMP0 |
| T1 | P1 | P1sMP1 |
| T1 | P1 | P1sMP2 |
+------------+----------------+-------------------+
SELECT OBJECT_NAME,SUBOBJECT_NAME,OBJECT_TYPE FROM SYS.DBA_OBJECTS WHERE OBJECT_NAME='T1';
+-------------+----------------+--------------------+
| OBJECT_NAME | SUBOBJECT_NAME | OBJECT_TYPE |
+-------------+----------------+--------------------+
| T1 | NULL | TABLE |
| T1 | P0 | TABLE PARTITION |
| T1 | P1 | TABLE PARTITION |
| T1 | P0sMP0 | TABLE SUBPARTITION |
| T1 | P0sMP1 | TABLE SUBPARTITION |
| T1 | P0sMP2 | TABLE SUBPARTITION |
| T1 | P1sMP0 | TABLE SUBPARTITION |
| T1 | P1sMP1 | TABLE SUBPARTITION |
| T1 | P1sMP2 | TABLE SUBPARTITION |
+-------------+----------------+--------------------+
-- 新增分区
ALTER TABLE T1 ADD PARTITION p2 VALUES LESS THAN(300);
-- 新增分区后相关视图查询结果(无新增二级分区的记录)
SELECT TABLE_NAME,PARTITION_NAME,SUBPARTITION_NAME FROM SYS.DBA_TAB_SUBPARTITIONS WHERE table_name='T1';
+------------+----------------+-------------------+
| TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME |
+------------+----------------+-------------------+
| T1 | P0 | P0sMP0 |
| T1 | P0 | P0sMP1 |
| T1 | P0 | P0sMP2 |
| T1 | P1 | P1sMP0 |
| T1 | P1 | P1sMP1 |
| T1 | P1 | P1sMP2 |
+------------+----------------+-------------------+
SELECT OBJECT_NAME,SUBOBJECT_NAME,OBJECT_TYPE FROM SYS.DBA_OBJECTS WHERE OBJECT_NAME='T1';
+-------------+----------------+--------------------+
| OBJECT_NAME | SUBOBJECT_NAME | OBJECT_TYPE |
+-------------+----------------+--------------------+
| T1 | NULL | TABLE |
| T1 | P0 | TABLE PARTITION |
| T1 | P1 | TABLE PARTITION |
| T1 | P2 | TABLE PARTITION |
| T1 | P0sMP0 | TABLE SUBPARTITION |
| T1 | P0sMP1 | TABLE SUBPARTITION |
| T1 | P0sMP2 | TABLE SUBPARTITION |
| T1 | P1sMP0 | TABLE SUBPARTITION |
| T1 | P1sMP1 | TABLE SUBPARTITION |
| T1 | P1sMP2 | TABLE SUBPARTITION |
+-------------+----------------+--------------------+
问题二:Oracle 租户系统视图不包含新增二级分区记录,导致 OMS 数据迁移产生一致性问题。
使用 OMS 数据迁移时,源端触发 Oracle 租户模版化的分区表添加二级分区后,涉及二级分区的系统视图查询结果中不包含新增二级分区的信息,全量迁移将会丢数据,但 OMS 全量迁移校验不报错且上下游校验的数据行数一致。
问题原因
问题一原因:OceanBase 数据库的 Bug,涉及二级分区的系统视图定义不准确。
问题二原因:OMS 针对 Oracle 租户全量迁移时,依赖 OceanBase 数据库的系统视图。但由于 OceanBase 的 bug,导致 OMS 全量迁移最终没有感知到相关分区的数据,从而造成 OMS 数据迁移产生一致性问题。
问题的风险及影响
系统视图查询结果不准确,OMS 数据迁移产生一致性问题。
影响的版本
OceanBase 数据库企业版 V2.2.77 GA(oceanbase-2.2.77-20210508211731)及之后版本、V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本、V3.2.3 GA(oceanbase-3.2.3.0-20220418212020)及之后版本、V3.2.4 GA(oceanbase-3.2.4.0-100000072022102819)及之后版本。
解决方法及规避方式
处理 OceanBase 数据库中 Oracle 租户有关二级分区系统视图定义不准确的 bug 问题。
解决方法:升级 OceanBase 数据库至修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V2.2.77 BP19(oceanbase-2.2.77-119000122024060513 )及之后的版本、V3.2.3 BP9 (oceanbase-3.2.3.3-109000182023071410) 及之后的版本、V3.2.4 BP4 (oceanbase-3.2.4.4-104000052023062021) 及之后的版本。
规避方式:避免向模版化分区表中添加新二级分区。
处理 Oracle 租户系统视图不包含新增二级分区记录,导致 OMS 数据迁移产生一致性问题。
解决方法:升级 OceanBase 数据库至修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V2.2.77 BP19(oceanbase-2.2.77-119000122024060513 )及之后的版本、V3.2.3 BP9 (oceanbase-3.2.3.3-109000182023071410) 及之后的版本、V3.2.4 BP4 (oceanbase-3.2.4.4-104000052023062021) 及之后的版本。
规避方式:创建正确的同名视图。