Riferimento a problemi e pattern di conversione

Le workspace di conversione aggregano tutti i problemi di conversione in gruppi e categorie per aiutarti a pianificare la correzione di errori e avvisi di conversione. Ogni categoria rappresenta il tipo di lavoro che potresti dover svolgere per risolvere i problemi (revisione, refactoring, modifica dei tipi di dati). I gruppi forniscono un'ulteriore aggregazione, in quanto distinguono tra casi specifici a un livello inferiore:

Schermata di panoramica del workspace di conversione che mostra i gruppi e le categorie di problemi di conversione.
Figura 1. Schermata di panoramica dello spazio di lavoro della conversione con gruppi e categorie di problemi di conversione.
Schermata di panoramica del workspace di conversione che mostra i gruppi e le categorie di problemi di conversione.

La tabella seguente elenca tutti i gruppi di problemi di conversione che puoi riscontrare durante la conversione dello schema:

ID gruppo di problemi Descrizione

Codice sorgente non valido

Potenziale causa principale

Gli errori di questo gruppo si verificano spesso quando Database Migration Service rileva una sintassi sconosciuta o quando il codice sorgente Oracle non è valido (ad esempio, in una stored procedure manca la parola chiave END;).

Possibile mitigazione

Correggi gli oggetti non validi nel database Oracle di origine. Quindi, aggiorna lo snapshot dello schema di origine in Database Migration Service e riprova la procedura di conversione dello schema. In alternativa, puoi escludere l'oggetto dalla migrazione.

Oggetti di riferimento mancanti

Potenziale causa principale

Database Migration Service utilizza i metadati degli oggetti nell'albero di origine per migliorare la qualità della conversione del codice degli oggetti dipendenti. Se il tuo codice fa riferimento a oggetti non inclusi nello schema di origine, potresti riscontrare problemi di conversione perché Database Migration Service non riesce a determinare la struttura o i tipi di dati per le colonne, gli attributi o gli oggetti di riferimento mancanti.

I possibili errori in questo gruppo includono tipi di dati errati per tipi definiti dall'utente (UDT) o tipi di dati VARCHAR predefiniti per colonne, parametri o variabili.

Possibile mitigazione

Assicurati che tutti gli oggetti a cui viene fatto riferimento vengano aggiunti all'albero di origine di Database Migration Service oppure modifica manualmente il codice PostgreSQL in base alla tua conoscenza del modello dei dati di origine per le dipendenze mancanti.

Tabelle senza chiave primaria

Potenziale causa principale

Database Migration Service richiede che tutte le tabelle abbiano una chiave primaria. Per le tabelle senza chiavi primarie, Database Migration Service aggiunge una colonna NUMERIC denominata rowid alla tabella PostgreSQL di destinazione. Questa colonna viene compilata con i valori numerici corrispondenti dalla pseudocolonna ROWID di Oracle di origine. Per garantire che le istruzioni INSERT non vadano in errore dopo la migrazione, Database Migration Service crea una sequenza e la utilizza per incrementare automaticamente la colonna rowid.

Possibile mitigazione

Puoi conservare o rimuovere la colonna rowid dopo la migrazione.

Funzionalità integrata di Oracle non supportata

Potenziale causa principale

Potresti utilizzare funzionalità Oracle integrate non supportate.

Possibile mitigazione

Trova funzionalità simili in PostgreSQL e modifica il codice convertito di conseguenza. In alcuni casi, la funzionalità mancante potrebbe essere fornita dall' estensione Orafce, disponibile per le migrazioni di Cloud SQL per PostgreSQL e AlloyDB per PostgreSQL.

SQLCODE non ancora supportato

Potenziale causa principale

La funzione Oracle SQLCODE non è supportata per la conversione. SQLCODE restituisce un INTEGER, mentre l'equivalente più vicino in PostgreSQL è la funzione SQLSTATE che restituisce valori TEXT.

Possibile mitigazione

Se il codice sorgente non si basa sul ritorno di SQLCODE di un numero intero (ad esempio, SQLCODE viene registrato solo in una colonna VARCHAR2 o con un messaggio DBMS_OUTPUT), allora SQLSTATE può essere utilizzato in sicurezza nel codice PostgreSQL.

Se il codice sorgente si basa su SQLCODE che restituisce un numero intero (ad esempio, lo utilizzi con le variabili NUMBER o INTEGER oppure salvi i valori restituiti da SQLCODE come parametri o colonne), devi eseguire il refactoring del codice convertito.

Funzione SQL Oracle non ancora supportata

Potenziale causa principale

Alcune funzioni integrate di Oracle non sono supportate da Database Migration Service per la conversione.

Alcune funzioni potrebbero avere i loro equivalenti in PostgreSQL (ad esempio, ASCII), altre potrebbero condividere lo stesso nome ma avere specifiche diverse (ad esempio, le funzioni REGEXP%). Alcune funzioni potrebbero non esistere.

Possibile mitigazione

Controlla quale funzione Oracle ha generato l'errore.

  • Se la funzione esiste con lo stesso comportamento in PostgreSQL, puoi ignorare il messaggio di errore perché il codice convertito dovrebbe funzionare allo stesso modo dopo la migrazione.
  • Se una funzione ha lo stesso nome, ma funziona in modo diverso o non esiste in PostgreSQL, puoi provare a correggere il codice convertito:

    • Crea una funzione definita dall'utente (UDF) con lo stesso nome nel database di destinazione.
    • Sostituisci la chiamata di funzione nell'origine con un'espressione equivalente.
    • Utilizza l'assistenza per la conversione ottimizzata con Gemini. Per saperne di più, vedi Convertire il codice e lo schema SQL Server con l'aiuto di Gemini.

    • Alcune funzioni o funzionalità del database Oracle possono essere replicate con estensioni, ad esempio Orafce. Per ulteriori informazioni sulle estensioni supportate nel database di destinazione, consulta Estensioni del database supportate.

I pacchetti integrati di Oracle non sono completamente supportati

Potenziale causa principale

Database Migration Service supporta determinati pacchetti integrati di Oracle, ma molti non supportano la conversione completa, ad esempio DBMS_STATS, DBMS_UTILITY o DBMS_SQL.

Possibile mitigazione

Se utilizzi pacchetti non supportati, potresti dover:

  • Modifica il codice. Ad esempio, anziché utilizzare DBMS_STATS.GATHER_TABLE_STATS, potresti utilizzare un comando più semplice come ANALYZE.

    Pacchetti come UTL_FILE e DBMS_AQ potrebbero richiedere il refactoring perché non possono essere replicati facilmente in PostgreSQL.

  • Alcune funzioni o funzionalità del database Oracle possono essere replicate con estensioni, ad esempio Orafce. Per ulteriori informazioni sulle estensioni supportate nel database di destinazione, consulta Estensioni del database supportate.

Tipo di dati Oracle non ancora supportato per la conversione

Potenziale causa principale

Alcuni tipi di dati Oracle non sono attualmente supportati per la conversione o lo spostamento dei dati.

Possibile mitigazione

Nella maggior parte dei casi, PostgreSQL ha un tipo di dati equivalente. Puoi utilizzare i file di mappatura della conversione per personalizzare la logica di conversione e trasformare il tipo di dati Oracle non supportato nel tipo di dati PostgreSQL richiesto.

Per ulteriori informazioni sul supporto dei tipi di dati, vedi Workspace di conversione - Panoramica e oggetti supportati.

Funzionalità di origine non ancora supportata

Potenziale causa principale

Questo gruppo acquisisce tutti i problemi generici relativi alle funzionalità Oracle che non sono supportate per la conversione. I problemi in questo gruppo non rientrano in altri gruppi di problemi più specifici.

Possibile mitigazione

Tipo di oggetto dello schema non supportato

Potenziale causa principale

Database Migration Service non supporta determinati tipi di oggetti schema Oracle per la conversione del codice perché PostgreSQL non dispone di equivalenti appropriati. Gli esempi includono tabelle organizzate per indice (IOT), indici di ricerca di testo o corpi per tipi definiti dall'utente (UDT).

Possibile mitigazione

Database Migration Service converte gli oggetti non supportati nell'equivalente PostgreSQL più vicino. Ad esempio, le IOT diventano tabelle regolari con un vincolo di chiave primaria, gli indici di ricerca di testo vengono convertiti in indici B-tree. Tieni presente che queste conversioni potrebbero comportare la perdita di funzionalità specifiche del tipo di oggetto originale.

Funzionalità PL/SQL non ancora supportata

Potenziale causa principale

Questo gruppo acquisisce tutti i problemi generici relativi alle funzionalità PL/SQL che non sono supportate per la conversione. I problemi in questo gruppo non rientrano in altri gruppi di problemi più specifici.

Possibile mitigazione

Associazione in blocco non ancora supportata

Potenziale causa principale

La conversione del codice di Database Migration Service al momento non supporta le funzionalità di binding collettivo di Oracle, come BULK COLLECT, FORALL o SAVE EXCEPTIONS.

Possibile mitigazione

Per risolvere il problema, devi modificare il codice che utilizza le funzionalità di binding collettivo. Potresti prendere in considerazione le differenze tra l'architettura PostgreSQL e Oracle e se l'elaborazione degli array è necessaria in PostgreSQL per il tuo caso d'uso.

Esistono diverse strategie per gestire le operazioni di binding collettivo di Oracle in PostgreSQL. Il loro utilizzo dipende dal tuo scenario specifico, quindi ti consigliamo di utilizzare l' assistenza alle conversioni basata su Gemini per gestire le tue esigenze specifiche. Ecco alcuni altri consigli di esempio per aiutarti a iniziare:

  • Per un BULK COLLECT completo (senza LIMIT), puoi provare a utilizzare la funzione ARRAY_AGG.
  • Per BULK COLLECT con LIMIT, puoi provare a utilizzare un CURSOR FOR LOOP per caricare ed elaborare batch di righe in array. Tuttavia, se il tuo caso consente modifiche funzionali, un'alternativa forse più semplice sarebbe quella di utilizzare CURSOR FOR LOOP per elaborare una riga alla volta (anziché caricarle negli array).
  • Per le operazioni FORALL, puoi provare DML basato su set con UNNEST se scegli di utilizzare l'elaborazione di array.
  • Per SAVE EXCEPTIONS, potrebbe essere necessario scrivere un gestore di eccezioni all'interno di un CURSOR FOR LOOP basato sulle righe, poiché non esiste una clausola equivalente in PostgreSQL.

Raccolte non ancora supportate

Potenziale causa principale

La conversione del codice di Database Migration Service supporta parzialmente le raccolte Oracle.

Possibile mitigazione

Devi modificare il codice PostgreSQL convertito di conseguenza. Quando risolvi i problemi relativi alle raccolte, ricorda che gli array PostgreSQL non sono mai sparsi. Se assegni elementi in modo sparso, gli array PostgreSQL potrebbero restituire risultati e conteggi di cardinalità diversi rispetto agli array Oracle.

Poiché PostgreSQL non supporta gli array indicizzati da stringhe, a seconda della natura dei dati, potresti trovare adatti JSON/JSONB o le estensioni hstore.

Funzioni con pipeline non ancora supportate

Potenziale causa principale

Le funzioni con pipeline non sono supportate da Database Migration Service.

Possibile mitigazione

Puoi sostituire le funzioni Oracle pipelined con le funzioni di restituzione di set PostgreSQL. Ti consigliamo di modificare il codice in modo pertinente al tuo caso d'uso. Ecco alcuni esempi per aiutarti a iniziare:

  1. Fai riferimento al tipo PostgreSQL (UDT) convertito dall'oggetto o dal tipo di record Oracle di origine che definisce il tipo di riga della funzione di pipeline. Poi, modifica la clausola return della funzione PostgreSQL in modo che sia RETURNS SETOF <type name> o RETURNS TABLE, a seconda del tuo caso specifico.

  2. Sostituisci il valore restituito nel codice PIPE ROW convertito con RETURN NEXT <row or record variable>.

Il tipo di raccolta della funzione pipeline di origine, utilizzato nella clausola RETURN della funzione Oracle, non è necessario in PostgreSQL.

Opzione SQL dinamico non ancora supportata

Potenziale causa principale

Database Migration Service fornisce un supporto parziale per la conversione di SQL dinamico. Le parole chiave Oracle EXECUTE IMMEDIATE, OPEN FOR e USING/INTO vengono convertite correttamente nei loro equivalenti PostgreSQL, ma le stringhe SQL dinamiche, DML o DDL effettive non vengono convertite.

Possibile mitigazione

Devi modificare il codice convertito in modo che corrisponda ai tuoi requisiti. Ti consigliamo vivamente di utilizzare l'assistenza alle conversioni basata su Gemini per gestire SQL dinamico.

Opzione CONNECT BY non ancora supportata

Potenziale causa principale

La maggior parte degli operatori, delle funzioni e delle pseudocolonne CONNECT BY sono supportati da Database Migration Service e convertiti in Common Table Expression (CTE) ricorsive di PostgreSQL. Tuttavia, esistono alcune eccezioni che potrebbero richiedere la tua attenzione. Ad esempio, la clausola ORDER SIBLINGS BY è supportata solo per l'ordine crescente.

Possibile mitigazione

Non è possibile replicare la clausola ORDER SIBLINGS BY per l'ordine decrescente in modo semplice, quindi potresti dover ristrutturare il codice per utilizzare l'ordine crescente.

Esamina i problemi segnalati con gli operatori CONNECT BY e modifica il codice se necessario. Ti consigliamo di esplorare le funzionalità di conversione automatica basate su Gemini per accelerare queste correzioni. Per ulteriori informazioni, vedi Convertire il codice e lo schema Oracle con l'aiuto di Gemini.

JSON non ancora supportato

Potenziale causa principale

Esistono alcune limitazioni nel modo in cui Database Migration Service supporta JSON per il trasferimento dei dati e la conversione del codice:

  • JSONB non è supportato per lo spostamento dei dati.
  • La conversione del codice non supporta le funzioni o gli operatori di query JSON in Oracle (ad esempio JSON_TABLE, JSON_QUERY, JSON_OBJECT[AGG], JSON_ARRAYAGG, JSON_PATCH).
  • Nelle versioni di Oracle precedenti alla 21c, puoi archiviare dati JSON nelle colonne VARCHAR2, CLOB o BLOB e verificarli con la condizione IS JSON. Database Migration Service non supporta la conversione di questa condizione.
Possibile mitigazione
  • Per spostare i dati JSON archiviati nelle colonne VARCHAR2, CLOB o BLOB in PostgreSQL, potresti dover scrivere un file di mapping di conversione con la direttiva MODIFY_TYPE.

    Ad esempio:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_JSON_DATA:JSON

    Per ulteriori informazioni sui file di mappatura delle conversioni, consulta File di mappatura delle conversioni.

  • Per convertire le funzioni e gli operatori Oracle JSON in PostgreSQL, puoi utilizzare funzioni PostgreSQL come JSONB_ARRAY_ELEMENTS e JSON_AGG. Per saperne di più, consulta la sezione Funzioni e operatori JSON nella documentazione di PostgreSQL.

Problemi relativi a blocco e transazioni

Potenziale causa principale

La conversione del codice di Database Migration Service non supporta le istruzioni LOCK o SAVEPOINT. PostgreSQL non supporta SAVEPOINT.

Possibile mitigazione
  • Dividi i blocchi SAVEPOINT in Oracle per separare i blocchi di transazioni in PostgreSQL che utilizzano l'istruzione ROLLBACK.
  • Per implementare DBMS_LOCK, utilizza l'estensione pg_dbms_lock PostgreSQL. Questa estensione semplifica la migrazione dei blocchi definiti dall'utente Oracle a PostgreSQL emulando la funzionalità del pacchetto Oracle DBMS_LOCK.

XML non ancora supportato

Potenziale causa principale

Database Migration Service non supporta Oracle XMLTYPE né le funzioni e gli operatori XML associati.

Possibile mitigazione

Sebbene Database Migration Service non supporti direttamente XMLTYPE, puoi personalizzare le colonne BLOB, CLOB, NVARCHAR2 o VARCHAR2 in XML per lo spostamento dei dati. PostgreSQL supporta la funzionalità XML.

Per eseguire la migrazione dei dati XML:

  1. Crea un file di mappatura delle conversioni con la direttiva MODIFY_TYPE per i dati XML. Ad esempio:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_XML_DATA:XML

    Per ulteriori informazioni sui file di mappatura delle conversioni, consulta File di mappatura delle conversioni.

  2. Avvia il job di migrazione. Questo processo esegue la migrazione di tutti i dati da Oracle a PostgreSQL, ad eccezione dei dati nelle colonne di tipo XMLTYPE. Queste colonne sono compilate con valori NULL in PostgreSQL.t
  3. Crea una tabella esterna in PostgreSQL selezionando solo la colonna XMLTYPE da Oracle. Includi la colonna di chiave primaria dalla tabella di origine.
  4. Unisci i dati XML della tabella esterna alla tabella PostgreSQL originale.

Per saperne di più su come PostgreSQL funziona con XMLTYPE, consulta Funzioni XML nella documentazione di PostgreSQL.

PIVOT non ancora supportato

Potenziale causa principale

Database Migration Service non supporta gli operatori di trasposizione PIVOT e UNPIVOT per la conversione del codice.

Possibile mitigazione

Puoi ottenere la trasposizione PIVOT in PostgreSQL utilizzando l'estensione tablefunc o riscrivendo l'espressione PIVOT di origine in aggregazioni condizionali. Ad esempio:

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

Puoi creare trasposizioni UNPIVOT, che creano coppie chiave-valore da un insieme di colonne, in PostgreSQL in diversi modi:

  • Combinazione di un LATERAL join con un insieme di VALUES. Ad esempio: SELECT ... FROM <table> CROSS JOIN LATERAL (VALUES ('<column1-name>', <column1>), ('<column2-name>', <column2>) AS u(column_name, column_value))
  • Utilizzo di UNNEST con ARRAY. Ad esempio: SELECT ..., UNNEST(ARRAY['<column1-name>', '<column2-name>']) AS column_name, UNNEST(ARRAY[column1, column2]) AS column_value FROM <table>

Opzione dell'istruzione ALTER non ancora supportata

Potenziale causa principale

Database Migration Service non esegue la conversione delle istruzioni ALTER (che spesso vengono eseguite in SQL dinamico).

Possibile mitigazione

Sostituisci le istruzioni ALTER di Oracle con il comando SET in PostgreSQL. Ti consigliamo di esplorare le funzionalità di conversione automatica basate su Gemini per accelerare queste correzioni. Per ulteriori informazioni, vedi Convertire il codice e lo schema Oracle con l'aiuto di Gemini.

Funzionalità SQL non ancora supportata

Potenziale causa principale

Questo gruppo acquisisce tutti i problemi generici relativi alle funzionalità SQL che non sono supportate per la conversione. I problemi in questo gruppo non rientrano in altri gruppi di problemi più specifici. Alcuni esempi includono trigger di eventi di database, istruzioni GRANT, operazioni INSERT su più tabelle, DML su viste inline (INSERT INTO (SELECT ... FROM ...)) e viste laterali.

Possibile mitigazione

Sintassi non supportata

Potenziale causa principale

Questo gruppo acquisisce tutti i problemi generici relativi alla sintassi Oracle SQL o PL/SQL non supportata. I problemi in questo gruppo non rientrano in altri gruppi di problemi più specifici.

Possibile mitigazione

Modifica il codice in modo che utilizzi la sintassi PostgreSQL funzionalmente equivalente. Ti consigliamo di esplorare le funzionalità di conversione automatica basate su Gemini per modificare il codice. Per ulteriori informazioni, vedi Convertire il codice e lo schema Oracle con l'aiuto di Gemini.

Sintassi SQL non supportata

Potenziale causa principale

Il codice sorgente utilizza la sintassi o elementi SQL non supportati da Database Migration Service. Ad esempio, il parametro NLS_LANG nella funzione Oracle TO_DATE non è supportato.

Possibile mitigazione
Sintassi PL/SQL non supportata

Potenziale causa principale

Il codice sorgente utilizza la sintassi o gli elementi PL/SQL non supportati da Database Migration Service. Ad esempio, le istruzioni INSERT basate sui record (come INSERT INTO table VALUES r_variable) e PRAGMA RESTRICT_REFERENCES non sono supportate.

Possibile mitigazione

Modifica il codice in modo che utilizzi la sintassi PostgreSQL funzionalmente equivalente. Ti consigliamo di esplorare le funzionalità di conversione automatica basate su Gemini per modificare il codice. Per ulteriori informazioni, vedi Convertire il codice e lo schema Oracle con l'aiuto di Gemini.

Sintassi di data e timestamp non supportata

Potenziale causa principale

Database Migration Service potrebbe generare errori o avvisi per sintassi, operazioni o espressioni di data o timestamp non supportate. Alcuni esempi di questi problemi includono confronti tra tipi di dati non corrispondenti o l'utilizzo del modello di formato TZH:TZM nei timestamp. Per ulteriori informazioni sugli oggetti e sui tipi di dati supportati, vedi Informazioni sui workspace di conversione.

Possibile mitigazione

Puoi ricreare la maggior parte delle espressioni di data e timestamp utilizzando gli equivalenti PostgreSQL. Ti consigliamo di esplorare le funzionalità di conversione automatica basate su Gemini per accelerare queste correzioni. Per ulteriori informazioni, vedi Convertire il codice e lo schema Oracle con l'aiuto di Gemini.

Elementi non supportati della sintassi di gestione delle eccezioni di Oracle

Potenziale causa principale

La conversione del codice di Database Migration Service non supporta i seguenti elementi della sintassi delle eccezioni PL/SQL di Oracle:

  • L'utilizzo di RAISE_APPLICATION_ERROR con codici di errore variabili anziché codici -20nnn letterali.
  • L'utilizzo di SQLERRM con un argomento del codice di errore, in quanto questa sintassi non è supportata in PostgreSQL.
Possibile mitigazione

Devi risolvere manualmente questi problemi nel codice convertito. Ti consigliamo di esplorare le funzionalità di conversione automatica basate su Gemini per accelerare queste correzioni. Per ulteriori informazioni, vedi Convertire il codice e lo schema Oracle con l'aiuto di Gemini.

Problemi relativi ai tipi di dati e alla conversione

Potenziale causa principale

Database Migration Service può raggruppare i problemi di conversione in base al contesto (ad esempio, i problemi di conversione che si verificano nelle espressioni di confronto dei tipi). Il gruppo CW_OP0500 acquisisce tutti i problemi di conversione dei tipi di dati generici che non rientrano in altri gruppi di problemi.

Possibile mitigazione

Nella maggior parte dei casi, Database Migration Service emette un messaggio ERROR_UNIMPLEMENTED o ERROR_TYPE nel codice PostgreSQL convertito. Risolvi questo errore in base alle tue conoscenze dei tipi di dati coinvolti.

Problemi relativi alla maschera del formato della data

Potenziale causa principale

Potresti riscontrare avvisi o problemi durante la conversione di espressioni di data o timestamp in o da stringhe in base a un modello di formato. Database Migration Service utilizza un modello predefinito (attualmente DD-MON-RR) quando i cast nel codice sorgente Oracle escludono un modello di formato di data o timestamp esplicito.

A volte questo può causare problemi nel codice convertito se il modello di formato emesso per il cast implicito è in conflitto con un modello di formato esplicito nella stessa espressione. Potresti riscontrare questo problema anche se i tuoi dati potrebbero essere interessati dalle differenze tra il formato Oracle RR e il formato PostgreSQL YY.

Possibile mitigazione

Esamina e convalida le espressioni PostgreSQL convertite nell'area di lavoro della conversione.

Problemi relativi alla maschera del formato numerico

Potenziale causa principale

Database Migration Service non supporta tutti i modelli di formato Oracle. Ad esempio, 'L' o 'X' non sono supportati. Potresti riscontrare problemi o avvisi con il codice che converte le stringhe in numeri in base ai modelli di formato Oracle.

Possibile mitigazione

Per i modelli di formato Oracle che non hanno un equivalente in PostgreSQL, potresti dover eseguire il refactoring delle espressioni o dei modelli di formato. Ti consigliamo di esplorare le funzionalità di conversione automatica basate su Gemini per accelerare queste correzioni. Per ulteriori informazioni, vedi Convertire il codice e lo schema Oracle con l'aiuto di Gemini.

Problemi di casting dei tipi di dati

Potenziale causa principale

Potresti riscontrare errori a causa del casting di tipi di dati non supportati o imprecisi. Database Migration Service in genere emette ERROR_UNIMPLEMENTED. Di solito questo problema è dovuto a metadati mancanti o incompleti. Database Migration Service potrebbe non disporre di informazioni sufficienti per eseguire il cast di un tipo, ad esempio negli argomenti della funzione o nei parametri della procedura.

Possibile mitigazione

Modifica il codice PostgreSQL per garantire conversioni corrette dei tipi di dati. Queste correzioni richiedono la conoscenza degli attributi, delle variabili e delle colonne a cui fai riferimento.

Problemi di confronto

Potenziale causa principale

Database Migration Service potrebbe non disporre di metadati o informazioni sufficienti sui tipi di dati durante la conversione delle espressioni di confronto dei dati. Ad esempio, questo può accadere quando un tipo definito dall'utente (UDT) viene confrontato con NULL.

Possibile mitigazione

Esamina le espressioni PostgreSQL convertite e risolvi i problemi. Ti consigliamo di esplorare le funzionalità di conversione automatica basate su Gemini per accelerare queste correzioni. Per ulteriori informazioni, vedi Convertire il codice e lo schema Oracle con l'aiuto di Gemini.

I problemi di questa categoria rappresentano i casi in cui il codice sorgente Oracle viene convertito correttamente nell'equivalente PostgreSQL più vicino, ma il codice risultante potrebbe presentare piccole differenze semantiche o funzionali che richiedono la tua revisione. Ciò si verifica a causa delle differenze nel modo in cui Oracle e PostgreSQL gestiscono tipi, formati o oggetti di dati.

A prima vista, questa categoria potrebbe sembrare sovrapporsi ai problemi nella categoria Tipi di dati e conversione (CW_05), ma tieni presente che rappresentano problemi diversi. CW_05 contiene problemi noti in cui Database Migration Service non può convertire il codice Oracle nel suo equivalente PostgreSQL.

Esamina la maschera del formato della data

Potenziale causa principale

La maggior parte dei modelli di formato di data e timestamp Oracle hanno equivalenti appropriati in PostgreSQL, quindi il codice convertito non presenta differenze semantiche o funzionali. Alcuni modelli non hanno una corrispondenza esatta e il loro comportamento varia. Un esempio è il formato Oracle RR che viene convertito nel formato PostgreSQL YY.

Possibile mitigazione

Esamina e convalida le espressioni con le conversioni del modello di formato per assicurarti che il codice convertito si comporti come previsto.

Esamina la maschera del formato numerico

Potenziale causa principale

La maggior parte dei modelli di formato numerico di origine ha un equivalente in PostgreSQL, e il codice convertito non presenta quindi differenze semantiche o funzionali. Tuttavia, alcuni modelli di formato potrebbero non avere una corrispondenza esatta o comportarsi in modo leggermente diverso.

Possibile mitigazione

Esamina e convalida le espressioni con le conversioni del modello di formato per assicurarti che il codice convertito funzioni come previsto.

Esamina il codice di eccezione

Potenziale causa principale

Quando utilizzi RAISE_APPLICATION_ERROR con un codice di errore compreso tra -20000 e -20999, Database Migration Service lo converte in PostgreSQL RAISE EXCEPTION con un SQLSTATE compreso tra CW0000 e CW999. La conversione conserva le ultime tre cifre del codice di errore di origine e aggiunge il prefisso CW.

Possibile mitigazione

Esamina questo comportamento per determinare se è adatto alle tue esigenze. Questa revisione è necessaria solo se i codici di errore di origine sono significativi per la tua applicazione, i team di assistenza o la documentazione. Se il valore del codice di errore non è significativo, puoi ignorare questo avviso.

Esamina il messaggio di eccezione

Potenziale causa principale

La funzione SQLERRM esiste sia in Oracle PL/SQL sia in PostgreSQL, ma potrebbe restituire un testo di errore diverso in ciascun motore. Ad esempio, la divisione per zero in Oracle restituisce il testo di errore ORA-01476: divisor is equal to zero, mentre ERROR: division by zero in PostgreSQL.

Possibile mitigazione

Se la tua applicazione, la tua infrastruttura di assistenza o la tua documentazione dipende dal testo dell'errore, rivedi la conversione. In caso contrario, puoi ignorare questa differenza.

Esamina l'emulazione delle funzioni integrate di Oracle

Potenziale causa principale

La conversione di codice e schema di Database Migration Service mira a fornire il comportamento della funzione Oracle con equivalenti PostgreSQL, ma i risultati potrebbero non essere sempre soddisfacenti per il tuo scenario. Pertanto, gli spazi di lavoro per le conversioni forniscono sempre un avviso con le conversioni di funzioni che potrebbero richiedere la tua revisione.

Possibile mitigazione

Ti consigliamo di esaminare gli oggetti in cui i workspace di conversione generano avvisi nel gruppo di problemi CW_OP0605.

Esamina il tipo di dati della colonna della chiave esterna

Potenziale causa principale

Database Migration Service ha identificato specifiche di tipo di dati non corrispondenti tra oggetti padre e figlio (ad esempio, quando una colonna padre è NUMBER(4) e la colonna figlio è NUMBER(10)).

Possibile mitigazione

La maggior parte delle volte, le piccole discrepanze tra i tipi di dati non causano problemi nella funzionalità del database. Tuttavia, ti consigliamo di esaminare il modello dei dati convertito per verificare la presenza di eventuali incongruenze.

È consigliata una revisione funzionale
Potenziale causa principale

Questo gruppo acquisisce tutti i problemi generici relativi a potenziali differenze funzionali nel codice Oracle e PostgreSQL. I problemi in questo gruppo non rientrano in altri gruppi di problemi più specifici.

Possibile mitigazione

Esamina l'emulazione delle funzioni integrate di Oracle

Potenziale causa principale

Molte funzioni integrate di Oracle non hanno un equivalente diretto in PostgreSQL. Per contribuire a mitigare questo problema per le migrazioni, Database Migration Service converte il codice utilizzando espressioni SQL diverse per produrre un comportamento funzionale equivalente in PostgreSQL.

In alcuni casi, le espressioni convertite potrebbero essere complesse. Database Migration Service genera avvisi nel gruppo CW_OP0702 per evidenziare possibili problemi e avvisare che una funzione è stata emulata con un'espressione.

Possibile mitigazione

Esamina il codice convertito per assicurarti che le funzioni convertite si comportino come previsto nell'ambiente PostgreSQL.

È obbligatorio il refactoring delle transazioni autonome

Potenziale causa principale

PostgreSQL non supporta le transazioni autonome.

Possibile mitigazione

Puoi ottenere transazioni autonome in PostgreSQL utilizzando l'estensione dblink, pg_background o PL/Proxy. Le chiamate al database effettuate con una qualsiasi di queste estensioni vengono eseguite in una sessione diversa e generano quindi una transazione autonoma.

È obbligatorio il refactoring dei link al database

Potenziale causa principale

Database Migration Service non supporta i link di database Oracle. Gli oggetti che utilizzano i link richiedono il refactoring.

Possibile mitigazione

A seconda della destinazione del link al database, puoi implementare funzionalità equivalenti in PostgreSQL con estensioni del database, ad esempio dblink, postgres_fdw, oracle_fdw, o PL/Proxy.

È obbligatorio il refactoring avanzato delle code

Potenziale causa principale

I pacchetti Oracle Advanced Queuing (DBMS_AQ, DBMS_AQADM) non hanno equivalenti PostgreSQL e richiedono il refactoring.

Possibile mitigazione

Valuta le seguenti opzioni.

  • Esegui il refactoring della funzionalità di gestione delle code dal database al livello dell'applicazione.
  • Utilizza tabelle, avvisi e trigger PostgreSQL per implementare un comportamento equivalente.
  • Per ulteriore assistenza, contatta il rappresentante del team Technical Solutions.

È obbligatorio il refactoring delle email del database

Potenziale causa principale

AlloyDB per PostgreSQL non supporta l'invio di email direttamente dal database. Anche le estensioni che attivano questa funzionalità non sono supportate. Pertanto, Database Migration Service non converte gli utilizzi del UTL_SMTP package.

Possibile mitigazione

Esegui il refactoring del codice email del database e sposta la responsabilità dell'invio delle email al livello dell'applicazione. Puoi comunque utilizzare il database per acquisire le condizioni in cui è necessario inviare email.

Un esempio di implementazione potrebbe essere la scrittura dei dettagli delle email in una tabella dedicata. Questa tabella può fungere anche da coda di email che interroghi con una funzione Cloud Run Functions e gestisci l'elaborazione SMTP effettiva.

È obbligatorio il refactoring dei job e della pianificazione

Potenziale causa principale

I pacchetti Oracle DBMS_JOB e DBMS_SCHEDULER non vengono convertiti da Database Migration Service. Devi eseguire il refactoring del codice che fa riferimento a questi pacchetti.

Possibile mitigazione

Per i job semplici senza dipendenze, puoi creare manualmente job pianificati nel database PostgreSQL di destinazione con l'estensione pg_cron.

Per pianificazioni più complicate che pg_cron non supporta, potresti dover utilizzare uno strumento di pianificazione a livello di applicazione o di terze parti.

È obbligatorio il refactoring dell'I/O di file

Potenziale causa principale

Database Migration Service non supporta il pacchetto Oracle UTL_FILE. Devi eseguire il refactoring del codice che fa riferimento a questi pacchetti.

L'estensione Orafce include l'emulazione di UTL_FILE, ma potrebbe non funzionare in un ambiente PostgreSQL gestito da Google a causa delle funzionalità di I/O dei file limitate.

Possibile mitigazione
  • Esegui il refactoring del codice per rimuovere le dipendenze da UTL_FILE.
  • AlloyDB per PostgreSQL presenta alcune limitazioni sulle funzionalità di I/O dei file, quindi non è possibile implementare questo comportamento direttamente nel database di destinazione.

    Un'alternativa possibile potrebbe essere l'installazione di PostgreSQL con l'estensione orafce su una VM Compute Engine nel tuo VPC. Puoi quindi utilizzare l' estensione PL/Proxy nel database di destinazione per chiamare la versione UTL_FILE compatibile con PostgreSQL in esecuzione nel database sulla VM Compute Engine.

Sinonimi

Potenziale causa principale

PostgreSQL non supporta i sinonimi. Per gli oggetti di codice, Database Migration Service sostituisce automaticamente i riferimenti ai sinonimi con lo schema di origine e il nome dell'oggetto. Se utilizzi sinonimi al di fuori degli oggetti di codice, ad esempio in schemi di sola lettura per gli utenti di applicazioni di database, devi convertirli manualmente.

Possibile mitigazione

Per l'utilizzo di sinonimi al di fuori degli oggetti di codice, puoi utilizzare il parametro PostgreSQL SEARCH_PATH oppure eseguire il refactoring del codice per utilizzare le viste per gli oggetti di query.

Tabelle temporanee globali

Potenziale causa principale

Questo gruppo di problemi è un avviso che indica che Database Migration Service ha rilevato una tabella temporanea globale nel codice sorgente Oracle. La migrazione delle tabelle temporanee globali richiede l'installazione e la creazione dell'estensione PostgreSQL pgtt nel database di destinazione.

Possibile mitigazione

Ti consigliamo di verificare che l'estensione PostgreSQL pgtt sia installata e creata nel database di destinazione.

Esaminare i suggerimenti di Gemini

Potenziale causa principale:

Questo gruppo di problemi acquisisce tutti gli errori e gli avvisi generici relativi alla conversione del codice ottimizzata da Gemini.

Possibile mitigazione: i problemi riscontrati qui potrebbero non sempre indicare problemi reali, ma ti consigliamo vivamente di esaminare tutte le conversioni migliorate da Gemini per assicurarti che corrispondano alle tue aspettative.

Esaminare il codice ottimizzato con l'AI

Potenziale causa principale: questo codice DDL è stato convertito con funzionalità avanzate di Gemini e potrebbe richiedere la tua revisione per verificarne l'accuratezza.

Possibile mitigazione Ti consigliamo di esaminare attentamente il codice convertito con i miglioramenti dell'AI per assicurarti che il risultato finale corrisponda alla funzionalità dello schema di origine.

Citazioni

Potenziale causa principale: i suggerimenti avanzati con Gemini possono includere contenuti citati da più fonti. Alcune citazioni potrebbero essere soggette a limitazioni della licenza. Ti consigliamo di esaminare il codice convertito per le citazioni.

Problemi di conversione dei metadati

Potenziale causa principale:

Questo gruppo acquisisce tutti i problemi di conversione che non rientrano in altri gruppi di problemi più specifici.

Possibile mitigazione

Ti consigliamo di rivedere il codice convertito in base alla tua conoscenza delmodello dei datii di origine e di modificarlo in base alle tue esigenze.

Problemi di conversione dei metadati

Potenziale causa principale:

Questo gruppo acquisisce tutti i problemi di monitoraggio dei metadati che non rientrano in altri gruppi di problemi più specifici.

Possibile mitigazione:

Gli esempi di problemi in questo gruppo sono di solito correlati a errori o avvisi di compilazione che possono causare problemi con i tipi di dati nel PostgreSQL convertito. Ti consigliamo di rivedere il codice convertito in base alla tua conoscenza del modello dei dati di origine e correggere i riferimenti errati.

Contatta il tuo team di assistenza

Potenziale causa principale

In casi limite speciali, potresti riscontrare un errore interno con un oggetto di origine Oracle valido. In questo caso, contatta il team di assistenza per ricevere ulteriore supporto.

Problemi di conversione generali

Potenziale causa principale

Questo gruppo contiene tutti i problemi che non rientrano in altre categorie o gruppi di problemi più specifici.

Possibile mitigazione

Ti consigliamo di esaminare il codice convertito in base alla tua conoscenza del modello dei dati e del codice sorgente e di apportare le modifiche necessarie.