Al realizar una migración de esquema o sincronizar una sentencia DDL incremental CREATE TABLE, el servicio de transmisión de datos proporciona el mecanismo correspondiente según la situación específica de la tarea de migración de datos.
Contexto
Puede eliminar manualmente las columnas ocultas y los índices únicos según el tipo de tarea de migración de datos, tal como se indica en este tema, antes de avanzar a la fase de cambio directo hacia adelante de una tarea de migración de datos.
Si no ha eliminado manualmente las columnas ocultas y los índices únicos, el servicio de transmisión de datos los eliminará automáticamente según el tipo de tarea de migración de datos durante la fase de cambio directo hacia adelante.
-
Al migrar datos desde una base de datos Oracle hacia un inquilino Oracle de OceanBase Database, el servicio de transmisión de datos agrega columnas ocultas a todas las tablas en la base de datos destino. Además, crea índices únicos basados en dichas columnas ocultas si seleccionó Yes para Add hidden columns for tables without non-null unique keys en la sección Advanced Options de la página Migration Options. Estas columnas e índices se eliminan automáticamente en la fase de cambio directo hacia adelante. Para obtener más información sobre cómo crear una tarea, consulte Migrate data from an Oracle database to an Oracle tenant of OceanBase Database.
El servicio de transmisión de datos agrega automáticamente columnas ocultas a la sentencia
CREATE TABLE. A continuación se muestra un ejemplo: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 ); -
Para las tareas de migración de datos que aparecen en la siguiente tabla, y con el fin de garantizar la migración de tablas sin clave única, el servicio de transmisión de datos agrega columnas ocultas a las tablas correspondientes en el destino y crea un índice único basado en ellas. Dichas columnas ocultas e índices se eliminan automáticamente durante la fase de cambio directo hacia adelante.
Origen
Destino
Referencia
Inquilino MySQL de OceanBase Database
Inquilino MySQL de OceanBase Database
Migrate data between OceanBase databases
Synchronize data between tenants of the same type in OceanBase Database
Inquilino Oracle de OceanBase Database
Inquilino Oracle de OceanBase Database
Inquilino Oracle de OceanBase Database
Base de datos Oracle
Migrate data from an Oracle tenant of OceanBase Database to an Oracle database
Inquilino MySQL de OceanBase Database
Inquilino Oracle de OceanBase Database
Synchronize data between tenants of different types in OceanBase Database
Inquilino Oracle de OceanBase Database
Inquilino MySQL de OceanBase Database
-
Al migrar o sincronizar datos entre inquilinos MySQL de OceanBase Database, el servicio de transmisión de datos agrega automáticamente columnas ocultas, comentarios de columnas ocultas e índices únicos a la sentencia
CREATE TABLEsi seleccionó Yes para Add hidden columns for tables without non-null unique keys en la sección Advanced Options de la página Migration Options o 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) ); -
Al migrar o sincronizar datos entre inquilinos Oracle de OceanBase Database, el servicio de transmisión de datos agrega automáticamente columnas ocultas a la sentencia
CREATE TABLEsi seleccionó Yes para Add hidden columns for tables without non-null unique keys en la sección Advanced Options de la página Migration Options o Synchronization Options.CREATE TABLE "table4" ( "V1" CHAR(20 BYTE) DEFAULT 'test', "OMS_PK_INCRMT" NUMBER INVISIBLE ); -
Al migrar datos desde un inquilino Oracle de OceanBase Database hacia una base de datos Oracle, el servicio de transmisión de datos agrega automáticamente columnas ocultas a la sentencia
CREATE TABLEsi seleccionó Yes para Add hidden columns for tables without non-null unique keys en la sección Advanced Options de la página 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 );
-
Notas de uso
"{partition_col_0}"o{partition_col_0}indica una columna de clave de particionamiento de tabla. Pueden existir varios campos de este tipo. Separe los campos con comas (,), por ejemplo:"{partition_col_0}", "{partition_col_1}", "{partition_col_2}"o{partition_col_0}.{schema}, {table}, {partition_col_0} y {partition_col_1} son marcadores de posición para el nombre de la base de datos, el nombre de la tabla y los nombres de las columnas de clave de particionamiento, respectivamente.
Migración de datos desde una base de datos Oracle hacia un inquilino Oracle de OceanBase Database
Al migrar datos desde una base de datos Oracle hacia un inquilino Oracle de OceanBase Database, el servicio de transmisión de datos agrega columnas ocultas y crea índices únicos para las tablas con claves primarias.
En el caso de tablas sin claves primarias ni claves únicas no nulas, el servicio de transmisión de datos agrega automáticamente columnas ocultas e índices únicos a las tablas si seleccionó Yes para Add hidden columns for tables without non-null unique keys in the Advanced Options section on the Migration Options page during migration task configuration.

-
Agregar columnas ocultas
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; -
Agregar índices únicos
// 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"); -
Eliminar índices únicos
DROP INDEX "{schema}"."UK_{table}_OMS_ROWID"; -
Eliminar columnas ocultas
ALTER TABLE "{schema}"."{table}" DROP ("OMS_OBJECT_NUMBER", "OMS_RELATIVE_FNO", "OMS_BLOCK_NUMBER", "OMS_ROW_NUMBER");
Migración o sincronización de datos entre inquilinos MySQL de OceanBase Database
Al migrar o sincronizar datos entre inquilinos MySQL de OceanBase Database, el servicio de transmisión de datos agrega automáticamente columnas ocultas e índices únicos a las tablas sin clave primaria ni clave única no nula si seleccionó Yes para Add hidden columns for tables without non-null unique keys en la sección Advanced Options de la página Migration Options o Synchronization Options.

Ejecute el siguiente comando para comprobar si una tabla tiene claves únicas. Reemplace {schema} y {table} con los nombres reales de la base de datos y la tabla, respectivamente. Si no se devuelve ningún resultado, la tabla no tiene claves únicas.
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));
-
Agregar columnas
ALTER TABLE `{schema}`.`{table}` ADD COLUMN `OMS_PK_INCRMT` BIGINT; -
Agregar índices únicos
// 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`); -
Eliminar índices únicos
DROP INDEX `UK_{table}_OBPK_INCRMT` ON `{schema}`.`{table}`; -
Eliminar columnas
ALTER TABLE `{schema}`.`{table}` DROP COLUMN `OMS_PK_INCRMT`;
Migración o sincronización de datos entre inquilinos Oracle de OceanBase Database
Al migrar o sincronizar datos entre inquilinos Oracle de OceanBase Database, el servicio de transmisión de datos agrega automáticamente columnas ocultas e índices únicos a las tablas sin clave primaria ni clave única no nula si seleccionó Yes para Add hidden columns for tables without non-null unique keys en la sección Advanced Options de la página Migration Options o Synchronization Options.

Ejecute la siguiente sentencia para comprobar si una tabla tiene clave primaria. Debe reemplazar {schema} y {table} en la sentencia con el nombre real de la base de datos y el nombre de la tabla. Si no se devuelve ningún resultado, la tabla no tiene clave primaria.
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} );
-
Agregar columnas ocultas
ALTER TABLE "{schema}"."{table}" ADD "OMS_PK_INCRMT" NUMBER INVISIBLE; -
Agregar índices únicos
// 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"); -
Eliminar índices únicos
DROP INDEX "{schema}"."UK_{table}_OBPK_INCRMT"; -
Eliminar columnas ocultas
ALTER TABLE "{schema}"."{table}" DROP COLUMN "OMS_PK_INCRMT";
Migración de datos desde un inquilino Oracle de OceanBase Database hacia una base de datos Oracle
Al migrar datos desde un inquilino Oracle de OceanBase Database hacia una base de datos Oracle, el servicio de transmisión de datos agrega automáticamente columnas ocultas e índices únicos a las tablas sin clave primaria ni clave única no nula si seleccionó Yes para Add hidden columns for tables without non-null unique keys en la sección Advanced Options de la página Migration Options.

Ejecute la siguiente sentencia para comprobar si una tabla tiene clave primaria. Debe reemplazar {schema} y {table} en la sentencia con el nombre real de la base de datos y el nombre de la tabla. Si no se devuelve ningún resultado, la tabla no tiene clave primaria.
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} );
-
Agregar columnas ocultas
// 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; -
Agregar índices únicos
// 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"); -
Eliminar índices únicos
DROP INDEX "{schema}"."{table}"; -
Eliminar columnas ocultas
ALTER TABLE "{schema}"."{table}" DROP COLUMN "OMS_PK_INCRMT";
Sincronización de datos desde un inquilino MySQL hacia un inquilino Oracle en OceanBase Database
Al sincronizar datos desde un inquilino MySQL hacia un inquilino Oracle en OceanBase Database, el servicio de transmisión de datos agrega automáticamente columnas ocultas e índices únicos a las tablas sin clave primaria ni clave única no nula si seleccionó Yes para Add hidden columns for tables without non-null unique keys en la sección Advanced Options de la página Synchronization Options.

Ejecute la siguiente sentencia para comprobar si una tabla tiene clave primaria. Debe reemplazar {schema} y {table} en la sentencia con el nombre real de la base de datos y el nombre de la tabla. Si no se devuelve ningún resultado, la tabla no tiene clave primaria.
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));
-
Agregar columnas ocultas
ALTER TABLE "{schema}"."{table}" ADD "OMS_PK_INCRMT" NUMBER INVISIBLE; -
Agregar índices únicos
// 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"); -
Eliminar índices únicos
DROP INDEX "{schema}"."UK_{table}_OBPK_INCRMT"; -
Eliminar columnas ocultas
ALTER TABLE "{schema}"."{table}" DROP COLUMN "OMS_PK_INCRMT";
Sincronización de datos desde un inquilino Oracle hacia un inquilino MySQL en OceanBase Database
Al sincronizar datos desde un inquilino Oracle hacia un inquilino MySQL en OceanBase Database, el servicio de transmisión de datos agrega automáticamente columnas ocultas e índices únicos a las tablas sin clave primaria ni clave única no nula si seleccionó Yes para Add hidden columns for tables without non-null unique keys en la sección Advanced Options de la página Synchronization Options.

Ejecute la siguiente sentencia para comprobar si una tabla tiene clave primaria. Debe reemplazar {schema} y {table} en la sentencia con el nombre real de la base de datos y el nombre de la tabla. Si no se devuelve ningún resultado, la tabla no tiene clave primaria.
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} );
-
Agregar columnas ocultas
ALTER TABLE `{schema}`.`{table}` ADD COLUMN `oms_pk_incrmt` BIGINT; -
Agregar índices únicos
// 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`); -
Eliminar índices únicos
DROP INDEX `uk_{table}_obpk_incrmt` ON `{schema}`.`{table}`; -
Eliminar columnas ocultas
ALTER TABLE `{schema}`.`{table}` DROP COLUMN `oms_pk_incrmt`;