Tous les produits
Search
Centre de documentation

ApsaraDB for OceanBase (Deprecated):Mécanisme des colonnes masquées du service de transmission de données

Dernière mise à jour :Aug 09, 2026

Lorsque vous effectuez une migration de schéma ou synchronisez une instruction DDL incrémentielle CREATE TABLE, le service de transmission de données met en place un mécanisme adapté selon la situation réelle de la tâche de migration de données.

Contexte

Vous pouvez supprimer manuellement les colonnes masquées et les index uniques en fonction du type de tâche de migration de données, comme indiqué dans cette rubrique, avant de passer à la phase de basculement direct d'une tâche de migration de données.

Si vous ne supprimez pas manuellement les colonnes masquées et les index uniques, le service de transmission de données les supprimera automatiquement en fonction du type de tâche de migration de données lors de la phase de basculement direct.

  • Lors de la migration de données d'une base de données Oracle vers un locataire Oracle d'OceanBase Database, le service de transmission de données ajoute des colonnes masquées à toutes les tables de la base de données cible et crée des index uniques basés sur ces colonnes si vous avez sélectionné Yes pour l'option Add hidden columns for tables without non-null unique keys dans la section Advanced Options de la page Migration Options. Ces colonnes et index seront automatiquement supprimés lors de la phase de basculement direct. Pour plus d'informations sur la création d'une tâche, consultez la rubrique Migrate data from an Oracle database to an Oracle tenant of OceanBase Database.

    Le service de transmission de données ajoute automatiquement des colonnes masquées à l'instruction CREATE TABLE. Voici un exemple :

    CREATE TABLE "table1" (
    	"S1" NVARCHAR2(2) NOT NULL,
    	"S2" NVARCHAR2(20) DEFAULT 'Default value field',
    	"OMS_OBJECT_NUMBER" NUMBER INVISIBLE,
      "OMS_RELATIVE_FNO" NUMBER INVISIBLE,
      "OMS_BLOCK_NUMBER" NUMBER INVISIBLE,
      "OMS_ROW_NUMBER" NUMBER INVISIBLE
    );
  • Pour les tâches de migration de données répertoriées dans le tableau suivant, afin de garantir la migration des tables sans clé unique, le service de transmission de données ajoute des colonnes masquées aux tables correspondantes de la cible et crée un index unique basé sur ces colonnes. Ces colonnes masquées et index seront automatiquement supprimés lors de la phase de basculement direct.

    Source

    Target

    Reference

    MySQL tenant of OceanBase Database

    MySQL tenant of OceanBase Database

    Migrate data between OceanBase databases

    Synchronize data between tenants of the same type in OceanBase Database

    Oracle tenant of OceanBase Database

    Oracle tenant of OceanBase Database

    Oracle tenant of OceanBase Database

    Oracle database

    Migrate data from an Oracle tenant of OceanBase Database to an Oracle database

    MySQL tenant of OceanBase Database

    Oracle tenant of OceanBase Database

    Synchronize data between tenants of different types in OceanBase Database

    Oracle tenant of OceanBase Database

    MySQL tenant of OceanBase Database

    • Lors de la migration ou de la synchronisation de données entre des locataires MySQL d'OceanBase Database, le service de transmission de données ajoute automatiquement des colonnes masquées, des commentaires de colonnes masquées et des index uniques à l'instruction CREATE TABLE si vous avez sélectionné Yes pour l'option Add hidden columns for tables without non-null unique keys dans la section Advanced Options de la page Migration Options ou Synchronization Options.

      // Create a hidden column and a unique index for a table without a partitioning key column.
      create table `table2` (
      	`c1` binary(1),
      	`OMS_PK_INCRMT` bigint COMMENT 'Reserved for data migration tasks of OMS',
      	UNIQUE KEY `UK_table2_OBPK_INCRMT` (`OMS_PK_INCRMT`)
      );
      // Create a hidden column and a unique index for a table with a partitioning key column.
      create table `partlistcolumns_key_nopri` (
          `col1` int(11),
          `col2` decimal(10,2),
          `col3` decimal(10,2),
          `col4` bit(1),
          `col5` tinyint(4),
          `col6` smallint(6),
          `OMS_PK_INCRMT` bigint COMMENT 'Reserved for data migration tasks of OMS',
          UNIQUE KEY `UK_partlistcolumns_key_nopri_OBPK_INCRMT` (`col1`,`col6`, `OMS_PK_INCRMT`) LOCAL
      )
      default charset=utf8mb4
      default collate=utf8mb4_general_ci
      PARTITION BY LIST COLUMNS (col1)
      SUBPARTITION BY KEY (col6)
      subpartition template (
          SUBPARTITION `p0`,
          SUBPARTITION `p1`,
          SUBPARTITION `p2`,
          SUBPARTITION `p3`
      )
      (
          PARTITION `p1` VALUES IN (1),
          PARTITION `p2` VALUES IN (2),
          PARTITION `p3` VALUES IN (3),
          PARTITION `p4` VALUES IN (4)
      );
    • Lors de la migration ou de la synchronisation de données entre des locataires Oracle d'OceanBase Database, le service de transmission de données ajoute automatiquement des colonnes masquées à l'instruction CREATE TABLE si vous avez sélectionné Yes pour l'option Add hidden columns for tables without non-null unique keys dans la section Advanced Options de la page Migration Options ou Synchronization Options.

      CREATE TABLE "table4" (
      	"V1" CHAR(20 BYTE) DEFAULT 'test',
      	"OMS_PK_INCRMT" NUMBER INVISIBLE
      );
    • Lors de la migration de données d'un locataire Oracle d'OceanBase Database vers une base de données Oracle, le service de transmission de données ajoute automatiquement des colonnes masquées à l'instruction CREATE TABLE si vous avez sélectionné Yes pour l'option Add hidden columns for tables without non-null unique keys dans la section Advanced Options de la page Migration Options.

      // Versions earlier than Oracle Database 12c
      CREATE TABLE "table3" (
      	"id" NUMBER,
      	"status" VARCHAR2(1 BYTE),
      	"OMS_PK_INCRMT" NUMBER
      );
      // Oracle Database 12c and later
      CREATE TABLE "table3" (
      	"id" NUMBER,
      	"status" VARCHAR2(1 BYTE),
      	"OMS_PK_INCRMT" NUMBER INVISIBLE
      );

Remarques d'utilisation

  • "{partition_col_0}" ou {partition_col_0} indique une colonne de clé de partitionnement de table. Plusieurs champs de ce type peuvent exister. Séparez les champs par des virgules (,), par exemple "{partition_col_0}", "{partition_col_1}", "{partition_col_2}" ou {partition_col_0}.

  • {schema}, {table}, {partition_col_0} et {partition_col_1} sont respectivement des espaces réservés pour le nom de la base de données, le nom de la table et les noms des colonnes de clé de partitionnement.

Migration de données d'une base de données Oracle vers un locataire Oracle d'OceanBase Database

Lors de la migration de données d'une base de données Oracle vers un locataire Oracle d'OceanBase Database, le service de transmission de données ajoute des colonnes masquées et crée des index uniques pour les tables disposant de clés primaires.

Pour les tables sans clé primaire ni clé unique non nulle, le service de transmission de données ajoute automatiquement des colonnes masquées et des index uniques aux tables si vous avez sélectionné Yes pour l'option Add hidden columns for tables without non-null unique keys dans la section Advanced Options de la page Migration Options lors de la configuration de la tâche de migration.

image

  • Ajouter des colonnes masquées

    ALTER TABLE "{schema}"."{table}" ADD "OMS_OBJECT_NUMBER" NUMBER INVISIBLE;
    ALTER TABLE "{schema}"."{table}" ADD "OMS_RELATIVE_FNO" NUMBER INVISIBLE;
    ALTER TABLE "{schema}"."{table}" ADD "OMS_BLOCK_NUMBER" NUMBER INVISIBLE;
    ALTER TABLE "{schema}"."{table}" ADD "OMS_ROW_NUMBER" NUMBER INVISIBLE;
  • Ajouter des index uniques

    // Partitioning key columns are available.
    CREATE UNIQUE INDEX "{schema}"."UK_{table}_OMS_ROWID" ON "{schema}"."{table}" ("OMS_OBJECT_NUMBER", "OMS_RELATIVE_FNO", "OMS_BLOCK_NUMBER", "OMS_ROW_NUMBER", "{partition_col_0}", "{partition_col_1}") LOCAL;
    // No partitioning key column is available.
    CREATE UNIQUE INDEX "{schema}"."UK_{table}_OMS_ROWID" ON "{schema}"."{table}" ("OMS_OBJECT_NUMBER", "OMS_RELATIVE_FNO", "OMS_BLOCK_NUMBER", "OMS_ROW_NUMBER");
  • Supprimer des index uniques

    DROP INDEX "{schema}"."UK_{table}_OMS_ROWID";
  • Supprimer des colonnes masquées

    ALTER TABLE "{schema}"."{table}" DROP ("OMS_OBJECT_NUMBER", "OMS_RELATIVE_FNO", "OMS_BLOCK_NUMBER", "OMS_ROW_NUMBER");

Migration ou synchronisation de données entre des locataires MySQL d'OceanBase Database

Lors de la migration ou de la synchronisation de données entre des locataires MySQL d'OceanBase Database, le service de transmission de données ajoute automatiquement des colonnes masquées et des index uniques aux tables sans clé primaire ni clé unique non nulle si vous avez sélectionné Yes pour l'option Add hidden columns for tables without non-null unique keys dans la section Advanced Options de la page Migration Options ou Synchronization Options.

image

Exécutez la commande suivante pour vérifier si une table possède des clés uniques. Remplacez {schema} et {table} par les noms réels de la base de données et de la table. Si aucun résultat n'est renvoyé, la table ne possède pas de clés uniques.

SELECT 1 FROM information_schema.statistics WHERE TABLE_SCHEMA = {schema} AND TABLE_NAME = {table} GROUP BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME HAVING count(1) = count(IF(upper(nullable) != 'YES' and NON_UNIQUE = 0, 1, NULL));
  • Ajouter des colonnes

    ALTER TABLE `{schema}`.`{table}` ADD COLUMN `OMS_PK_INCRMT` BIGINT;
  • Ajouter des index uniques

    // Partitioning key columns are available.
    CREATE UNIQUE KEY `UK_{table}_OBPK_INCRMT` (`{partition_col_0}`, `{partition_col_1}`, `OMS_PK_INCRMT`) LOCAL;
    // No partitioning key column is available.
    CREATE UNIQUE KEY `UK_{table}_OBPK_INCRMT` (`OMS_PK_INCRMT`);
  • Supprimer des index uniques

    DROP INDEX `UK_{table}_OBPK_INCRMT` ON `{schema}`.`{table}`;
  • Supprimer des colonnes

    ALTER TABLE `{schema}`.`{table}` DROP COLUMN `OMS_PK_INCRMT`;

Migration ou synchronisation de données entre des locataires Oracle d'OceanBase Database

Lors de la migration ou de la synchronisation de données entre des locataires Oracle d'OceanBase Database, le service de transmission de données ajoute automatiquement des colonnes masquées et des index uniques aux tables sans clé primaire ni clé unique non nulle si vous avez sélectionné Yes pour l'option Add hidden columns for tables without non-null unique keys dans la section Advanced Options de la page Migration Options ou Synchronization Options.

image

Exécutez l'instruction suivante pour vérifier si une table possède une clé primaire. Vous devez remplacer {schema} et {table} dans l'instruction par le nom réel de la base de données et de la table. Si aucun résultat n'est renvoyé, la table ne possède pas de clé primaire.

SELECT 1 FROM ( SELECT DC.OWNER, DC.TABLE_NAME, DC.CONSTRAINT_NAME FROM ALL_CONS_COLUMNS DCC JOIN ALL_CONSTRAINTS DC ON DCC.CONSTRAINT_NAME = DC.CONSTRAINT_NAME AND DCC.OWNER = DC.OWNER JOIN ALL_TAB_COLUMNS DTC ON DCC.COLUMN_NAME = DTC.COLUMN_NAME AND DCC.OWNER = DTC.OWNER AND DCC.TABLE_NAME = DTC.TABLE_NAME WHERE DCC.OWNER = {schema} AND DCC.TABLE_NAME = {table} AND DC.CONSTRAINT_TYPE IN ('U', 'P') GROUP BY DC.OWNER, DC.TABLE_NAME, DC.CONSTRAINT_NAME HAVING COUNT(*) = COUNT( CASE DTC.NULLABLE WHEN 'Y' THEN NULL ELSE 1 END ) MINUS SELECT TABLE_OWNER, TABLE_NAME, INDEX_NAME FROM ALL_IND_EXPRESSIONS WHERE TABLE_OWNER = {schema} AND TABLE_NAME = {table} );
  • Ajouter des colonnes masquées

    ALTER TABLE "{schema}"."{table}" ADD "OMS_PK_INCRMT" NUMBER INVISIBLE;
  • Ajouter des index uniques

    // Partitioning key columns are available.
    CREATE UNIQUE INDEX "{schema}"."UK_{table}_OBPK_INCRMT" ON "{schema}"."{table}"("{partition_col_0}", "{partition_col_1}", "OMS_PK_INCRMT") LOCAL;
    // No partitioning key column is available.
    CREATE UNIQUE INDEX "{schema}"."UK_{table}_OBPK_INCRMT" ON "{schema}"."{table}"("OMS_PK_INCRMT");
  • Supprimer des index uniques

    DROP INDEX "{schema}"."UK_{table}_OBPK_INCRMT";
  • Supprimer des colonnes masquées

    ALTER TABLE "{schema}"."{table}" DROP COLUMN "OMS_PK_INCRMT";

Migration de données d'un locataire Oracle d'OceanBase Database vers une base de données Oracle

Lors de la migration de données d'un locataire Oracle d'OceanBase Database vers une base de données Oracle, le service de transmission de données ajoute automatiquement des colonnes masquées et des index uniques aux tables sans clé primaire ni clé unique non nulle si vous avez sélectionné Yes pour l'option Add hidden columns for tables without non-null unique keys dans la section Advanced Options de la page Migration Options.

image

Exécutez l'instruction suivante pour vérifier si une table possède une clé primaire. Vous devez remplacer {schema} et {table} dans l'instruction par le nom réel de la base de données et de la table. Si aucun résultat n'est renvoyé, la table ne possède pas de clé primaire.

SELECT 1 FROM ( SELECT DC.OWNER, DC.TABLE_NAME, DC.CONSTRAINT_NAME FROM ALL_CONS_COLUMNS DCC JOIN ALL_CONSTRAINTS DC ON DCC.CONSTRAINT_NAME = DC.CONSTRAINT_NAME AND DCC.OWNER = DC.OWNER JOIN ALL_TAB_COLUMNS DTC ON DCC.COLUMN_NAME = DTC.COLUMN_NAME AND DCC.OWNER = DTC.OWNER AND DCC.TABLE_NAME = DTC.TABLE_NAME WHERE DCC.OWNER = {schema} AND DCC.TABLE_NAME = {table} AND DC.CONSTRAINT_TYPE IN ('U', 'P') GROUP BY DC.OWNER, DC.TABLE_NAME, DC.CONSTRAINT_NAME HAVING COUNT(*) = COUNT( CASE DTC.NULLABLE WHEN 'Y' THEN NULL ELSE 1 END ) MINUS SELECT TABLE_OWNER, TABLE_NAME, INDEX_NAME FROM ALL_IND_EXPRESSIONS WHERE TABLE_OWNER = {schema} AND TABLE_NAME = {table} );
  • Ajouter des colonnes masquées

    // Versions earlier than Oracle Database 12c
    ALTER TABLE "{schema}"."{table}" ADD "OMS_PK_INCRMT" NUMBER;
    // Oracle Database 12c and later
    ALTER TABLE "{schema}"."{table}" ADD "OMS_PK_INCRMT" NUMBER INVISIBLE;
  • Ajouter des index uniques

    // Partitioning key columns are available.
    CREATE UNIQUE INDEX "{schema}"."{table}" ON "{schema}"."{table}"("{partition_col_0}", "{partition_col_1}", "OMS_PK_INCRMT") LOCAL;
    // No partitioning key column is available.
    CREATE UNIQUE INDEX "{schema}"."{table}" ON "{schema}"."{table}"("OMS_PK_INCRMT");
  • Supprimer des index uniques

    DROP INDEX "{schema}"."{table}";
  • Supprimer des colonnes masquées

    ALTER TABLE "{schema}"."{table}" DROP COLUMN "OMS_PK_INCRMT";

Synchronisation de données d'un locataire MySQL vers un locataire Oracle dans OceanBase Database

Lors de la synchronisation de données d'un locataire MySQL vers un locataire Oracle dans OceanBase Database, le service de transmission de données ajoute automatiquement des colonnes masquées et des index uniques aux tables sans clé primaire ni clé unique non nulle si vous avez sélectionné Yes pour l'option Add hidden columns for tables without non-null unique keys dans la section Advanced Options de la page Synchronization Options.

image

Exécutez l'instruction suivante pour vérifier si une table possède une clé primaire. Vous devez remplacer {schema} et {table} dans l'instruction par le nom réel de la base de données et de la table. Si aucun résultat n'est renvoyé, la table ne possède pas de clé primaire.

SELECT 1 FROM information_schema.statistics WHERE TABLE_SCHEMA = {schema} AND TABLE_NAME = {table} GROUP BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME HAVING count(1) = count(IF(upper(nullable) != 'YES' and NON_UNIQUE = 0, 1, NULL));
  • Ajouter des colonnes masquées

    ALTER TABLE "{schema}"."{table}" ADD "OMS_PK_INCRMT" NUMBER INVISIBLE;
  • Ajouter des index uniques

    // Partitioning key columns are available.
    CREATE UNIQUE INDEX "{schema}"."UK_{table}_OBPK_INCRMT" ON "{schema}"."{table}"("{partition_col_0}", "{partition_col_1}", "OMS_PK_INCRMT") LOCAL;
    // No partitioning key column is available.
    CREATE UNIQUE INDEX "{schema}"."UK_{table}_OBPK_INCRMT" ON "{schema}"."{table}"("OMS_PK_INCRMT");
  • Supprimer des index uniques

    DROP INDEX "{schema}"."UK_{table}_OBPK_INCRMT";
  • Supprimer des colonnes masquées

    ALTER TABLE "{schema}"."{table}" DROP COLUMN "OMS_PK_INCRMT";

Synchronisation de données d'un locataire Oracle vers un locataire MySQL dans OceanBase Database

Lors de la synchronisation de données d'un locataire Oracle vers un locataire MySQL dans OceanBase Database, le service de transmission de données ajoute automatiquement des colonnes masquées et des index uniques aux tables sans clé primaire ni clé unique non nulle si vous avez sélectionné Yes pour l'option Add hidden columns for tables without non-null unique keys dans la section Advanced Options de la page Synchronization Options.

image

Exécutez l'instruction suivante pour vérifier si une table possède une clé primaire. Vous devez remplacer {schema} et {table} dans l'instruction par le nom réel de la base de données et de la table. Si aucun résultat n'est renvoyé, la table ne possède pas de clé primaire.

SELECT 1 FROM ( SELECT DC.OWNER, DC.TABLE_NAME, DC.CONSTRAINT_NAME FROM ALL_CONS_COLUMNS DCC JOIN ALL_CONSTRAINTS DC ON DCC.CONSTRAINT_NAME = DC.CONSTRAINT_NAME AND DCC.OWNER = DC.OWNER JOIN ALL_TAB_COLUMNS DTC ON DCC.COLUMN_NAME = DTC.COLUMN_NAME AND DCC.OWNER = DTC.OWNER AND DCC.TABLE_NAME = DTC.TABLE_NAME WHERE DCC.OWNER = {schema} AND DCC.TABLE_NAME = {table} AND DC.CONSTRAINT_TYPE IN ('U', 'P') GROUP BY DC.OWNER, DC.TABLE_NAME, DC.CONSTRAINT_NAME HAVING COUNT(*) = COUNT( CASE DTC.NULLABLE WHEN 'Y' THEN NULL ELSE 1 END ) MINUS SELECT TABLE_OWNER, TABLE_NAME, INDEX_NAME FROM ALL_IND_EXPRESSIONS WHERE TABLE_OWNER = {schema} AND TABLE_NAME = {table} );
  • Ajouter des colonnes masquées

    ALTER TABLE `{schema}`.`{table}` ADD COLUMN `oms_pk_incrmt` BIGINT;
  • Ajouter des index uniques

    // Partitioning key columns are available.
    CREATE UNIQUE KEY `uk_{table}_obpk_incrmt` (`{partition_col_0}`, `{partition_col_1}`, `oms_pk_incrmt`) LOCAL;
    // No partitioning key column is available.
    CREATE UNIQUE KEY `uk_{table}_obpk_incrmt` (`oms_pk_incrmt`);
  • Supprimer des index uniques

    DROP INDEX `uk_{table}_obpk_incrmt` ON `{schema}`.`{table}`;
  • Supprimer des colonnes masquées

    ALTER TABLE `{schema}`.`{table}` DROP COLUMN `oms_pk_incrmt`;