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 TABLEjika 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 TABLEjika 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 TABLEjika 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.

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.

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.

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.

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.

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.

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`;