修改表 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));