Riferimento a problemi e pattern di conversione

I workspace della 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 eseguire per risolvere i problemi (revisione, rifattorizzazione, 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 della conversione che mostra i gruppi e le categorie di problemi di conversione.
Figura 1. Schermata di panoramica del workspace della conversione con gruppi e categorie di problemi di conversione.
Schermata di panoramica del workspace della 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 il processo 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 codice fa riferimento a oggetti non inclusi nello schema di origine, potresti riscontrare problemi di conversione perché Database Migration Service non può 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 non corretti per i tipi definiti dall'utente (UDT) o tipi di dati VARCHAR predefiniti per colonne, parametri o variabili.

Possibile mitigazione

Assicurati che tutti gli oggetti di riferimento vengano aggiunti all'albero di origine di Database Migration Service o 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 della pseudocolonna ROWID di Oracle di origine. Per garantire che le istruzioni INSERT non abbiano esito negativo 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 una funzionalità simile 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 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 su SQLCODE che restituisce un numero intero (ad esempio, SQLCODE viene registrato solo in una colonna VARCHAR2 o con un messaggio DBMS_OUTPUT), 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 variabili NUMBER o INTEGER o salvi i valori restituiti da SQLCODE come parametri o colonne), devi rifattorizzare il codice convertito.

Funzione SQL Oracle non 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 affatto.

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, poiché il codice convertito dovrebbe funzionare allo stesso modo dopo la migrazione.
  • Se una funzione ha lo stesso nome, ma funziona in modo diverso o semplicemente 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 le conversioni ottimizzate con Gemini. Per saperne di più, consulta Converti il codice e lo schema di SQL Server con l'assistenza di Gemini.

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

Pacchetti integrati Oracle non completamente supportati

Potenziale causa principale

Database Migration Service supporta alcuni pacchetti integrati di Oracle, ma molti non hanno un supporto completo per la conversione, 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, puoi utilizzare un comando più semplice come ANALYZE.

    I 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, come Orafce. Per ulteriori informazioni sulle estensioni supportate nel database di destinazione, consulta Estensioni di database supportate.

Tipo di dati Oracle non 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 delle conversioni per personalizzare la logica di conversione e trasformare il tipo di dati Oracle non supportato nel tipo di dati PostgreSQL richiesto.

Per saperne di più sul supporto dei tipi di dati, consulta Workspace della conversione: panoramica e oggetti supportati.

Conflitto di nomi

Potenziale causa principale

Questo gruppo acquisisce i problemi in cui più oggetti del database (come tabelle, viste materializzate) vengono convertiti per utilizzare lo stesso nome nel database di destinazione. Ad esempio, questo problema può verificarsi quando hai oggetti di origine i cui nomi differiscono solo per l'uso delle maiuscole. I nomi degli oggetti Oracle non fanno distinzione tra maiuscole e minuscole, ma PostgreSQL sì, quindi i nomi degli oggetti vengono convertiti per utilizzare la stessa stringa.

Possibile mitigazione

Rinomina gli oggetti in conflitto direttamente nel database di origine o nello schema convertito nell'editor del workspace della conversione. Puoi anche utilizzare un file di mappatura delle conversioni con l'istruzione RENAME_*.

Funzionalità di origine non supportata

Potenziale causa principale

Questo gruppo acquisisce tutti i problemi generici relativi alle funzionalità di Oracle non supportate per la conversione. I problemi di 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 dello schema Oracle per la conversione del codice perché PostgreSQL non dispone di equivalenti appropriati. Tra gli esempi sono incluse le tabelle organizzate per indice (IOT), gli indici della Ricerca testuale o i corpi per i 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 normali con un vincolo di chiave primaria, gli indici di ricerca testuale 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 supportata

Potenziale causa principale

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

Possibile mitigazione

Associazione in blocco non supportata

Potenziale causa principale

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

Possibile mitigazione

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

Esistono diverse strategie per approcciare le operazioni di binding collettivo di Oracle in PostgreSQL. Il loro utilizzo dipende dallo scenario specifico, quindi ti consigliamo di utilizzare l' assistenza alla conversione basata su Gemini per gestire le tue esigenze specifiche. Ecco alcuni altri esempi di suggerimenti 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 probabilmente più semplice sarebbe utilizzare CURSOR FOR LOOP per elaborare una riga alla volta (anziché caricarle in array).
  • Per le operazioni FORALL, puoi provare il DML basato su set con UNNEST se scegli di utilizzare l'elaborazione degli array.
  • Per SAVE EXCEPTIONS, potrebbe essere necessario scrivere un gestore delle eccezioni all'interno di un CURSOR FOR LOOP basato su righe, poiché non esiste una clausola equivalente in PostgreSQL.

Raccolte non 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 gli 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 con stringhe, a seconda della natura dei dati, potresti trovare adatti JSON/JSONB o le estensioni hstore.

Funzioni con pipeline non supportate

Potenziale causa principale

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

Possibile mitigazione

Puoi sostituire le funzioni con pipeline di Oracle con le funzioni di ritorno dei set di PostgreSQL. Ti consigliamo di modificare il codice in modo che sia pertinente al tuo caso d'uso. Ecco alcuni esempi per iniziare:

  1. Fai riferimento al tipo PostgreSQL (UDT) convertito dal tipo di oggetto o record Oracle di origine che definisce il tipo di riga della funzione con pipeline. Poi, modifica la clausola return della funzione PostgreSQL in 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 con pipeline di origine, utilizzato nella clausola RETURN della funzione Oracle, non è necessario in PostgreSQL.

SQL dinamico non supportato

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, DML o DDL dinamiche effettive non vengono convertite.

Possibile mitigazione

Devi modificare il codice convertito in base alle tue esigenze. Ti consigliamo vivamente di utilizzare l' assistenza alla conversione basata su Gemini per gestire l'SQL dinamico.

Opzione CONNECT BY non supportata

Potenziale causa principale

La maggior parte degli operatori, delle funzioni e delle pseudocolonne CONNECT BY è supportata da Database Migration Service e convertita in espressioni di tabella comuni (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 potrebbe essere necessario 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, consulta Converti codice e schema Oracle con l'assistenza di Gemini.

JSON non supportato

Potenziale causa principale

Esistono alcune limitazioni nel modo in cui Database Migration Service supporta JSON per lo spostamento 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 (come JSON_TABLE, JSON_QUERY, JSON_OBJECT[AGG], JSON_ARRAYAGG, JSON_PATCH).
  • Nelle versioni di Oracle precedenti alla 21c, puoi archiviare i 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 nei datastore VARCHAR2, CLOB o BLOB in PostgreSQL, potrebbe essere necessario scrivere un file di mappatura della conversione con l'istruzione MODIFY_TYPE.

    Ad esempio:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_JSON_DATA:JSON

    Per saperne di più sui file di mappatura delle conversioni, consulta File di mappatura delle conversioni.

  • Per convertire le funzioni e gli operatori JSON di Oracle in PostgreSQL, puoi utilizzare funzioni PostgreSQL come JSONB_ARRAY_ELEMENTS, JSON_AGG. Per saperne di più, consulta 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
  • Suddividi i blocchi SAVEPOINT in Oracle in blocchi di transazioni separati in PostgreSQL che utilizzano l'istruzione ROLLBACK.
  • Per implementare DBMS_LOCK, utilizza l'estensione pg_dbms_lock di PostgreSQL. Questa estensione semplifica la migrazione dei blocchi definiti dall'utente di Oracle a PostgreSQL emulando la funzionalità del pacchetto Oracle DBMS_LOCK.

XML non supportato

Potenziale causa principale

Database Migration Service non supporta Oracle XMLTYPE o 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, segui questi passaggi:

  1. Crea un file di mappatura delle conversioni con l'istruzione MODIFY_TYPE per i dati XML. Ad esempio:

    MODIFY_TYPE SOURCE_TABLE_NAME:BLOB_COLUMN_NAME_WITH_XML_DATA:XML

    Per saperne di più 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 vengono compilate con valori NULL in PostgreSQL.
  3. Crea una tabella esterna in PostgreSQL selezionando solo la colonna XMLTYPE da Oracle. Includi la colonna della chiave primaria della 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 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)

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

  • Combinazione di un join LATERAL 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 supportata

Potenziale causa principale

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

Possibile mitigazione

Sostituisci le istruzioni Oracle ALTER 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, consulta Converti codice e schema Oracle con l'assistenza di Gemini.

Funzionalità SQL non supportata

Potenziale causa principale

Questo gruppo acquisisce tutti i problemi generici relativi alle funzionalità SQL non supportate per la conversione. I problemi di questo gruppo non rientrano in altri gruppi di problemi più specifici. Alcuni esempi includono trigger di eventi del database, istruzioni GRANT, operazioni INSERT su più tabelle, DML su viste incorporate (INSERT INTO (SELECT ... FROM ...)), 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 di questo gruppo non rientrano in altri gruppi di problemi più specifici.

Possibile mitigazione

Modifica il codice in modo da utilizzare la sintassi PostgreSQL funzionalmente equivalente. Ti consigliamo di esplorare le funzionalità di conversione automatica basate su Gemini per modificare il codice. Per ulteriori informazioni, consulta Converti codice e schema Oracle con l'assistenza di Gemini.

Sintassi SQL non supportata

Potenziale causa principale

Il codice sorgente utilizza elementi o sintassi 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 elementi o sintassi PL/SQL non supportati da Database Migration Service. Ad esempio, le istruzioni INSERT basate su record (come INSERT INTO table VALUES r_variable) e PRAGMA RESTRICT_REFERENCES non sono supportate.

Possibile mitigazione

Modifica il codice in modo da utilizzare la sintassi PostgreSQL funzionalmente equivalente. Ti consigliamo di esplorare le funzionalità di conversione automatica basate su Gemini per modificare il codice. Per ulteriori informazioni, consulta Converti codice e schema Oracle con l'assistenza di Gemini.

Sintassi di data e timestamp non supportata

Potenziale causa principale

Database Migration Service potrebbe generare errori o avvisi relativi a sintassi, operazioni o espressioni di data o timestamp non supportate. 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, consulta Informazioni sui workspace della conversione.

Possibile mitigazione

Puoi ricreare la maggior parte delle espressioni di data e timestamp utilizzando gli equivalenti di PostgreSQL. Ti consigliamo di esplorare le funzionalità di conversione automatica basate su Gemini per accelerare queste correzioni. Per ulteriori informazioni, consulta Converti codice e schema Oracle con l'assistenza 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 di 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, poiché 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, consulta Converti codice e schema Oracle con l'assistenza 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, 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 genera 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 al modello del formato 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 nel workspace della conversione.

Problemi relativi al modello 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 rifattorizzare le espressioni o i modelli di formato. Ti consigliamo di esplorare le funzionalità di conversione automatica basate su Gemini per accelerare queste correzioni. Per ulteriori informazioni, consulta Converti codice e schema Oracle con l'assistenza di Gemini.

Problemi di conversione dei tipi di dati

Potenziale causa principale

Potresti riscontrare errori dovuti a un cast del tipo di dati non supportato o impreciso. Database Migration Service di solito genera ERROR_UNIMPLEMENTED. In genere, questo accade a causa di metadati mancanti o incompleti. Database Migration Service potrebbe non disporre di informazioni sufficienti per eseguire il cast di un tipo, ad esempio negli argomenti delle funzioni o nei parametri delle procedure.

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 di 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, consulta Converti codice e schema Oracle con l'assistenza di Gemini.

I problemi in 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ò accade a causa delle differenze nel modo in cui Oracle e PostgreSQL gestiscono i tipi di dati, i formati o gli oggetti.

A prima vista, questa categoria potrebbe sembrare sovrapporsi ai problemi della 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 il modello del formato data

Potenziale causa principale

La maggior parte dei modelli di formato di data e timestamp di Oracle ha equivalenti appropriati in PostgreSQL, pertanto 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 il modello del formato numerico

Potenziale causa principale

La maggior parte dei modelli di formato numerico di origine ha un equivalente in PostgreSQL, pertanto il codice convertito non presenta 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 mantiene le ultime 3 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, ma ERROR: division by zero in PostgreSQL.

Possibile mitigazione

Se la tua applicazione, l'infrastruttura di assistenza o la documentazione dipendono dal testo dell'errore, esamina 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 delle funzioni Oracle con equivalenti PostgreSQL, ma i risultati potrebbero non essere sempre soddisfacenti per il tuo scenario. Pertanto, i workspace della conversione forniscono sempre un avviso di consulenza con le conversioni di funzioni che potrebbero richiedere la tua revisione.

Possibile mitigazione

Ti consigliamo di esaminare gli oggetti in cui i workspace della 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 dei tipi di dati non corrispondenti tra gli oggetti principali e secondari (ad esempio, quando una colonna principale è NUMBER(4) e la colonna secondaria è NUMBER(10)).

Possibile mitigazione

La maggior parte delle volte, lievi mancate corrispondenze dei 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 incoerenze.

È 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 di 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 segnalare 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 di queste estensioni vengono eseguite in una sessione diversa e, di conseguenza, generano una transazione autonoma.

È obbligatorio il refactoring dei link al database

Potenziale causa principale

Database Migration Service non supporta i link ai 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, come 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 in PostgreSQL e richiedono il refactoring.

Possibile mitigazione

Valuta le seguenti opzioni.

  • Rifattorizza la funzionalità di accodamento dal database al livello dell'applicazione.
  • Utilizza tabelle, avvisi e trigger PostgreSQL per implementare un comportamento equivalente.
  • Per ulteriore assistenza, consulta il tuo 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 pacchetto UTL_SMTP.

Possibile mitigazione

Rifattorizza il 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 l'email.

Un esempio di implementazione potrebbe essere la scrittura dei dettagli dell'email in una tabella dedicata. Questa tabella può anche fungere da coda email di cui esegui il polling con una funzione Cloud Run Functions e gestire 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 rifattorizzare il codice che fa riferimento a questi pacchetti.

Possibile mitigazione

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

Per pianificazioni più complicate non supportate da pg_cron, potrebbe essere necessario utilizzare uno scheduler 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 UTL_FILE Oracle. Devi rifattorizzare il 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 di funzionalità di I/O dei file limitate.

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

    Una possibile alternativa potrebbe essere installare 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 eseguita nel database sulla VM di 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 negli schemi di sola lettura per gli utenti delle applicazioni di database, devi convertirli manualmente.

Possibile mitigazione

Per l'utilizzo dei sinonimi al di fuori degli oggetti di codice, puoi utilizzare il parametro SEARCH_PATH di PostgreSQL o rifattorizzare il codice per utilizzare le viste per gli oggetti di query.

È obbligatorio il refactoring delle 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 pgtt PostgreSQL nel database di destinazione.

Possibile mitigazione

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

Esamina i suggerimenti di Gemini

Potenziale causa principale:

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

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

Esamina il codice amplificato con l'AI

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

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

Citazioni

Potenziale causa principale: i suggerimenti migliorati con Gemini possono includere contenuti citati da più fonti. Alcune citazioni potrebbero essere soggette a limitazioni di licenza. Ti consigliamo di esaminare il codice convertito per verificare la presenza di 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 esaminare il codice convertito in base alla tua conoscenza del modello dei dati di origine e di modificarlo in base alle 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 solitamente correlati a errori o avvisi di compilazione che possono causare problemi con i tipi di dati nel PostgreSQL convertito. Ti consigliamo di esaminare il codice convertito in base alla tua conoscenza del modello dei dati di origine e di modificare 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 di origine e di apportare le modifiche necessarie.