All Products
Search
Document Center

ApsaraDB for OceanBase (Deprecated):Mekanisme kolom tersembunyi dari layanan transmisi data

Last Updated:Jul 02, 2025

Saat melakukan migrasi skema atau menyinkronkan pernyataan DDL inkremental CREATE TABLE, layanan transmisi data akan memberikan mekanisme yang sesuai berdasarkan situasi aktual tugas migrasi data.

Latar Belakang

Anda dapat menghapus kolom tersembunyi dan indeks unik secara manual berdasarkan jenis tugas migrasi data sebelum melanjutkan ke fase switchover maju.

Jika Anda tidak menghapus kolom tersembunyi dan indeks unik secara manual, layanan transmisi data akan menghapusnya secara otomatis berdasarkan jenis tugas migrasi data selama fase switchover maju.

  • Saat memigrasikan data dari database Oracle ke tenant Oracle di OceanBase Database, layanan transmisi data akan menambahkan kolom tersembunyi ke semua tabel di database target dan membuat indeks unik berdasarkan kolom tersebut jika Anda memilih Yes untuk opsi Add hidden columns for tables without non-null unique keys di bagian Advanced Options pada halaman Migration Options. Kolom dan indeks ini akan dihapus secara otomatis selama fase switchover maju. Untuk informasi lebih lanjut tentang cara membuat tugas, lihat Migrasikan Data dari Database Oracle ke Tenant Oracle di OceanBase Database.

    Layanan transmisi data akan menambahkan kolom tersembunyi secara otomatis ke pernyataan CREATE TABLE. Berikut adalah contohnya:

    CREATE TABLE "table1" (
    	"S1" NVARCHAR2(2) NOT NULL,
    	"S2" NVARCHAR2(20) DEFAULT 'Nilai default bidang',
    	"OMS_OBJECT_NUMBER" NUMBER INVISIBLE,
      "OMS_RELATIVE_FNO" NUMBER INVISIBLE,
      "OMS_BLOCK_NUMBER" NUMBER INVISIBLE,
      "OMS_ROW_NUMBER" NUMBER INVISIBLE
    );
  • Untuk tugas migrasi data yang tercantum dalam tabel berikut, layanan transmisi data akan menambahkan kolom tersembunyi dan membuat indeks unik untuk tabel tanpa kunci unik. Kolom dan indeks ini akan dihapus secara otomatis selama fase switchover maju.

    Sumber

    Target

    Referensi

    Tenant MySQL dari OceanBase Database

    Tenant MySQL dari OceanBase Database

    Migrasikan data antar database OceanBase

    Sinkronkan data antar tenant dengan tipe yang sama di OceanBase Database

    Tenant Oracle dari OceanBase Database

    Tenant Oracle dari OceanBase Database

    Tenant Oracle dari OceanBase Database

    Database Oracle

    Migrasikan data dari tenant Oracle dari OceanBase Database ke database Oracle

    Tenant MySQL dari OceanBase Database

    Tenant Oracle dari OceanBase Database

    Sinkronkan data antar tenant dengan tipe berbeda di OceanBase Database

    Tenant Oracle dari OceanBase Database

    Tenant MySQL dari OceanBase Database

    • Saat memigrasikan atau menyinkronkan data antar tenant MySQL di OceanBase Database, layanan transmisi data akan menambahkan kolom tersembunyi, komentar kolom tersembunyi, dan indeks unik ke pernyataan CREATE TABLE jika Anda memilih Yes untuk opsi Add hidden columns for tables without non-null unique keys di bagian Advanced Options pada halaman Migration Options atau Synchronization Options.

      // Buat kolom tersembunyi dan indeks unik untuk tabel tanpa kolom kunci partisi.
      create table `table2` (
      	`c1` binary(1),
      	`OMS_PK_INCRMT` bigint COMMENT 'Dipesan untuk tugas migrasi data OMS',
      	UNIQUE KEY `UK_table2_OBPK_INCRMT` (`OMS_PK_INCRMT`)
      );
      // Buat kolom tersembunyi dan indeks unik untuk tabel dengan kolom kunci partisi.
      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 'Dipesan untuk tugas migrasi data 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)
      );
    • Saat memigrasikan atau menyinkronkan data antar tenant Oracle di OceanBase Database, layanan transmisi data akan menambahkan kolom tersembunyi ke pernyataan CREATE TABLE jika Anda memilih Yes untuk opsi Add hidden columns for tables without non-null unique keys di bagian Advanced Options pada halaman Migration Options atau Synchronization Options.

      CREATE TABLE "table4" (
      	"V1" CHAR(20 BYTE) DEFAULT 'test',
      	"OMS_PK_INCRMT" NUMBER INVISIBLE
      );
    • Saat memigrasikan data dari tenant Oracle di OceanBase Database ke database Oracle, layanan transmisi data akan menambahkan kolom tersembunyi ke pernyataan CREATE TABLE jika Anda memilih Yes untuk opsi Add hidden columns for tables without non-null unique keys di bagian Advanced Options pada halaman Migration Options.

      // Versi sebelum Oracle Database 12c
      CREATE TABLE "table3" (
      	"id" NUMBER,
      	"status" VARCHAR2(1 BYTE),
      	"OMS_PK_INCRMT" NUMBER
      );
      // Oracle Database 12c dan setelahnya
      CREATE TABLE "table3" (
      	"id" NUMBER,
      	"status" VARCHAR2(1 BYTE),
      	"OMS_PK_INCRMT" NUMBER INVISIBLE
      );

Catatan Penggunaan

  • "{partition_col_0}" atau `{partition_col_0}` menunjukkan kolom kunci partisi tabel. Beberapa bidang seperti itu mungkin ada. Pisahkan bidang-bidang tersebut dengan koma (,), misalnya: "{partition_col_0}", "{partition_col_1}", "{partition_col_2}" atau `{partition_col_0}`, `{partition_col_1}`, `{partition_col_2}`.

  • {schema}, {table}, {partition_col_0}, dan {partition_col_1} adalah placeholder untuk nama database, nama tabel, dan nama kolom kunci partisi.

Migrasi data dari database Oracle ke tenant Oracle dari OceanBase Database

Saat memigrasikan data dari database Oracle ke tenant Oracle di OceanBase Database, layanan transmisi data akan menambahkan kolom tersembunyi dan membuat indeks unik untuk tabel dengan kunci primer.

Untuk tabel tanpa kunci primer atau kunci unik non-null, layanan transmisi data akan secara otomatis menambahkan kolom tersembunyi dan indeks unik ke tabel jika Anda telah memilih Yes untuk Add hidden columns for tables without non-null unique keys di bagian Advanced Options pada halaman selama konfigurasi tugas migrasi.Migration Options halaman selama konfigurasi tugas migrasi.

image

  • Tambahkan kolom tersembunyi

    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;
  • Tambahkan indeks unik

    // Kolom kunci partisi tersedia.
    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;
    // Tidak ada kolom kunci partisi yang tersedia.
    CREATE UNIQUE INDEX "{schema}"."UK_{table}_OMS_ROWID" ON "{schema}"."{table}" ("OMS_OBJECT_NUMBER", "OMS_RELATIVE_FNO", "OMS_BLOCK_NUMBER", "OMS_ROW_NUMBER");
  • Hapus indeks unik

    DROP INDEX "{schema}"."UK_{table}_OMS_ROWID";
  • Hapus kolom tersembunyi

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

Migrasi data atau sinkronisasi antar tenant MySQL dari OceanBase Database

Saat memigrasikan atau menyinkronkan data antar tenant MySQL di OceanBase Database, layanan transmisi data akan menambahkan kolom tersembunyi dan indeks unik ke tabel tanpa kunci primer atau kunci unik non-null jika Anda memilih Yes untuk opsi Add hidden columns for tables without non-null unique keys di bagian Advanced Options pada halaman Migration Options atau Synchronization Options.

image

Anda dapat menjalankan perintah berikut untuk memeriksa apakah sebuah tabel memiliki kunci unik. Ganti {schema} dan {table} dengan nama database dan tabel yang sebenarnya. Jika tidak ada hasil yang dikembalikan, tabel tersebut tidak memiliki kunci unik.

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));
  • Tambahkan kolom

    ALTER TABLE `{schema}`.`{table}` ADD COLUMN `OMS_PK_INCRMT` BIGINT;
  • Tambahkan indeks unik

    // Kolom kunci partisi tersedia.
    CREATE UNIQUE KEY `UK_{table}_OBPK_INCRMT` (`{partition_col_0}`, `{partition_col_1}`, `OMS_PK_INCRMT`) LOCAL;
    // Tidak ada kolom kunci partisi yang tersedia.
    CREATE UNIQUE KEY `UK_{table}_OBPK_INCRMT` (`OMS_PK_INCRMT`);
  • Hapus indeks unik

    DROP INDEX `UK_{table}_OBPK_INCRMT` ON `{schema}`.`{table}`;
  • Hapus kolom

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

Migrasi data atau sinkronisasi antar tenant Oracle dari OceanBase Database

Saat memigrasikan atau menyinkronkan data antar tenant Oracle di OceanBase Database, layanan transmisi data akan menambahkan kolom tersembunyi dan indeks unik ke tabel tanpa kunci primer atau kunci unik non-null jika Anda memilih Yes untuk opsi Add hidden columns for tables without non-null unique keys di bagian Advanced Options pada halaman Migration Options atau Synchronization Options.

image

Anda dapat mengeksekusi pernyataan berikut untuk memeriksa apakah sebuah tabel memiliki kunci primer. Ganti {schema} dan {table} dengan nama database dan tabel yang sebenarnya. Jika tidak ada hasil yang dikembalikan, tabel tersebut tidak memiliki kunci primer.

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} );
  • Tambahkan kolom tersembunyi

    ALTER TABLE "{schema}"."{table}" ADD "OMS_PK_INCRMT" NUMBER INVISIBLE;
  • Tambahkan indeks unik

    // Kolom kunci partisi tersedia.
    CREATE UNIQUE INDEX "{schema}"."UK_{table}_OBPK_INCRMT" ON "{schema}"."{table}"("{partition_col_0}", "{partition_col_1}", "OMS_PK_INCRMT") LOCAL;
    // Tidak ada kolom kunci partisi yang tersedia.
    CREATE UNIQUE INDEX "{schema}"."UK_{table}_OBPK_INCRMT" ON "{schema}"."{table}"("OMS_PK_INCRMT");
  • Hapus indeks unik

    DROP INDEX "{schema}"."UK_{table}_OBPK_INCRMT";
  • Hapus kolom tersembunyi

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

Migrasi data dari tenant Oracle dari OceanBase Database ke database Oracle

Saat memigrasikan data dari tenant Oracle di OceanBase Database ke database Oracle, layanan transmisi data akan menambahkan kolom tersembunyi dan indeks unik ke tabel tanpa kunci primer atau kunci unik non-null jika Anda memilih Yes untuk opsi Add hidden columns for tables without non-null unique keys di bagian Advanced Options pada halaman Migration Options.

image

Anda dapat mengeksekusi pernyataan berikut untuk memeriksa apakah sebuah tabel memiliki kunci primer. Ganti {schema} dan {table} dengan nama database dan tabel yang sebenarnya. Jika tidak ada hasil yang dikembalikan, tabel tersebut tidak memiliki kunci primer.

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} );
  • Tambahkan kolom tersembunyi

    // Versi sebelum Oracle Database 12c
    ALTER TABLE "{schema}"."{table}" ADD "OMS_PK_INCRMT" NUMBER;
    // Oracle Database 12c dan setelahnya
    ALTER TABLE "{schema}"."{table}" ADD "OMS_PK_INCRMT" NUMBER INVISIBLE;
  • Tambahkan indeks unik

    // Kolom kunci partisi tersedia.
    CREATE UNIQUE INDEX "{schema}"."{table}" ON "{schema}"."{table}"("{partition_col_0}", "{partition_col_1}", "OMS_PK_INCRMT") LOCAL;
    // Tidak ada kolom kunci partisi yang tersedia.
    CREATE UNIQUE INDEX "{schema}"."{table}" ON "{schema}"."{table}"("OMS_PK_INCRMT");
  • Hapus indeks unik

    DROP INDEX "{schema}"."{table}";
  • Hapus kolom tersembunyi

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

Sinkronisasi data dari tenant MySQL ke tenant Oracle di OceanBase Database

Saat menyinkronkan data dari tenant MySQL ke tenant Oracle di OceanBase Database, layanan transmisi data akan menambahkan kolom tersembunyi dan indeks unik ke tabel tanpa kunci primer atau kunci unik non-null jika Anda memilih Yes untuk opsi Add hidden columns for tables without non-null unique keys di bagian Advanced Options pada halaman Synchronization Options.

image

Anda dapat mengeksekusi pernyataan berikut untuk memeriksa apakah sebuah tabel memiliki kunci primer. Ganti {schema} dan {table} dengan nama database dan tabel yang sebenarnya. Jika tidak ada hasil yang dikembalikan, tabel tersebut tidak memiliki kunci primer.

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));
  • Tambahkan kolom tersembunyi

    ALTER TABLE "{schema}"."{table}" ADD "OMS_PK_INCRMT" NUMBER INVISIBLE;
  • Tambahkan indeks unik

    // Kolom kunci partisi tersedia.
    CREATE UNIQUE INDEX "{schema}"."UK_{table}_OBPK_INCRMT" ON "{schema}"."{table}"("{partition_col_0}", "{partition_col_1}", "OMS_PK_INCRMT") LOCAL;
    // Tidak ada kolom kunci partisi yang tersedia.
    CREATE UNIQUE INDEX "{schema}"."UK_{table}_OBPK_INCRMT" ON "{schema}"."{table}"("OMS_PK_INCRMT");
  • Hapus indeks unik

    DROP INDEX "{schema}"."UK_{table}_OBPK_INCRMT";
  • Hapus kolom tersembunyi

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

Sinkronisasi data dari tenant Oracle ke tenant MySQL di OceanBase Database

Saat menyinkronkan data dari tenant Oracle ke tenant MySQL di OceanBase Database, layanan transmisi data akan menambahkan kolom tersembunyi dan indeks unik ke tabel tanpa kunci primer atau kunci unik non-null jika Anda memilih Yes untuk opsi Add hidden columns for tables without non-null unique keys di bagian Advanced Options pada halaman Synchronization Options.

image

Anda dapat mengeksekusi pernyataan berikut untuk memeriksa apakah sebuah tabel memiliki kunci primer. Ganti {schema} dan {table} dengan nama database dan tabel yang sebenarnya. Jika tidak ada hasil yang dikembalikan, tabel tersebut tidak memiliki kunci primer.

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} );
  • Tambahkan kolom tersembunyi

    ALTER TABLE `{schema}`.`{table}` ADD COLUMN `oms_pk_incrmt` BIGINT;
  • Tambahkan indeks unik

    // Kolom kunci partisi tersedia.
    CREATE UNIQUE KEY `uk_{table}_obpk_incrmt` (`{partition_col_0}`, `{partition_col_1}`, `oms_pk_incrmt`) LOCAL;
    // Tidak ada kolom kunci partisi yang tersedia.
    CREATE UNIQUE KEY `uk_{table}_obpk_incrmt` (`oms_pk_incrmt`);
  • Hapus indeks unik

    DROP INDEX `uk_{table}_obpk_incrmt` ON `{schema}`.`{table}`;
  • Hapus kolom tersembunyi

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