Limitazioni della conversione dello schema da Oracle ad Database di Azure per PostgreSQL Flexible Server

Questo articolo descrive le limitazioni note, gli oggetti non supportati e le considerazioni sulla migrazione quando si usa la funzionalità di conversione dello schema da Oracle ad Database di Azure per PostgreSQL in Visual Studio Code.

Limitazioni del supporto della piattaforma

  • ARM64: non supportato in Windows o Linux.

Oggetti non supportati e parzialmente supportati

Le sezioni seguenti elencano gli oggetti Oracle che lo strumento non converte o che converte con una differenza di comportamento che è necessario gestire. Gli oggetti che vengono convertiti in modo pulito non sono elencati qui.

Queste tabelle descrivono il risultato tipico per ogni classe oggetto. Un singolo oggetto può comunque richiedere attenzione quando usa un costrutto che non esegue la conversione, ad esempio una funzione che chiama una routine Java, quindi il report per oggetto dall'esecuzione della conversione è autorevole per lo schema.

Il sistema Oracle e gli schemi predefiniti non vengono estratti o convertiti. Sono inclusi schemi come SYS, SYSTEM, XDB, MDSYS, CTXSYSe WMSYS.

Note

Gli oggetti estratti dallo strumento ma non possono essere completamente convertiti vengono aggiunti al report di conversione dello schema come attività di revisione. È possibile risolvere queste attività manualmente o con l'assistenza per la modalità agente Copilot di GitHub.

Output segnaposto

Quando lo strumento non è in grado di produrre una conversione funzionante per un oggetto, genera una DDL ottimale o segnaposto anziché eliminare l'oggetto. Il segnaposto mantiene il nome e la firma dell'originale in modo che gli oggetti che dipendono da esso siano ancora convertiti e distribuiti. Questo approccio impedisce a un numero ridotto di oggetti problema di bloccare il resto dello schema.

Un segnaposto non è funzionale. Il report di conversione dello schema contrassegna ogni oggetto che riceve uno in base alle esigenze prima della distribuzione. Gli oggetti che dipendono da un segnaposto possono anche essere mantenuti dallo script di distribuzione generato, in modo che una singola routine non convertita possa influire su diversi altri oggetti.

Le cause più comuni sono:

  • Transazioni autonome. Le routine che usano PRAGMA AUTONOMOUS_TRANSACTION sono la causa singola più grande. La conversione instrada il lavoro autonomo tramite dblink, quindi se dblink non è installato nella destinazione quando si esegue la conversione, queste routine reback all'output segnaposto. Anche le routine il cui corpo non è un semplice INSERT seguito da COMMITo che contengono un gestore eccezioni o un'istruzione MERGE , richiedono anche una revisione manuale.
  • Non è stato possibile risolvere un riferimento allo strumento. Un oggetto che fa riferimento a un altro oggetto che lo strumento non è stato convertito o convertito in un'unità di lavoro diversa, non può essere verificato dalla compilazione.
  • Istruzioni di controllo delle transazioni. I costrutti, ROLLBACK TO SAVEPOINT ad esempio, non vengono sempre convertiti in modo pulito.
  • PL/SQL di cui è stato eseguito il wrapping. Questi producono sempre un segnaposto. Per altre informazioni, vedere Wrapped PL/SQL.

Oggetti programmabili

Tipo di oggetto Limitation Cosa fare
Corpo del pacchetto Lo stato del pacchetto viene mappato alle variabili di sessione di PostgreSQL, quindi lo stato che persiste tra le chiamate non si comporta come un'istanza del pacchetto Oracle. Verificare che lo stato condiviso si comporti come previsto dall'applicazione.
Routine che usa PRAGMA AUTONOMOUS_TRANSACTION Il lavoro autonomo viene eseguito su una connessione separata tramite dblink, quindi esegue il commit indipendentemente dal chiamante e non viene eseguito il rollback se il chiamante non riesce. Diverse forme del corpo richiedono una revisione manuale. Eseguire l'installazione dblink prima della conversione, quindi esaminare ogni routine per verificare che questa differenza sia accettabile.
Trigger (evento di sistema) Lo strumento riconosce solo LOGON e LOGOFF come sottotipi di evento di sistema. STARTUPI trigger , SHUTDOWNe SERVERERROR non vengono classificati come trigger di eventi di sistema, in modo che possano passare alla conversione e produrre output che non funzionano in PostgreSQL. Esaminare l'origine per questi trigger e riapplicare la logica all'esterno del database.
Trigger (cross-edition) La ridefinizione basata su edizione non viene rilevata. Un trigger tra edizioni viene convertito in un trigger ordinario, quindi viene attivato per ogni sessione anziché solo per la manipolazione dei dati che interseca le edizioni. Convertire una singola edizione e gestire l'implementazione della versione nel processo di rilascio.
Corpo del tipo Non estratto. Reimplement dei metodi di tipo oggetto come funzioni PostgreSQL.
origine Java, stored procedure Java e classe Java Non estratto. Database di Azure per PostgreSQL server flessibile non può eseguire Java nel database. Riscrivere la logica in PL/pgSQL o spostarla nel livello applicazione.
Libreria C esterna (CREATE LIBRARY) Non estratto. Riscrivere la logica in PL/pgSQL o spostarla nel livello applicazione.
PL/SQL di cui è stato eseguito il wrapping Il corpo non può essere letto, quindi viene prodotto solo un segnaposto. Per altre informazioni, vedere Wrapped PL/SQL. Specificare l'origine originale di cui è stato annullato il wrapping e convertirla di nuovo.

PL/SQL di cui è stato eseguito il wrapping

Lo strumento non è in grado di leggere l'origine delle unità PL/SQL archiviate in formato incapsulato (offuscato) usando l'utilità Oracle wrap o DBMS_DDL.WRAP. Lo strumento rileva queste unità, legge i metadati della firma dal dizionario dati Oracle e genera una routine PostgreSQL con lo stesso nome e firma e un corpo che genera un errore quando viene chiamato.

Questo segnaposto consente agli oggetti che dipendono dalla conversione e dalla distribuzione dell'unità di cui è stato eseguito il wrapping. La routine generata non contiene logica e il report di conversione dello schema elenca ogni oggetto sottoposto a wrapping come attività di revisione che è necessario risolvere prima di passare in tempo reale.

Per convertire correttamente un'unità di cui è stato eseguito il wrapping, specificare l'origine originale di cui è stato eseguito il wrapping ed eseguire di nuovo la conversione.

Oggetti di dati e archiviazione

Tipo di oggetto Limitation Cosa fare
Operatore definito dall'utente (CREATE OPERATOR) La conversione non è garantita e può produrre output segnaposto. Esaminare l'operatore generato e testarlo.
Indice (bitmap, bitmap join, partizionamento globale o dominio) Non estratto. PostgreSQL non usa gli indici bitmap o di dominio Oracle. In genere non esiste alcuna azione funzionale. Ottimizzare le query sensibili alle prestazioni nella destinazione.
Log delle viste materializzate (MLOG$) Non estratto. Niente. Si tratta di oggetti di supporto per l'aggiornamento Oracle non necessari per PostgreSQL.
Tabella esterna Non estratto. Database di Azure per PostgreSQL server flessibile non ha accesso al file system del server, pertanto file_fdw non è disponibile. Caricare il file in una tabella con un lato \copy client o COPY ... FROM STDIN, con l'estensione o tramite l'applicazione azure_storage .
Tabella Di accodamento avanzato (AQ) Non estratto. Accodamento avanzato Oracle include la logica dell'applicazione. Riprogettarla con una coda di applicazioni, un'estensione PostgreSQL o un servizio di messaggistica Azure.
Tabella blockchain Non estratto. Riapplicare il requisito di integrità nel livello dell'applicazione.
Cluster e cluster hash Non estratto. Ricreare come tabella normale o partizionata.
Oggetto Directory (CREATE DIRECTORY) Non estratto. Gestire l'accesso ai file nel livello applicazione.
Tipo di indice definito dall'utente (CREATE INDEXTYPE) Non estratto. Ricreare il metodo di accesso con un indice di estensione PostgreSQL in cui ne esiste uno.
Collegamento al database Non convertito. Per altre informazioni, vedere Collegamenti di database. Ricreare con un wrapper di dati esterno.
Contesto dell'applicazione (CREATE CONTEXT, DBMS_SESSION.SET_CONTEXT) Non estratto. Eseguire il mapping del contesto alle impostazioni della sessione postgreSQL e leggerle con current_setting().
Visualizzazione analitica, dimensione degli attributi, gerarchia, dimensione OLAP, modello di data mining e mappa della zona materializzata Non estratto. Non hanno una destinazione PostgreSQL. Ricompilare l'output necessario come visualizzazioni o funzioni oppure eliminarlo.
Clausola di archiviazione LOB, XML Schema registrato (DBMS_XMLSCHEMA.REGISTERSCHEMA) e indice associato a XML Schema Non estratto. Modellare nuovamente il requisito di archiviazione o convalida nella destinazione.
Resource Manager piano e gruppo di consumer, profilo SQL, baseline del piano SQL, edizione, profilo di traduzione SQL, criteri di gestione del ciclo di vita delle informazioni, profilo di blocco e oggetto Workspace Manager Non estratto. Si tratta di un'istanza oracle, un'ottimizzazione o artefatti del ciclo di vita che non rientrano nell'ambito. Ricrearli a livello di applicazione o infrastruttura o rilasciarli in Database di Azure per PostgreSQL.

Lo strumento non converte automaticamente i collegamenti di database privati e pubblici (CREATE DATABASE LINK, CREATE PUBLIC DATABASE LINK). I collegamenti di database archiviano le credenziali e le informazioni sull'endpoint remoto che non vengono convertite direttamente in PostgreSQL.

Ricreare questi collegamenti nella destinazione usando un wrapper di dati esterni PostgreSQL, ad postgres_fdw esempio o oracle_fdw, o effettuare il refactoring per le connessioni a livello di applicazione. Cercare riferimenti nell'origine Oracle in @link modo da trovare tutte le dipendenze, inclusi i riferimenti all'interno di sinonimi e viste.

Oggetti di sicurezza e identità

Gli utenti, i ruoli, i privilegi e i criteri di protezione dei dati rappresentano il divario maggiore nella conversione. Lo strumento converte gli oggetti dello schema, non il livello di sicurezza intorno a essi. Considerare questa area come flusso di lavoro manuale separato e pianificarla dall'inventario di origine Oracle anziché dal report di conversione dello schema.

Tipo di oggetto Limitation Cosa fare
User Non estratto. Effettuare il provisioning degli account di accesso separatamente in Azure. Ricreare ogni utente come ruolo PostgreSQL e convalidare l'accesso risultante prima di passare in tempo reale.
Ruolo Non estratto. Ricreare ogni ruolo nella destinazione.
Privilegio di sistema Non estratto. Ricreare come istruzioni PostgreSQL GRANT .
Appartenenza al ruolo Non estratto. Ricreare come GRANT <role> TO <role> istruzioni.
Privilegio e concessione di oggetti L'estrazione delle concessioni è disattivata per impostazione predefinita e copre solo le concessioni di oggetti. Ricreare le concessioni dall'inventario di origine, quindi convalidarle.
Sicurezza a livello di riga e database privato virtuale (DBMS_RLS) Non convertito. Ricreare i criteri come criteri di sicurezza a livello di riga postgreSQL.
Sicurezza delle etichette Oracle Non convertito. Riprogettare i limiti di accesso ai dati nella destinazione.
Redaction dei dati (DBMS_REDACT) Non convertito. Riapplicare la maschera sulla destinazione, nel livello dell'applicazione o con un equivalente PostgreSQL.
Profilo, criteri password e criteri di controllo unificati o con granularità fine (DBMS_FGA, AUDIT POLICY) Non estratto. Configurare i parametri e il controllo del server Azure equivalenti e gestirli come infrastruttura come codice.

Importante

Lo strumento non esegue la sicurezza a livello di riga, il database privato virtuale, oracle label security e i criteri di redaction dei dati. Uno schema convertito distribuisce e restituisce dati senza di essi, in modo che le righe filtrate da Oracle siano visibili e le colonne che Oracle masked vengano restituite in testo non crittografato. Ricreare questi criteri e verificarli prima di instradare il traffico di produzione alla destinazione.

Oggetti utilità di pianificazione

Lo strumento non converte i metadati dell'utilità di pianificazione Oracle in pianificazioni PostgreSQL funzionanti.

Tipo di oggetto Limitation Cosa fare
DBMS_SCHEDULER processo e pianificazione Non convertito. Ricreare la pianificazione nella destinazione con pg_crono usare un'utilità di pianificazione esterna, ad esempio App per la logica di Azure o Funzioni di Azure.
Processo legacy DBMS_JOB Non rilevato. Ricreare la pianificazione con pg_cron o un'utilità di pianificazione dell'applicazione.
Programma, catena, credenziali, file watcher, classe di processo, gruppo, finestra e processo basato su eventi Non convertito. Ricompilare l'orchestrazione in un'utilità di pianificazione esterna.

Gap a livello di funzionalità

Gli elementi seguenti sono funzionalità Oracle anziché tipi di oggetto. Lo strumento non rileva queste funzionalità o li converte in un modo che perde parte del comportamento originale, quindi non vengono sempre visualizzati come attività di revisione.

Feature Limitation Cosa fare
Tabella partizionata ibrida (Oracle 19.3 e versioni successive) Converte come tabella normale e le partizioni esterne andranno perse. Identificare le tabelle partizionate ibride nell'origine e caricare i dati esterni separatamente.
Visualizzazione dell'edizione e trigger tra edizioni La ridefinizione basata su edizione non viene rilevata. Una visualizzazione di edizione viene convertita come visualizzazione normale. Convertire un'edizione, quindi gestire manualmente l'implementazione della versione.
Tabella non modificabile (Oracle 19.11 e versioni successive) Non rilevato e non esiste alcun equivalente postgreSQL. Applicare il requisito nel livello dell'applicazione o con i trigger.
Archivio dati Flashback La cronologia temporale non è modellata. Usare un modello di tabella della cronologia o un'estensione temporale nella destinazione.
Query flashback (AS OF TIMESTAMP, AS OF SCN) Non convertito. Riscrivere le query che leggono versioni cronologiche di una riga.
Partizionamento orizzontale oracle Non modellato e non esiste un database singolo equivalente a PostgreSQL. Riprogettare la strategia di distribuzione.
BFILE e specifiche line-of-business secureFile Gestito solo come nota generica sui tipi esotici. Esaminare il modello di archiviazione e di accesso per ogni colonna.

Le colonne Identity, le colonne virtuali e generate, le colonne invisibili e le tabelle temporanee globali vengono gestite dal convertitore e non sono limitazioni. Le tabelle temporanee private esistono solo in fase di esecuzione, quindi non vengono visualizzate nell'inventario di origine.

Come ottenere assistenza

Quando si riscontrano limitazioni:

  1. Use GitHub agente Copilot mode per assistenza guidata con le attività di revisione.
  2. Per le implementazioni alternative, vedere la documentazione di PostgreSQL.
  3. Consulta le procedure consigliate per i pattern di migrazione da Oracle ad Database di Azure per PostgreSQL.
  4. Eseguire il test in un ambiente scratch prima di eseguire la distribuzione nell'ambiente di produzione.