Referensi masalah dan pola konversi

Ruang kerja konversi menggabungkan semua masalah konversi ke dalam grup dan kategori untuk membantu Anda merencanakan perbaikan error dan peringatan konversi. Setiap kategori mewakili jenis pekerjaan yang mungkin perlu Anda lakukan untuk memperbaiki masalah (meninjau, melakukan refaktorisasi, menyesuaikan jenis data). Grup memberikan agregasi lebih lanjut, karena membedakan antara kasus tertentu di tingkat yang lebih rendah:

Layar ringkasan ruang kerja konversi yang menampilkan grup dan kategori masalah konversi.
Gambar 1. Layar ringkasan ruang kerja konversi dengan grup dan kategori masalah konversi.
Layar ringkasan ruang kerja konversi yang menampilkan grup dan kategori masalah konversi.

Tabel berikut mencantumkan semua grup masalah konversi yang dapat Anda temui selama konversi skema:

ID grup masalah Deskripsi

Kode sumber tidak valid

Kemungkinan penyebab utama

Error dalam grup ini sering terjadi saat Database Migration Service menemukan sintaksis yang tidak diketahui, atau saat kode sumber Oracle tidak valid (misalnya, prosedur tersimpan tidak memiliki kata kunci END;.)

Kemungkinan mitigasi

Perbaiki objek yang tidak valid di database Oracle sumber. Kemudian, muat ulang snapshot skema sumber di Database Migration Service dan coba lagi proses konversi skema. Atau, Anda dapat mengecualikan objek dari migrasi.

Objek yang direferensikan tidak ada

Kemungkinan penyebab utama

Database Migration Service menggunakan metadata objek di hierarki sumber untuk meningkatkan kualitas konversi kode objek dependen. Jika kode Anda merujuk ke objek yang tidak disertakan dalam skema sumber, Anda mungkin mengalami masalah konversi karena Database Migration Service tidak dapat menentukan struktur atau jenis data untuk kolom, atribut, atau objek yang dirujuk yang tidak ada.

Kemungkinan error dalam grup ini mencakup jenis data yang salah untuk jenis yang ditentukan pengguna (UDT) atau jenis data VARCHAR default untuk kolom, parameter, atau variabel.

Kemungkinan mitigasi

Pastikan semua objek yang direferensikan ditambahkan ke hierarki sumber Database Migration Service, atau sesuaikan kode PostgreSQL secara manual berdasarkan pengetahuan Anda tentang model data sumber untuk dependensi yang tidak ada.

Tabel tanpa kunci utama

Kemungkinan penyebab utama

Database Migration Service mengharuskan semua tabel memiliki kunci utama. Untuk tabel tanpa kunci utama, Database Migration Service menambahkan kolom NUMERIC bernama rowid ke tabel PostgreSQL target. Kolom ini diisi dengan nilai numerik yang sesuai dari pseudokolom ROWID Oracle sumber. Untuk memastikan bahwa pernyataan INSERT tidak gagal setelah migrasi, Database Migration Service membuat urutan dan menggunakannya untuk meningkatkan kolom rowid secara otomatis.

Kemungkinan mitigasi

Anda dapat mempertahankan atau menghapus kolom rowid setelah migrasi.

Fungsi bawaan Oracle yang tidak didukung

Kemungkinan penyebab utama

Anda mungkin menggunakan fungsi bawaan Oracle yang tidak didukung.

Kemungkinan mitigasi

Temukan fungsi serupa di PostgreSQL dan ubah kode yang dikonversi. Dalam beberapa kasus, fungsi yang tidak ada mungkin disediakan oleh ekstensi Orafce, yang tersedia untuk migrasi Cloud SQL untuk PostgreSQL dan AlloyDB untuk PostgreSQL.

SQLCODE tidak didukung

Kemungkinan penyebab utama

Fungsi SQLCODE Oracle tidak didukung untuk konversi. SQLCODE menampilkan INTEGER, sedangkan yang paling setara di PostgreSQL adalah fungsi SQLSTATE yang menampilkan nilai TEXT.

Kemungkinan mitigasi

Jika kode sumber Anda tidak mengandalkan SQLCODE yang menampilkan bilangan bulat (misalnya, SQLCODE hanya pernah dicatat dalam kolom VARCHAR2 atau dengan pesan DBMS_OUTPUT), maka SQLSTATE dapat digunakan dengan aman dalam kode PostgreSQL.

Jika kode sumber Anda mengandalkan SQLCODE yang menampilkan bilangan bulat (misalnya, Anda menggunakannya dengan variabel NUMBER atau INTEGER, atau menyimpan nilai yang ditampilkan SQLCODE sebagai parameter atau kolom), Anda perlu merefaktorisasi kode yang dikonversi.

Fungsi SQL Oracle tidak didukung

Kemungkinan penyebab utama

Beberapa fungsi bawaan Oracle tidak didukung oleh Database Migration Service untuk konversi.

Fungsi tertentu mungkin memiliki padanannya di PostgreSQL (misalnya, ASCII), fungsi lainnya mungkin memiliki nama yang sama, tetapi memiliki spesifikasi yang berbeda (misalnya, fungsi REGEXP%). Beberapa fungsi mungkin tidak ada sama sekali.

Kemungkinan mitigasi

Periksa fungsi Oracle mana yang memunculkan error.

  • Jika fungsi tersebut ada dengan perilaku yang sama di PostgreSQL, Anda dapat mengabaikan pesan error karena kode yang dikonversi akan berfungsi sama setelah migrasi.
  • Jika suatu fungsi memiliki nama yang sama tetapi berfungsi secara berbeda atau tidak ada di PostgreSQL, Anda dapat mencoba memperbaiki kode yang dikonversi:

    • Buat Fungsi yang Ditentukan Pengguna (UDF) dengan nama yang sama di database tujuan.
    • Ganti panggilan fungsi di sumber dengan ekspresi yang setara.
    • Gunakan bantuan konversi yang ditingkatkan Gemini. Untuk mengetahui informasi selengkapnya, lihat Mengonversi kode dan skema SQL Server dengan bantuan Gemini.

    • Beberapa fungsi atau fitur database Oracle dapat direplikasi dengan ekstensi, seperti Orafce. Untuk mengetahui informasi selengkapnya tentang ekstensi yang didukung di database tujuan, lihat Ekstensi database yang didukung.

Paket bawaan Oracle tidak didukung sepenuhnya

Kemungkinan penyebab utama

Database Migration Service mendukung paket bawaan Oracle tertentu, tetapi banyak yang tidak memiliki dukungan konversi penuh, misalnya DBMS_STATS, DBMS_UTILITY, atau DBMS_SQL.

Kemungkinan mitigasi

Jika Anda menggunakan paket yang tidak didukung, Anda mungkin perlu:

  • Ubah kode Anda. Misalnya, daripada menggunakan DBMS_STATS.GATHER_TABLE_STATS, Anda dapat menggunakan perintah yang lebih sederhana seperti ANALYZE.

    Paket seperti UTL_FILE dan DBMS_AQ mungkin memerlukan refaktorisasi karena tidak dapat direplikasi dengan mudah di PostgreSQL.

  • Beberapa fungsi atau fitur database Oracle dapat direplikasi dengan ekstensi, seperti Orafce. Untuk mengetahui informasi selengkapnya tentang ekstensi yang didukung di database tujuan, lihat Ekstensi database yang didukung.

Jenis data Oracle tidak didukung untuk konversi

Kemungkinan penyebab utama

Beberapa jenis data Oracle saat ini tidak didukung untuk konversi atau pemindahan data.

Kemungkinan mitigasi

Dalam sebagian besar kasus, PostgreSQL memiliki jenis data yang setara. Anda dapat menggunakan file pemetaan konversi untuk menyesuaikan logika konversi dan mengubah jenis data Oracle yang tidak didukung menjadi jenis data PostgreSQL yang diperlukan.

Untuk mengetahui informasi selengkapnya tentang dukungan jenis data, lihat Ruang kerja konversi - ringkasan dan objek yang didukung.

Konflik penamaan

Kemungkinan penyebab utama

Grup ini mencakup masalah saat beberapa objek database (seperti tabel, tampilan terwujud) dikonversi untuk menggunakan nama yang sama di database tujuan. Misalnya, masalah ini dapat terjadi jika Anda memiliki objek sumber yang namanya hanya berbeda huruf besar/kecil. Nama objek Oracle tidak peka huruf besar/kecil, tetapi PostgreSQL peka huruf besar/kecil, sehingga nama objek dikonversi untuk menggunakan string yang sama.

Kemungkinan mitigasi

Ganti nama objek yang bentrok langsung di database sumber, atau di skema yang dikonversi di editor ruang kerja konversi. Anda juga dapat menggunakan file pemetaan konversi dengan perintah RENAME_*.

Fitur sumber tidak didukung

Kemungkinan penyebab utama

Grup ini mencakup semua masalah umum yang terkait dengan fitur Oracle yang tidak didukung untuk konversi. Masalah dalam grup ini tidak termasuk dalam grup masalah lain yang lebih spesifik.

Kemungkinan mitigasi

Jenis objek skema tidak didukung

Kemungkinan penyebab utama

Database Migration Service tidak mendukung jenis objek skema Oracle tertentu untuk konversi kode karena PostgreSQL tidak memiliki padanan yang sesuai. Contohnya mencakup Index-Organized Tables (IOT), indeks penelusuran teks, atau isi untuk jenis yang ditentukan pengguna (UDT).

Kemungkinan mitigasi

Database Migration Service mengonversi objek yang tidak didukung menjadi objek yang paling mendekati di PostgreSQL. Misalnya, IOT menjadi tabel reguler dengan batasan kunci utama, indeks penelusuran teks dikonversi menjadi indeks B-tree. Perlu diingat bahwa konversi ini dapat menyebabkan hilangnya fungsi khusus untuk jenis objek asli.

Fitur PL/SQL tidak didukung

Kemungkinan penyebab utama

Grup ini mencakup semua masalah umum yang terkait dengan fitur PL/SQL yang tidak didukung untuk konversi. Masalah dalam grup ini tidak termasuk dalam grup masalah lain yang lebih spesifik.

Kemungkinan mitigasi

Pengikatan massal tidak didukung

Kemungkinan penyebab utama

Konversi kode Database Migration Service saat ini tidak mendukung fitur pengikatan massal Oracle seperti BULK COLLECT, FORALL, atau SAVE EXCEPTIONS.

Kemungkinan mitigasi

Untuk memperbaiki masalah ini, Anda perlu mengubah kode yang menggunakan fitur binding massal. Anda mungkin perlu mempertimbangkan perbedaan arsitektur PostgreSQL dan Oracle, serta apakah pemrosesan array diperlukan di PostgreSQL untuk kasus penggunaan Anda.

Ada beberapa strategi untuk menangani operasi pengikatan massal Oracle di PostgreSQL. Penggunaannya bergantung pada skenario spesifik Anda, jadi sebaiknya gunakan bantuan konversi yang didukung Gemini untuk menangani kebutuhan spesifik Anda. Berikut beberapa contoh rekomendasi lainnya untuk membantu Anda memulai:

  • Untuk BULK COLLECT lengkap (tanpa LIMIT), Anda dapat mencoba menggunakan fungsi ARRAY_AGG.
  • Untuk BULK COLLECT dengan LIMIT, Anda dapat mencoba menggunakan CURSOR FOR LOOP untuk memuat dan memproses batch baris dalam array. Namun, jika kasus Anda memungkinkan perubahan fungsional, alternatif yang mungkin lebih sederhana adalah menggunakan CURSOR FOR LOOP untuk memproses satu baris sekaligus (daripada memuatnya ke dalam array).
  • Untuk operasi FORALL, Anda dapat mencoba DML berbasis set dengan UNNEST jika Anda memilih untuk menggunakan pemrosesan array.
  • Untuk SAVE EXCEPTIONS, Anda mungkin perlu menulis pengendali pengecualian dalam CURSOR FOR LOOP berbasis baris karena tidak ada klausa yang setara di PostgreSQL.

Koleksi tidak didukung

Kemungkinan penyebab utama

Konversi kode Database Migration Service memiliki dukungan parsial untuk koleksi Oracle.

Kemungkinan mitigasi

Anda harus mengubah kode PostgreSQL yang dikonversi sesuai kebutuhan. Saat menyelesaikan masalah terkait koleksi, ingatlah bahwa array PostgreSQL tidak pernah sparse. Jika Anda menetapkan elemen secara jarang, array PostgreSQL mungkin menampilkan hasil dan jumlah kardinalitas yang berbeda dengan array Oracle.

Karena PostgreSQL tidak mendukung array yang diindeks string, bergantung pada sifat datanya, Anda mungkin menganggap ekstensi JSON/JSONB atau hstore cocok.

Fungsi pipeline tidak didukung

Kemungkinan penyebab utama

Fungsi pipeline tidak didukung oleh Database Migration Service.

Kemungkinan mitigasi

Anda dapat mengganti fungsi pipelined Oracle dengan fungsi pengembalian set PostgreSQL. Sebaiknya sesuaikan kode dengan cara yang relevan dengan kasus penggunaan Anda. Berikut beberapa contoh untuk membantu Anda memulai:

  1. Mereferensikan jenis PostgreSQL (UDT) yang dikonversi dari objek Oracle sumber atau jenis data yang menentukan rowtype fungsi pipelined. Kemudian, ubah klausa return fungsi PostgreSQL menjadi RETURNS SETOF <type name> atau RETURNS TABLE, bergantung pada kasus spesifik Anda.

  2. Ganti nilai yang ditampilkan dalam kode PIPE ROW yang dikonversi dengan RETURN NEXT <row or record variable>.

Jenis koleksi fungsi pipeline sumber, yang digunakan dalam klausa RETURN fungsi Oracle, tidak diperlukan di PostgreSQL.

SQL dinamis tidak didukung

Kemungkinan penyebab utama

Database Migration Service memberikan dukungan parsial untuk mengonversi SQL dinamis. Kata kunci EXECUTE IMMEDIATE, OPEN FOR, dan USING/INTO Oracle dikonversi dengan benar ke padanannya di PostgreSQL, tetapi string SQL, DML, atau DDL dinamis yang sebenarnya tidak dikonversi.

Kemungkinan mitigasi

Anda perlu mengubah kode yang dikonversi agar sesuai dengan kebutuhan Anda. Sebaiknya gunakan bantuan konversi yang didukung Gemini untuk menangani SQL dinamis.

Opsi CONNECT BY tidak didukung

Kemungkinan penyebab utama

Sebagian besar operator, fungsi, dan pseudokolom CONNECT BY didukung oleh Database Migration Service dan dikonversi ke Common Table Expressions (CTE) rekursif PostgreSQL. Namun, ada pengecualian tertentu yang mungkin memerlukan perhatian Anda. Misalnya, klausa ORDER SIBLINGS BY hanya didukung untuk urutan menaik.

Kemungkinan mitigasi

Tidak mungkin untuk mereplikasi klausa ORDER SIBLINGS BY untuk urutan menurun dengan cara yang sederhana, jadi Anda mungkin perlu menyusun ulang kode agar berfungsi dengan urutan menaik.

Tinjau masalah yang dilaporkan dengan operator CONNECT BY, dan sesuaikan kode jika diperlukan. Sebaiknya pelajari fitur konversi otomatis yang didukung Gemini untuk mempercepat perbaikan tersebut. Untuk mengetahui informasi selengkapnya, lihat Mengonversi kode dan skema Oracle dengan bantuan Gemini.

JSON tidak didukung

Kemungkinan penyebab utama

Ada batasan tertentu dalam cara Database Migration Service mendukung JSON untuk pergerakan data dan konversi kode:

  • JSONB tidak didukung untuk pemindahan data.
  • Konversi kode tidak mendukung fungsi atau operator kueri JSON di Oracle (seperti JSON_TABLE, JSON_QUERY, JSON_OBJECT[AGG], JSON_ARRAYAGG, JSON_PATCH).
  • Di Oracle versi sebelum 21c, Anda dapat menyimpan data JSON di kolom VARCHAR2, CLOB, atau BLOB, dan memverifikasinya dengan kondisi IS JSON. Database Migration Service tidak mendukung konversi kondisi ini.
Kemungkinan mitigasi
  • Untuk memindahkan data JSON yang disimpan di kolom VARCHAR2, CLOB, atau BLOB ke PostgreSQL, Anda mungkin perlu menulis file pemetaan konversi dengan perintah MODIFY_TYPE.

    Contoh:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_JSON_DATA:JSON

    Untuk informasi selengkapnya tentang file pemetaan konversi, lihat File pemetaan konversi.

  • Untuk mengonversi fungsi dan operator JSON Oracle ke PostgreSQL, Anda dapat menggunakan fungsi PostgreSQL seperti JSONB_ARRAY_ELEMENTS, JSON_AGG. Untuk mengetahui informasi selengkapnya, lihat Fungsi dan Operator JSON dalam dokumentasi PostgreSQL.

Masalah penguncian dan transaksi

Kemungkinan penyebab utama

Konversi kode Database Migration Service tidak mendukung pernyataan LOCK atau SAVEPOINT. PostgreSQL tidak mendukung SAVEPOINT.

Kemungkinan mitigasi
  • Pisahkan blok SAVEPOINT di Oracle untuk memisahkan blok transaksi di PostgreSQL yang menggunakan pernyataan ROLLBACK.
  • Untuk menerapkan DBMS_LOCK, gunakan ekstensi pg_dbms_lock PostgreSQL. Ekstensi ini menyederhanakan migrasi kunci yang ditentukan pengguna Oracle ke PostgreSQL dengan mengemulasi fungsi paket DBMS_LOCK Oracle.

XML tidak didukung

Kemungkinan penyebab utama

Database Migration Service tidak mendukung XMLTYPE Oracle atau fungsi dan operator XML terkait.

Kemungkinan mitigasi

Meskipun Database Migration Service tidak mendukung XMLTYPE secara langsung, Anda dapat menyesuaikan kolom BLOB, CLOB, NVARCHAR2, atau VARCHAR2 ke XML untuk pergerakan data. PostgreSQL mendukung fungsi XML.

Untuk memigrasikan data XML Anda, ikuti langkah-langkah berikut:

  1. Buat file pemetaan konversi dengan perintah MODIFY_TYPE untuk data XML. Contoh:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_XML_DATA:XML

    Untuk informasi selengkapnya tentang file pemetaan konversi, lihat File pemetaan konversi.

  2. Mulai tugas migrasi. Proses ini memigrasikan semua data dari Oracle ke PostgreSQL, kecuali data dalam kolom jenis XMLTYPE. Kolom ini diisi dengan nilai NULL di PostgreSQL.t
  3. Buat tabel asing di PostgreSQL dengan hanya memilih kolom XMLTYPE dari Oracle. Sertakan kolom kunci utama dari tabel sumber.
  4. Gabungkan data XML dari tabel asing ke tabel PostgreSQL asli.

Untuk informasi selengkapnya tentang cara kerja PostgreSQL dengan XMLTYPE, lihat Fungsi XML dalam dokumentasi PostgreSQL.

PIVOT tidak didukung

Kemungkinan penyebab utama

Database Migration Service tidak mendukung operator transpose PIVOT dan UNPIVOT untuk konversi kode.

Kemungkinan mitigasi

Anda dapat mencapai transposisi PIVOT di PostgreSQL menggunakan ekstensi tablefunc atau dengan menulis ulang ekspresi PIVOT sumber ke agregasi bersyarat. Contoh:

  • SUM(CASE WHEN <condition> THEN <value> ELSE 0 END)
  • COUNT(CASE WHEN <condition> THEN 1 END)

Anda dapat membuat transposisi UNPIVOT, yang membuat key-value pair dari sekumpulan kolom, di PostgreSQL dengan berbagai cara:

  • Menggabungkan penggabungan LATERAL dengan sekumpulan VALUES. Contoh: SELECT ... FROM <table> CROSS JOIN LATERAL (VALUES ('<column1-name>', <column1>), ('<column2-name>', <column2>) AS u(column_name, column_value))
  • Menggunakan UNNEST dengan ARRAY. Contoh: SELECT ..., UNNEST(ARRAY['<column1-name>', '<column2-name>']) AS column_name, UNNEST(ARRAY[column1, column2]) AS column_value FROM <table>

Opsi pernyataan ALTER tidak didukung

Kemungkinan penyebab utama

Database Migration Service tidak ALTER pernyataan (yang sering dieksekusi dalam SQL dinamis) untuk konversi.

Kemungkinan mitigasi

Ganti pernyataan ALTER Oracle dengan perintah SET di PostgreSQL. Sebaiknya pelajari fitur konversi otomatis yang didukung Gemini untuk mempercepat perbaikan tersebut. Untuk mengetahui informasi selengkapnya, lihat Mengonversi kode dan skema Oracle dengan bantuan Gemini.

Fitur SQL tidak didukung

Kemungkinan penyebab utama

Grup ini mencakup semua masalah umum yang terkait dengan fitur SQL yang tidak didukung untuk konversi. Masalah dalam grup ini tidak termasuk dalam grup masalah lain yang lebih spesifik. Contohnya mencakup pemicu peristiwa database, pernyataan GRANT, operasi INSERT multi-tabel, DML pada tampilan inline (INSERT INTO (SELECT ... FROM ...)), tampilan lateral.

Kemungkinan mitigasi

Sintaksis yang tidak didukung

Kemungkinan penyebab utama

Grup ini mencakup semua masalah umum yang terkait dengan sintaksis Oracle SQL atau PL/SQL yang tidak didukung. Masalah dalam grup ini tidak termasuk dalam grup masalah lain yang lebih spesifik.

Kemungkinan mitigasi

Ubah kode Anda untuk menggunakan sintaksis PostgreSQL yang setara secara fungsional dengan PostgreSQL. Sebaiknya Anda mempelajari fitur konversi otomatis yang didukung Gemini untuk menyesuaikan kode. Untuk mengetahui informasi selengkapnya, lihat Mengonversi kode dan skema Oracle dengan bantuan Gemini.

Sintaksis SQL yang tidak didukung

Kemungkinan penyebab utama

Kode sumber Anda menggunakan sintaksis atau elemen SQL yang tidak didukung oleh Database Migration Service. Misalnya, parameter NLS_LANG dalam fungsi TO_DATE Oracle tidak didukung.

Kemungkinan mitigasi
Sintaksis PL/SQL yang tidak didukung

Kemungkinan penyebab utama

Kode sumber Anda menggunakan sintaksis atau elemen PL/SQL yang tidak didukung oleh Database Migration Service. Misalnya, pernyataan INSERT berbasis data (seperti INSERT INTO table VALUES r_variable) dan PRAGMA RESTRICT_REFERENCES tidak didukung.

Kemungkinan mitigasi

Ubah kode Anda untuk menggunakan sintaksis PostgreSQL yang setara secara fungsional dengan PostgreSQL. Sebaiknya Anda mempelajari fitur konversi otomatis yang didukung Gemini untuk menyesuaikan kode. Untuk mengetahui informasi selengkapnya, lihat Mengonversi kode dan skema Oracle dengan bantuan Gemini.

Sintaksis tanggal dan stempel waktu yang tidak didukung

Kemungkinan penyebab utama

Database Migration Service mungkin memunculkan error atau peringatan untuk sintaksis, operasi, atau ekspresi tanggal atau stempel waktu yang tidak didukung. Contoh masalah ini mencakup perbandingan antara jenis data yang tidak cocok atau penggunaan model format TZH:TZM dalam stempel waktu. Untuk mengetahui informasi selengkapnya tentang objek dan jenis data yang didukung, lihat Tentang ruang kerja konversi.

Kemungkinan mitigasi

Anda dapat membuat ulang sebagian besar ekspresi tanggal dan stempel waktu menggunakan padanan PostgreSQL. Sebaiknya pelajari fitur konversi otomatis yang didukung Gemini untuk mempercepat perbaikan tersebut. Untuk mengetahui informasi selengkapnya, lihat Mengonversi kode dan skema Oracle dengan bantuan Gemini.

Elemen yang tidak didukung dari sintaksis penanganan pengecualian Oracle

Kemungkinan penyebab utama

Konversi kode Database Migration Service tidak mendukung elemen sintaksis pengecualian PL/SQL Oracle berikut:

  • Penggunaan RAISE_APPLICATION_ERROR dengan kode error variabel, bukan kode -20nnn literal.
  • Penggunaan SQLERRM dengan argumen kode error, karena sintaksis ini tidak didukung di PostgreSQL.
Kemungkinan mitigasi

Anda harus menyelesaikan masalah ini secara manual dalam kode yang dikonversi. Sebaiknya pelajari fitur konversi otomatis yang didukung Gemini untuk mempercepat perbaikan tersebut. Untuk mengetahui informasi selengkapnya, lihat Mengonversi kode dan skema Oracle dengan bantuan Gemini.

Masalah jenis data dan konversi

Kemungkinan penyebab utama

Database Migration Service dapat mengelompokkan masalah konversi berdasarkan konteks (misalnya, masalah konversi yang terjadi dalam ekspresi perbandingan jenis). Grup CW_OP0500 mencakup semua masalah konversi jenis data umum yang tidak termasuk dalam grup masalah lainnya.

Kemungkinan mitigasi

Dalam sebagian besar kasus, Database Migration Service memunculkan pesan ERROR_UNIMPLEMENTED atau ERROR_TYPE dalam kode PostgreSQL yang dikonversi. Selesaikan error ini berdasarkan pengetahuan Anda tentang jenis data yang terlibat.

Masalah model format tanggal

Kemungkinan penyebab utama

Anda mungkin akan mengalami peringatan atau masalah saat mengonversi ekspresi tanggal atau stempel waktu ke atau dari string berdasarkan model format. Database Migration Service menggunakan model default (saat ini DD-MON-RR) saat transmisi dalam kode sumber Oracle mengecualikan model format tanggal atau stempel waktu eksplisit.

Terkadang, hal ini dapat menyebabkan masalah dalam kode yang dikonversi jika model format yang dikeluarkan untuk transmisi implisit bertentangan dengan model format eksplisit dalam ekspresi yang sama. Anda mungkin juga akan melihat masalah ini jika data Anda kemungkinan akan terpengaruh oleh perbedaan antara format RR Oracle dan format YY PostgreSQL.

Kemungkinan mitigasi

Tinjau dan validasi ekspresi PostgreSQL yang dikonversi di ruang kerja konversi.

Masalah model format numerik

Kemungkinan penyebab utama

Database Migration Service tidak mendukung semua model format Oracle. Misalnya, 'L' atau 'X' tidak didukung. Anda mungkin mengalami masalah atau peringatan dengan kode yang mengonversi string menjadi angka berdasarkan model format Oracle.

Kemungkinan mitigasi

Untuk model format Oracle yang tidak memiliki padanan di PostgreSQL, Anda mungkin perlu melakukan refaktorisasi ekspresi atau model format. Sebaiknya pelajari fitur konversi otomatis yang didukung Gemini untuk mempercepat perbaikan tersebut. Untuk mengetahui informasi selengkapnya, lihat Mengonversi kode dan skema Oracle dengan bantuan Gemini.

Masalah transmisi jenis data

Kemungkinan penyebab utama

Anda mungkin mengalami error karena transmisi jenis data yang tidak didukung atau tidak akurat. Database Migration Service biasanya memunculkan ERROR_UNIMPLEMENTED. Hal ini biasanya terjadi karena metadata tidak ada atau tidak lengkap. Database Migration Service mungkin tidak memiliki cukup informasi untuk mentransmisikan jenis, misalnya dalam argumen fungsi atau parameter prosedur.

Kemungkinan mitigasi

Sesuaikan kode PostgreSQL untuk memastikan konversi jenis data yang benar. Perbaikan ini mengharuskan Anda memahami atribut, variabel, dan kolom yang direferensikan.

Masalah perbandingan

Kemungkinan penyebab utama

Database Migration Service mungkin tidak memiliki cukup metadata atau informasi tentang jenis data saat mengonversi ekspresi perbandingan data. Misalnya, hal ini dapat terjadi saat jenis yang ditentukan pengguna (UDT) dibandingkan dengan NULL.

Kemungkinan mitigasi

Tinjau ekspresi PostgreSQL yang dikonversi dan selesaikan masalahnya. Sebaiknya pelajari fitur konversi otomatis yang didukung Gemini untuk mempercepat perbaikan tersebut. Untuk mengetahui informasi selengkapnya, lihat Mengonversi kode dan skema Oracle dengan bantuan Gemini.

Masalah dalam kategori ini mewakili kasus saat kode sumber Oracle dikonversi dengan benar ke padanan PostgreSQL terdekat, tetapi kode yang dihasilkan mungkin memiliki perbedaan semantik atau fungsional kecil yang memerlukan peninjauan Anda. Hal ini terjadi karena perbedaan cara Oracle dan PostgreSQL menangani jenis data, format, atau objek.

Sekilas, kategori ini mungkin tampak tumpang-tindih dengan masalah dalam kategori Jenis data dan konversi (CW_05), tetapi perhatikan bahwa keduanya mewakili masalah yang berbeda. CW_05 berisi masalah umum saat Database Migration Service tidak dapat mengonversi kode Oracle ke kode PostgreSQL yang setara.

Meninjau model format tanggal

Kemungkinan penyebab utama

Sebagian besar model format tanggal dan stempel waktu Oracle memiliki padanan yang sesuai di PostgreSQL, sehingga kode yang dikonversi tidak memiliki perbedaan semantik atau fungsional. Beberapa model tidak memiliki kecocokan persis, dan perilakunya bervariasi. Salah satu contohnya adalah format RR Oracle yang dikonversi ke format YY PostgreSQL.

Kemungkinan mitigasi

Tinjau dan validasi ekspresi dengan konversi sesuai model format untuk memastikan bahwa kode yang dikversi berperilaku seperti yang diharapkan.

Meninjau model format numerik

Kemungkinan penyebab utama

Sebagian besar model format numerik sumber memiliki padanan di PostgreSQL, sehingga kode yang dikonversi tidak memiliki perbedaan semantik atau fungsional. Namun, beberapa model format mungkin tidak memiliki kecocokan persis atau berperilaku sedikit berbeda.

Kemungkinan mitigasi

Tinjau dan validasi ekspresi dengan konversi sesuai model format untuk memastikan bahwa kode yang dikversi berfungsi seperti yang diharapkan.

Meninjau kode pengecualian

Kemungkinan penyebab utama

Saat Anda menggunakan RAISE_APPLICATION_ERROR dengan kode error dalam rentang -20000 hingga -20999, Database Migration Service akan mengonversinya ke PostgreSQL RAISE EXCEPTION dengan SQLSTATE dalam rentang CW0000 hingga CW999. Konversi mempertahankan 3 digit terakhir kode error sumber dan memberinya awalan CW.

Kemungkinan mitigasi

Tinjau perilaku ini untuk menentukan apakah perilaku tersebut sesuai dengan kebutuhan Anda. Peninjauan ini hanya diperlukan jika kode error sumber bermakna bagi aplikasi, tim dukungan, atau dokumentasi Anda. Jika nilai kode error itu sendiri tidak bermakna, Anda dapat mengabaikan peringatan ini.

Tinjau pesan pengecualian

Kemungkinan penyebab utama

Fungsi SQLERRM ada di Oracle PL/SQL dan di PostgreSQL, tetapi mungkin menampilkan teks error yang berbeda di setiap mesin. Misalnya, pembagian dengan nol di Oracle menampilkan teks error ORA-01476: divisor is equal to zero, tetapi ERROR: division by zero di PostgreSQL.

Kemungkinan mitigasi

Jika aplikasi, infrastruktur dukungan, atau dokumentasi Anda bergantung pada teks error, tinjau konversinya. Jika tidak, Anda dapat mengabaikan perbedaan ini.

Meninjau emulasi fungsi bawaan Oracle

Kemungkinan penyebab utama

Konversi kode dan skema Database Migration Service bertujuan untuk memberikan perilaku fungsi Oracle dengan padanan PostgreSQL, tetapi hasilnya mungkin tidak selalu memuaskan untuk skenario Anda. Oleh karena itu, ruang kerja konversi selalu memberikan peringatan saran dengan konversi fungsi yang mungkin memerlukan peninjauan Anda.

Kemungkinan mitigasi

Sebaiknya tinjau objek tempat ruang kerja konversi memunculkan peringatan dalam grup masalah CW_OP0605.

Meninjau jenis data kolom kunci asing

Kemungkinan penyebab utama

Database Migration Service mengidentifikasi spesifikasi jenis data yang tidak cocok antara objek induk dan turunan (misalnya, saat kolom induk adalah NUMBER(4) dan kolom turunan adalah NUMBER(10)).

Kemungkinan mitigasi

Biasanya, sedikit ketidakcocokan jenis data tidak menyebabkan masalah pada fungsi database. Namun, sebaiknya tinjau model data yang dikonversi untuk menemukan inkonsistensi.

Peninjauan fungsional direkomendasikan
Kemungkinan penyebab utama

Grup ini mencakup semua masalah umum yang terkait dengan potensi perbedaan fungsional dalam kode Oracle dan PostgreSQL. Masalah dalam grup ini tidak termasuk dalam grup masalah lain yang lebih spesifik.

Kemungkinan mitigasi

Meninjau emulasi fungsi bawaan Oracle

Kemungkinan penyebab utama

Banyak fungsi bawaan Oracle yang tidak memiliki padanan langsung di PostgreSQL. Untuk membantu mengurangi masalah tersebut dalam migrasi, Database Migration Service mengonversi kode Anda menggunakan ekspresi SQL yang berbeda untuk menghasilkan perilaku fungsional yang setara di PostgreSQL.

Dalam beberapa kasus, ekspresi yang dikonversi mungkin rumit. Database Migration Service menampilkan peringatan dalam grup CW_OP0702 untuk menyoroti kemungkinan masalah dan menyarankan bahwa fungsi diemulasikan dengan ekspresi.

Kemungkinan mitigasi

Tinjau kode yang dikonversi untuk memastikan bahwa fungsi yang dikonversi berperilaku seperti yang diharapkan di lingkungan PostgreSQL Anda.

Perlu melakukan pemfaktoran ulang transaksi otonom

Kemungkinan penyebab utama

PostgreSQL tidak mendukung transaksi otonom.

Kemungkinan mitigasi

Anda dapat mencapai transaksi otonom di PostgreSQL menggunakan ekstensi dblink, pg_background, atau PL/Proxy. Panggilan database yang dilakukan dengan salah satu ekstensi ini akan dieksekusi dalam sesi yang berbeda, sehingga menghasilkan transaksi otonom.

Perlu melakukan refaktorisasi link database

Kemungkinan penyebab utama

Database Migration Service tidak mendukung link database Oracle. Objek yang menggunakan link memerlukan refaktorisasi.

Kemungkinan mitigasi

Bergantung pada target link database, Anda dapat menerapkan fungsi yang setara di PostgreSQL dengan ekstensi database, seperti dblink, postgres_fdw, oracle_fdw, atau PL/Proxy.

Diperlukan refaktorisasi antrean lanjutan

Kemungkinan penyebab utama

Paket Oracle Advanced Queuing (DBMS_AQ, DBMS_AQADM) tidak memiliki padanan PostgreSQL dan memerlukan refaktorisasi.

Kemungkinan mitigasi

Pertimbangkan opsi berikut:

  • Lakukan refaktorisasi fungsi antrean dari database dan ke tingkat aplikasi.
  • Gunakan tabel, pemberitahuan, dan pemicu PostgreSQL untuk menerapkan perilaku yang setara.
  • Hubungi perwakilan tim solusi teknis Anda untuk mendapatkan bantuan tambahan.

Perlu refaktorisasi email database

Kemungkinan penyebab utama

AlloyDB untuk PostgreSQL tidak mendukung pengiriman email langsung dari database. Ekstensi yang mengaktifkan fungsi ini juga tidak didukung. Oleh karena itu, Database Migration Service tidak mengonversi penggunaan paket UTL_SMTP.

Kemungkinan mitigasi

Lakukan refaktorisasi kode email database Anda, dan pindahkan tanggung jawab untuk mengirim email ke tingkat aplikasi. Anda masih dapat menggunakan database untuk menangkap kondisi yang mengharuskan pengiriman email.

Contoh implementasinya adalah menulis detail email ke tabel khusus. Tabel ini juga dapat berfungsi sebagai antrean email yang Anda polling dengan fungsi Cloud Run Functions dan menangani pemrosesan SMTP yang sebenarnya.

Perlu melakukan refaktorisasi tugas dan penjadwalan

Kemungkinan penyebab utama

Paket Oracle DBMS_JOB dan DBMS_SCHEDULER tidak dikonversi oleh Database Migration Service. Anda perlu merefaktorisasi kode yang mereferensikan paket ini.

Kemungkinan mitigasi

Untuk tugas sederhana tanpa dependensi, Anda dapat membuat tugas terjadwal secara manual di database PostgreSQL target dengan ekstensi pg_cron.

Untuk jadwal yang lebih rumit yang tidak didukung oleh pg_cron, Anda mungkin perlu menggunakan penjadwal tingkat aplikasi atau pihak ketiga.

Perlu refaktorisasi I/O file

Kemungkinan penyebab utama

Database Migration Service tidak mendukung paket UTL_FILE Oracle. Anda perlu merefaktorisasi kode yang mereferensikan paket ini.

Ekstensi Orafce menyertakan emulasi UTL_FILE, tetapi mungkin tidak berfungsi di lingkungan PostgreSQL yang dikelola Google karena kemampuan I/O file yang dibatasi.

Kemungkinan mitigasi
  • Lakukan pemfaktoran ulang kode untuk menghapus dependensi pada UTL_FILE.
  • AlloyDB untuk PostgreSQL memiliki batasan tertentu pada kemampuan I/O file, sehingga perilaku ini tidak dapat diterapkan langsung di database tujuan.

    Alternatif yang mungkin adalah menginstal PostgreSQL dengan ekstensi orafce di VM Compute Engine dalam VPC Anda. Kemudian, Anda dapat menggunakan ekstensi PL/Proxy di database tujuan untuk memanggil versi UTL_FILE yang kompatibel dengan PostgreSQL yang berjalan di database pada VM Compute Engine.

Sinonim

Kemungkinan penyebab utama

PostgreSQL tidak mendukung sinonim. Untuk objek kode, Database Migration Service otomatis mengganti referensi sinonim dengan skema sumber dan nama objeknya. Jika Anda menggunakan sinonim di luar objek kode, misalnya dalam skema hanya baca untuk pengguna aplikasi database, Anda harus mengonversinya secara manual.

Kemungkinan mitigasi

Untuk penggunaan sinonim di luar objek kode, Anda dapat menggunakan parameter SEARCH_PATH PostgreSQL, atau merefaktorisasi kode Anda untuk menggunakan tampilan untuk objek kueri.

Perlu melakukan refaktorisasi tabel sementara global

Kemungkinan penyebab utama

Grup masalah ini adalah peringatan bahwa Database Migration Service mendeteksi tabel sementara global dalam kode sumber Oracle Anda. Memigrasikan tabel sementara global mengharuskan Anda menginstal dan membuat ekstensi PostgreSQL pgtt di database tujuan.

Kemungkinan mitigasi

Sebaiknya pastikan Anda telah menginstal dan membuat ekstensi PostgreSQL pgtt di database tujuan.

Meninjau saran Gemini

Kemungkinan penyebab utama:

Grup masalah ini mencakup semua error dan peringatan umum yang terkait dengan konversi kode yang ditingkatkan Gemini.

Kemungkinan mitigasi: Masalah yang ditemukan di sini mungkin tidak selalu menunjukkan masalah yang sebenarnya, tetapi sebaiknya Anda meninjau semua konversi yang ditingkatkan dengan Gemini untuk memastikan konversi tersebut sesuai dengan ekspektasi Anda.

Meninjau kode yang ditingkatkan AI

Kemungkinan penyebab utama: Kode DDL ini dikonversi dengan fitur yang ditingkatkan Gemini dan mungkin memerlukan peninjauan Anda untuk memastikan akurasinya.

Kemungkinan mitigasi Sebaiknya Anda meninjau dengan cermat kode yang dikonversi dengan augmentasi AI untuk memastikan hasil akhirnya sesuai dengan fungsi skema sumber Anda.

Kutipan

Kemungkinan penyebab utama: Saran yang ditingkatkan kualitasnya oleh Gemini dapat menyertakan konten yang dikutip dari beberapa sumber. Kutipan tertentu mungkin tunduk pada batasan lisensi. Sebaiknya tinjau kode yang dikonversi untuk melihat kutipan.

Masalah konversi metadata

Kemungkinan penyebab utama:

Grup ini mencakup semua masalah konversi yang tidak termasuk dalam grup masalah lain yang lebih spesifik.

Kemungkinan mitigasi

Sebaiknya tinjau kode yang dikonversi berdasarkan pengetahuan Anda tentang model data sumber dan sesuaikan kode sesuai kebutuhan.

Masalah konversi metadata

Kemungkinan penyebab utama:

Grup ini mencakup semua masalah pelacakan metadata yang tidak termasuk dalam grup masalah lain yang lebih spesifik.

Kemungkinan mitigasi:

Contoh masalah dalam grup ini biasanya terkait dengan error atau peringatan kompilasi yang dapat menyebabkan masalah pada jenis data di PostgreSQL yang dikonversi. Sebaiknya Anda meninjau kode yang dikonversi berdasarkan pengetahuan Anda tentang model data sumber dan menyesuaikan referensi yang salah.

Hubungi tim dukungan Anda

Kemungkinan penyebab utama

Dalam kasus ekstrem khusus, Anda mungkin mengalami error internal dengan objek sumber Oracle yang valid. Jika ya, hubungi tim dukungan Anda untuk mendapatkan bantuan tambahan.

Masalah konversi umum

Kemungkinan penyebab utama

Grup ini berisi semua masalah yang tidak termasuk dalam kategori atau grup masalah lain yang lebih spesifik.

Kemungkinan mitigasi

Sebaiknya tinjau kode yang dikonversi berdasarkan pengetahuan Anda tentang model dan kode data sumber, serta sesuaikan seperlunya.