修改表 ALTER TABLE 的不兼容点

本文为您介绍迁移 Oracle 数据库的数据至 OceanBase 数据库 Oracle 租户时,Oracle 数据库执行的 ALTER TABLE DDL 支持被数据传输的 DDL 同步组件转换,但 OceanBase 数据库 Oracle 租户不支持执行的场景。

修改列的类型

  • Oracle 数据库和 OceanBase 数据库 Oracle 租户的被修改列在有约束的情况下,对修改后的字段类型的限制有所不同。详情请参见 有约束的列修改类型

  • Oracle 数据库和 OceanBase 数据库 Oracle 租户的被修改列在没有约束的情况下,对修改后的字段类型的限制有所不同。详情请参见 没有约束的列修改类型

修改列的长度

  • Oracle 数据库和 OceanBase 数据库 Oracle 租户的被修改列在有约束的情况下,对修改后的字段类型的限制有所不同。详情请参见 有约束的列修改长度

  • Oracle 数据库和 OceanBase 数据库 Oracle 租户的被修改列在没有约束的情况下,对修改后的字段类型的限制有所不同。详情请参见 没有约束的列修改长度

在新增的一级分区下自动创建二级分区

原表结构中存在二级分区模板,通过 ALTER TABLE DDL 新增一级分区时,在新增的一级分区下自动创建二级分区,Oracle 数据库和 OceanBase 数据库 Oracle 租户存在如下区别:

  • Oracle 数据库:支持。

  • OceanBase 数据库 Oracle 租户:不支持自动创建二级分区。

示例如下:

CREATE TABLE SMNOTIFY2
   (	"REGION" NUMBER(4,0) NOT NULL ENABLE, 
"INTIME" DATE DEFAULT sysdate NOT NULL ENABLE
   ) 
  PARTITION BY RANGE ("INTIME") 
  SUBPARTITION BY LIST ("REGION") 
SUBPARTITION TEMPLATE ( 
    SUBPARTITION "L_23" VALUES ( 23 ),
	SUBPARTITION "L_24" VALUES ( 24 ))
 (PARTITION "P_R_202208"  VALUES LESS THAN (TO_DATE(' 2022-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
 PARTITION "P_R_202209"  VALUES LESS THAN (TO_DATE('2022-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
 PARTITION "P_R_PMAX"  VALUES LESS THAN (TO_DATE('2038-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')));
 
 ALTER TABLE SMNOTIFY2 ADD PARTITION new_partition1 VALUES LESS THAN(TO_DATE('2043-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN'));

新增一级分区 DDL 中存在自定义二级分区

原表结构中存在二级分区模板,通过 ALTER TABLE DDL 新增一级分区和自定义的二级分区的操作,Oracle 数据库和 OceanBase 数据库 Oracle 租户存在如下区别:

  • Oracle 数据库:支持。二级模板会被忽略不创建,只创建自定义的二级分区。

  • OceanBase 数据库 Oracle 租户:不支持。

示例如下:

CREATE TABLE SMNOTIFY3
   (	"REGION" NUMBER(4,0) NOT NULL ENABLE, 
"INTIME" DATE DEFAULT sysdate NOT NULL ENABLE
   ) 
  PARTITION BY RANGE ("INTIME") 
  SUBPARTITION BY LIST ("REGION") 
SUBPARTITION TEMPLATE ( 
    SUBPARTITION "L_23" VALUES ( 23 ))
 (PARTITION "P_R_202208"  VALUES LESS THAN (TO_DATE(' 2022-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
 PARTITION "P_R_202209"  VALUES LESS THAN (TO_DATE('2022-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
 PARTITION "P_R_PMAX"  VALUES LESS THAN (TO_DATE('2038-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')));
 
 ALTER TABLE SMNOTIFY3 ADD PARTITION new_partition2 VALUES LESS THAN(TO_DATE('2044-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))(SUBPARTITION sp6 VALUES (30));