Memigrasikan tabel tanpa kunci utama

Halaman ini menjelaskan cara memigrasikan tabel Oracle yang tidak memiliki kunci utama.

Ringkasan pembuatan kunci utama otomatis

Tabel tanpa kunci utama tidak menjanjikan replikasi yang konsisten. Database Migration Service hanya memigrasikan tabel yang memiliki kunci utama. Jika database sumber Anda menyertakan tabel yang tidak memiliki kunci utama, Database Migration Service dapat menanganinya dengan cara berikut:

  • Saat Anda mengonversi kode sumber dan skema, Database Migration Service dapat otomatis membuat kunci utama yang tidak ada dengan menambahkan kolom ROWID di tabel tujuan. Proses otomatis ini mengharuskan tabel sumber Anda:
    • Belum memiliki kunci utama.
    • Tidak memiliki batasan UNIQUE tanpa kolom yang dapat bernilai null.
    • Tidak memiliki indeks UNIQUE tanpa kolom yang dapat bernilai null.
    Jika tabel Anda tidak memenuhi persyaratan ini, Anda harus menambahkan kunci utama yang tidak ada secara manual ke tabel dalam skema PostgreSQL yang dikonversi.
  • Di ruang kerja konversi lama, Database Migration Service tidak otomatis membuat kunci utama. Jika Anda menggunakan ruang kerja konversi lama, Anda harus menambahkan kunci utama yang tidak ada secara manual ke tabel dalam skema PostgreSQL yang dikonversi.

Menambahkan kunci utama yang tidak ada secara manual

Untuk memigrasikan tabel Oracle tanpa kunci utama, lakukan langkah-langkah berikut:

  1. Gunakan ruang kerja konversi untuk mengonversi kode sumber dan skema Anda.
  2. Hubungkan ke instance Cloud SQL tujuan Anda dengan klien SQL. Anda dapat menggunakan metode berikut:
    • psql client. Anda dapat menggunakan metode ini untuk terhubung ke IP pribadi instance, tetapi mungkin mengharuskan Anda membuat virtual machine Compute Engine.
    • Perintah gcloud sql connect. Perintah ini hanya berfungsi untuk instance Cloud SQL yang mengaktifkan alamat IP publik.
  3. Buat batasan kunci utama yang tidak ada untuk tabel Anda. Untuk mengetahui informasi selengkapnya tentang kunci primer, lihat Kunci Primer dalam dokumentasi PostgreSQL.

    Anda juga dapat meluaskan bagian berikut untuk melihat contoh perintah SQL:

    Membuat kunci utama menggunakan kolom yang ada

    Tabel Anda mungkin sudah memiliki kunci utama logis berdasarkan kolom atau kombinasi kolom. Misalnya, mungkin ada kolom dengan batasan atau indeks unik yang dikonfigurasi. Gunakan kolom ini untuk membuat kunci utama baru bagi tabel di database sumber Anda. Contoh:

    ALTER TABLE TABLE_NAME
    ADD PRIMARY KEY (COLUMN_NAME);

    Ganti kode berikut:

    • TABLE_NAME dengan nama tabel Anda yang tidak memiliki kunci utama.
    • COLUMN_NAME dengan nama kolom dengan batasan atau indeks unik yang dapat Anda gunakan sebagai kunci utama.

    Membuat kunci utama menggunakan semua kolom

    Jika Anda tidak memiliki batasan yang sudah ada yang dapat berfungsi sebagai kunci utama, buat kunci utama menggunakan semua kolom tabel. Pastikan Anda tidak melebihi panjang maksimum kunci utama yang diizinkan oleh instance PostgreSQL Anda.

    Saat membuat kunci primer komposit dengan cara ini, Anda harus mencantumkan semua nama kolom yang ingin digunakan secara eksplisit. Pernyataan tidak dapat digunakan untuk mengambil semua nama kolom untuk tujuan ini. Contoh:

    ALTER TABLE TABLE_NAME
    ADD PRIMARY KEY (COLUMN_NAME_1, COLUMN_NAME_2, COLUMN_NAME_3, ...);

    Ganti kode berikut:

    • TABLE_NAME dengan nama tabel Anda yang tidak memiliki kunci utama.
    • COLUMN_NAME_1, COLUMN_NAME_2 dll. dengan nama kolom yang ingin Anda gunakan untuk membuat kunci utama.

    Membuat batasan unik dengan pseudokolom ROWID

    Database Oracle menggunakan pseudokolom ROWID untuk menyimpan lokasi setiap baris dalam tabel. Untuk memigrasikan tabel Oracle yang tidak memiliki kunci utama, Anda dapat menambahkan kolom ROWID di database PostgreSQL tujuan. Database Migration Service mengisi kolom dengan nilai numerik yang sesuai dari kolom semu ROWID Oracle sumber.

    Untuk menambahkan kolom dan menetapkannya sebagai kunci utama, jalankan perintah berikut:

    ALTER TABLE TABLE_NAME ADD COLUMN rowid numeric(33,0) NOT NULL;
    CREATE SEQUENCE TABLE_NAME_rowid_seq INCREMENT BY -1 START WITH -1 OWNED BY TABLE_NAME.rowid;
    ALTER TABLE TABLE_NAME ALTER COLUMN rowid SET DEFAULT nextval('TABLE_NAME_rowid_seq');
    ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_DISPLAY_NAME PRIMARY KEY (rowid);

    Ganti kode berikut:

    • TABLE_NAME dengan nama tabel tempat Anda ingin menambahkan kolom.
    • CONSTRAINT_DISPLAY_NAME dengan ID untuk batasan PRIMARY KEY.

Langkah berikutnya