Referensi masalah dan pola konversi

Ruang kerja konversi mengagregasi 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 (tinjau, refaktor, sesuaikan 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 dirujuk 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 kolom semu ROWID Oracle sumber. Untuk memastikan pernyataan INSERT tidak gagal setelah migrasi, Database Migration Service membuat urutan dan menggunakannya untuk menambah nilai 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 Oracle bawaan yang tidak didukung.

Kemungkinan mitigasi

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

SQLCODE belum didukung

Kemungkinan penyebab utama

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

Kemungkinan mitigasi

Jika kode sumber Anda tidak bergantung pada SQLCODE yang menampilkan bilangan bulat (misalnya, SQLCODE hanya pernah dicatat di 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 memfaktorkan ulang kode yang dikonversi.

Fungsi SQL Oracle yang belum didukung

Kemungkinan penyebab utama

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

Fungsi tertentu mungkin memiliki fungsi yang setara 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 ada dengan perilaku yang sama di PostgreSQL, Anda dapat mengabaikan pesan error karena kode yang dikonversi akan berfungsi sama setelah migrasi.
  • Jika fungsi memiliki nama yang sama tetapi berfungsi berbeda atau tidak ada di PostgreSQL, Anda dapat mencoba memperbaiki kode yang dikonversi:

    • Buat Fungsi Buatan Pengguna (UDF) dengan nama yang sama di database tujuan.
    • Ganti panggilan fungsi dalam sumber dengan ekspresi yang setara.
    • Menggunakan 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 sepenuhnya didukung

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 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 belum didukung untuk konversi

Kemungkinan penyebab utama

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

Kemungkinan mitigasi

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

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

Fitur sumber belum 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 Tabel yang Teratur menurut Indeks (IOT), indeks penelusuran teks, atau isi untuk jenis yang ditentukan pengguna (UDT).

Kemungkinan mitigasi

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

Fitur PL/SQL belum 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 belum didukung

Kemungkinan penyebab utama

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

Kemungkinan mitigasi

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

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

  • Untuk BULK COLLECT penuh (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 dalam satu waktu (daripada memuatnya ke dalam array).
  • Untuk operasi FORALL, Anda dapat mencoba DML berbasis set dengan UNNEST jika memilih untuk menggunakan pemrosesan array.
  • Untuk SAVE EXCEPTIONS, Anda mungkin perlu menulis handler pengecualian dalam CURSOR FOR LOOP berbasis baris karena tidak ada klausa yang setara di PostgreSQL.

Koleksi belum didukung

Kemungkinan penyebab utama

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

Kemungkinan mitigasi

Anda harus mengubah kode PostgreSQL yang dikonversi dengan tepat. Saat menyelesaikan masalah dengan kumpulan, ingatlah bahwa array PostgreSQL tidak pernah jarang. 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 data, Anda mungkin menemukan JSON/JSONB atau ekstensi hstore cocok.

Fungsi ber-pipeline belum didukung

Kemungkinan penyebab utama

Fungsi ber-pipeline tidak didukung oleh Database Migration Service.

Kemungkinan mitigasi

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

  1. Merujuk jenis PostgreSQL (UDT) yang dikonversi dari jenis objek atau rekaman Oracle sumber yang menentukan rowtype fungsi berpipa. 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 berpipa sumber, yang digunakan dalam klausul RETURN fungsi Oracle, tidak diperlukan di PostgreSQL.

Opsi SQL dinamis belum 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 dinamis, DML, atau DDL yang sebenarnya tidak dikonversi.

Kemungkinan mitigasi

Anda harus mengubah kode yang dikonversi agar sesuai dengan persyaratan Anda. Sebaiknya gunakan Bantuan konversi yang didukung Gemini untuk menangani SQL dinamis.

Opsi CONNECT BY belum didukung

Kemungkinan penyebab utama

Sebagian besar operator, fungsi, dan pseudokolom CONNECT BY didukung oleh Database Migration Service dan dikonversi ke Ekspresi Tabel Umum (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 mereplikasi klausa ORDER SIBLINGS BY untuk urutan menurun dengan cara 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 Anda mempelajari fitur konversi otomatis yang didukung Gemini untuk mempercepat perbaikan tersebut. Untuk mengetahui informasi selengkapnya, lihat Mengonversi kode dan skema Oracle dengan bantuan Gemini.

JSON belum didukung

Kemungkinan penyebab utama

Ada batasan tertentu dalam cara Database Migration Service mendukung JSON untuk pemindahan 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 direktif MODIFY_TYPE.

    Contoh:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_JSON_DATA:JSON

    Untuk mengetahui 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 JSON Functions and Operators 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 meniru fungsionalitas paket DBMS_LOCK Oracle.

XML belum didukung

Kemungkinan penyebab utama

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

Kemungkinan mitigasi

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

Untuk memigrasikan data XML, ikuti langkah-langkah berikut:

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

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_XML_DATA:XML

    Untuk mengetahui 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 di kolom berjenis 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 dalam tabel PostgreSQL asli.

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

PIVOT belum didukung

Kemungkinan penyebab utama

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

Kemungkinan mitigasi

Anda dapat mencapai transposisi PIVOT di PostgreSQL dengan 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 gabungan 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 belum didukung

Kemungkinan penyebab utama

Database Migration Service tidak mengonversi pernyataan ALTER (yang sering dijalankan dalam SQL dinamis).

Kemungkinan mitigasi

Ganti pernyataan ALTER Oracle dengan perintah SET di PostgreSQL. Sebaiknya Anda mempelajari 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 yang belum 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 tidak didukung

Kemungkinan penyebab utama

Grup ini mencakup semua masalah umum yang terkait dengan sintaksis SQL atau PL/SQL Oracle 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 rekaman (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 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 Anda mempelajari 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 Anda mempelajari fitur konversi otomatis yang didukung Gemini untuk mempercepat perbaikan tersebut. Untuk mengetahui informasi selengkapnya, lihat Mengonversi kode dan skema Oracle dengan bantuan Gemini.

Jenis data dan masalah 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 generik yang tidak termasuk dalam grup masalah lainnya.

Kemungkinan mitigasi

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

Masalah format tanggal

Kemungkinan penyebab utama

Anda mungkin 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.

Hal ini terkadang 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 juga dapat melihat masalah ini jika data Anda kemungkinan 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 mask 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 memfaktorkan ulang ekspresi atau model format. Sebaiknya Anda mempelajari fitur konversi otomatis yang didukung Gemini untuk mempercepat perbaikan tersebut. Untuk mengetahui informasi selengkapnya, lihat Mengonversi kode dan skema Oracle dengan bantuan Gemini.

Masalah casting jenis data

Kemungkinan penyebab utama

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

Kemungkinan mitigasi

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

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 Anda mempelajari 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 menunjukkan 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.

Pada pandangan pertama, 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 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 model format untuk memastikan bahwa kode yang dikonversi berperilaku seperti yang diharapkan.

Meninjau mask format numerik

Kemungkinan penyebab utama

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

Kemungkinan mitigasi

Tinjau dan validasi ekspresi dengan konversi model format untuk memastikan bahwa kode yang dikonversi 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 menambahkan awalan CW.

Kemungkinan mitigasi

Tinjau perilaku ini untuk menentukan apakah 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.

Meninjau pesan pengecualian

Kemungkinan penyebab utama

Fungsi SQLERRM ada di Oracle PL/SQL dan di PostgreSQL, tetapi dapat 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 skema dan kode Database Migration Service bertujuan untuk menyediakan perilaku fungsi Oracle dengan fungsi yang setara di 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 di 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, ketidakcocokan jenis data yang sedikit tidak menyebabkan masalah dalam fungsi database. Namun, sebaiknya Anda meninjau model data yang dikonversi untuk melihat apakah ada 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 tidak memiliki fungsi yang setara secara langsung di PostgreSQL. Untuk membantu mengurangi masalah tersebut selama migrasi, Database Migration Service mengonversi kode Anda dengan menggunakan ekspresi SQL yang berbeda untuk menghasilkan perilaku fungsional yang setara di PostgreSQL.

Dalam beberapa kasus, ekspresi yang dikonversi mungkin rumit. Database Migration Service mengeluarkan peringatan dalam grup CW_OP0702 untuk menandai kemungkinan masalah dan menyarankan agar fungsi diemulasi dengan ekspresi.

Kemungkinan mitigasi

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

Perlu memfaktorkan ulang transaksi otonom

Kemungkinan penyebab utama

PostgreSQL tidak mendukung transaksi otonom.

Kemungkinan mitigasi

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

Perlu memfaktorkan ulang link database

Kemungkinan penyebab utama

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

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 pemfaktoran ulang 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:

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

Perubahan struktur email database diperlukan

Kemungkinan penyebab utama

Cloud SQL 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

Refaktorkan kode email database Anda, dan pindahkan tanggung jawab untuk mengirim email ke tingkat aplikasi. Anda tetap dapat menggunakan database untuk merekam kondisi yang mengharuskan pengiriman email.

Contoh implementasi dapat berupa penulisan 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 memfaktorkan ulang tugas dan penjadwalan

Kemungkinan penyebab utama

Paket Oracle DBMS_JOB dan DBMS_SCHEDULER tidak dikonversi oleh Database Migration Service. Anda perlu memfaktorkan ulang 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 pg_cron, Anda mungkin perlu menggunakan penjadwal pihak ketiga atau tingkat aplikasi.

Perlu memfaktorkan ulang I/O file

Kemungkinan penyebab utama

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

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

Kemungkinan mitigasi
  • Faktorkan ulang kode Anda untuk menghapus dependensi pada UTL_FILE.
  • Cloud SQL untuk PostgreSQL memiliki batasan tertentu pada kemampuan I/O file, sehingga perilaku ini tidak dapat diterapkan secara langsung di database tujuan.

    Alternatif lain yang mungkin adalah menginstal PostgreSQL dengan ekstensi orafce di VM Compute Engine di 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 memfaktorkan ulang kode Anda untuk menggunakan tampilan untuk objek kueri.

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 verifikasi bahwa 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 Gemini untuk memastikan konversi tersebut sesuai dengan ekspektasi Anda.

Meninjau kode yang di-augmentasi AI

Kemungkinan penyebab masalah: Kode DDL ini dikonversi dengan fitur yang ditingkatkan Gemini dan mungkin perlu ditinjau keakuratannya.

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

Kutipan

Kemungkinan penyebab utama: Saran yang ditingkatkan 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 tertentu, Anda mungkin mengalami error internal dengan objek sumber Oracle yang valid. Jika Anda melakukannya, 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, lalu sesuaikan jika diperlukan.