全部產品
Search
文件中心

ApsaraDB for OceanBase:修改表 ALTER TABLE 的不相容點

更新時間:Jul 01, 2024

本文為您介紹遷移 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));