Begränsningar för schemakonvertering från Oracle till Azure Database for PostgreSQL Flexibel server

Den här artikeln sammanfattar de kända begränsningarna, objekt som inte stöds och överväganden vid migrering när du använder funktionen för schemakonvertering från Oracle till Azure Database for PostgreSQL i Visual Studio Code.

Begränsningar för plattformsstöd

  • ARM64: Stöds inte på Windows eller Linux.

Objekt som inte stöds och som delvis stöds

I följande avsnitt visas Oracle-objekt som verktyget inte konverterar, eller som konverteras med en beteendeskillnad som du behöver hantera. Objekt som konverterar rent visas inte här.

De här tabellerna beskriver det typiska resultatet för varje objektklass. Ett enskilt objekt kan fortfarande behöva uppmärksamhet när det använder en konstruktion som inte konverteras, till exempel en funktion som anropar en Java rutin, så rapporten per objekt från din egen konverteringskörning är auktoritativ för ditt schema.

Oracle-system och inbyggda scheman extraheras eller konverteras inte. Detta inkluderar scheman som SYS, SYSTEM, XDB, MDSYS, CTXSYSoch WMSYS.

Note

Objekt som verktyget extraherar men inte kan konvertera helt läggs till i schemakonverteringsrapporten som granskningsuppgifter. Du kan lösa dessa uppgifter manuellt eller med hjälp av GitHub Copilot-agent läge.

Platshållarutdata

När verktyget inte kan skapa en fungerande konvertering för ett objekt genererar det bästa möjliga arbete eller platshållar-DDL i stället för att släppa objektet. Platshållaren behåller originalets namn och signatur så att objekt som är beroende av den fortfarande konverteras och distribueras. Den här metoden förhindrar att ett litet antal problemobjekt blockerar resten av schemat.

En platshållare fungerar inte. Schemakonverteringsrapporten flaggar varje objekt som tar emot ett objekt som behöver granskas innan du distribuerar. Objekt som är beroende av en platshållare kan också hållas tillbaka från det genererade distributionsskriptet, så en enda okonverterad rutin kan påverka flera andra objekt.

Det här är de vanligaste orsakerna:

  • Autonoma transaktioner. Rutiner som använder PRAGMA AUTONOMOUS_TRANSACTION är den största enskilda orsaken. Konverteringen dirigerar det autonoma arbetet genom dblink, så om dblink inte är installerat på målet när du konverterar återgår dessa rutiner till platshållarutdata. Rutiner vars brödtext inte är enkel INSERT följt av COMMIT, eller som innehåller en undantagshanterare eller en MERGE instruktion, behöver också manuell granskning.
  • Det gick inte att matcha en referens som verktyget inte kunde matcha. Ett objekt som refererar till ett annat objekt som verktyget inte konverterade, eller som det konverterade i en annan arbetsenhet, kan inte kompileras-verifieras.
  • Transaktionskontrollinstruktioner. Konstruktioner som ROLLBACK TO SAVEPOINT konverterar inte alltid rent.
  • Omsluten PL/SQL. Dessa skapar alltid en platshållare. Mer information finns i Omsluten PL/SQL.

Programmerbara objekt

Objekttyp Limitation Vad du bör göra
Pakettext Pakettillstånd mappar till PostgreSQL-sessionsvariabler, så tillstånd som bevaras mellan anrop fungerar inte på samma sätt som en Oracle-paketinstans. Testa att delat tillstånd fungerar som programmet förväntar sig.
Rutin som använder PRAGMA AUTONOMOUS_TRANSACTION Det autonoma arbetet körs på en separat anslutning via dblink, så det checkas in oberoende av anroparen och återställs inte om anroparen misslyckas. Flera kroppsformer behöver granskas manuellt. Installera dblink innan du konverterar och granska sedan varje rutin för att bekräfta att den här skillnaden är acceptabel.
Utlösare (systemhändelse) Verktyget identifierar endast LOGON och LOGOFF som systemhändelseundertyper. STARTUP, SHUTDOWN, och SERVERERROR utlösare klassificeras inte som systemhändelseutlösare, så de kan skickas till konvertering och generera utdata som inte fungerar på PostgreSQL. Granska källan för dessa utlösare och omimplementering av logiken utanför databasen.
Utlösare (flera versioner) Versionsbaserad omdefiniering har inte identifierats. En utlösare för flera utgåvor konverteras till en vanlig utlösare, så den utlöses för varje session i stället för endast för datamanipulering som korsar utgåvor. Konvertera en enskild utgåva och hantera versionsdistributionen i versionsprocessen.
Skriv brödtext Inte extraherad. Omimplementering av objekttypsmetoder som PostgreSQL-funktioner.
Java källa, Java lagrad procedur och Java klass Inte extraherad. Azure Database for PostgreSQL flexibel server kan inte köra Java i databasen. Skriv om logiken i PL/pgSQL eller flytta den till programlagret.
Externt C-bibliotek (CREATE LIBRARY) Inte extraherad. Skriv om logiken i PL/pgSQL eller flytta den till programlagret.
Omsluten PL/SQL Brödtexten kan inte läsas, så endast en platshållare skapas. Mer information finns i Omsluten PL/SQL. Ange den ursprungliga oöppnade källan och konvertera igen.

Omsluten PL/SQL

Verktyget kan inte läsa källan till PL/SQL-enheter som lagras i omslutna (fördunklade) formulär med hjälp av Oracle-verktyget wrap eller DBMS_DDL.WRAP. Verktyget identifierar dessa enheter, läser deras signaturmetadata från Oracle-dataordlistan och genererar en PostgreSQL-rutin som har samma namn och signatur och en brödtext som genererar ett fel när det anropas.

Med den här platshållaren kan objekt som är beroende av den omslutna enheten konvertera och distribuera. Den genererade rutinen innehåller ingen logik och schemakonverteringsrapporten visar alla omslutna objekt som en granskningsuppgift som du måste lösa innan du går live.

Om du vill konvertera en omsluten enhet korrekt anger du den ursprungliga oöppnade källan och kör konverteringen igen.

Data- och lagringsobjekt

Objekttyp Limitation Vad du bör göra
Användardefinierad operator (CREATE OPERATOR) Konverteringen är inte garanterad och kan generera platshållarutdata. Granska den genererade operatorn och testa den.
Index (bitmapp, bitmappskoppling, global partitionerad eller domän) Inte extraherad. PostgreSQL använder inte Oracle-bitmappar eller domänindex. Det finns vanligtvis ingen funktionell åtgärd. Justera prestandakänsliga frågor på målet.
Materialiserad vylogg (MLOG$) Inte extraherad. Ingenting. Det här är Oracle-uppdateringsstödobjekt som PostgreSQL inte behöver.
Extern tabellen Inte extraherad. Azure Database for PostgreSQL flexibel server har ingen serverfilsystemåtkomst, så file_fdw den är inte tillgänglig. Läs in filen i en tabell med en klientsida \copy eller COPY ... FROM STDIN, med azure_storage tillägget eller via ditt program.
Tabellen Advanced Queuing (AQ) Inte extraherad. Oracle Advanced Queuing har programlogik. Gör om den med en programkö, ett PostgreSQL-tillägg eller en Azure meddelandetjänst.
Blockkedjetabell Inte extraherad. Omimplementering av integritetskravet i programskiktet.
Kluster- och hash-kluster Inte extraherad. Återskapa som en oformaterad eller partitionerad tabell.
Katalogobjekt (CREATE DIRECTORY) Inte extraherad. Hantera filåtkomst i programlagret.
Användardefinierad indextyp (CREATE INDEXTYPE) Inte extraherad. Återskapa åtkomstmetoden med ett PostgreSQL-tilläggsindex där det finns ett.
Databaslänk Inte konverterad. Mer information finns i Databaslänkar. Återskapa med en sekundär dataomslutning.
Programkontext (CREATE CONTEXT, DBMS_SESSION.SET_CONTEXT) Inte extraherad. Mappa kontexten till PostgreSQL-sessionsinställningar och läs dem med current_setting().
Analysvy, attributdimension, hierarki, OLAP-dimension, datautvinningsmodell och materialiserad zonkarta Inte extraherad. Dessa har inget PostgreSQL-mål. Återskapa de nödvändiga utdata som vyer eller funktioner, eller släpp dem.
LOB-lagringssats, registrerat XML-schema (DBMS_XMLSCHEMA.REGISTERSCHEMA) och XML-schemabundet index Inte extraherad. Återskapa lagrings- eller valideringskravet för målet.
Resource Manager plan- och konsumentgrupp, SQL-profil, SQL-planbaslinje, utgåva, SQL-översättningsprofil, Policy för hantering av informationslivscykel, låsningsprofil och Workspace Manager-objekt Inte extraherad. Det här är Oracle-instanser, optimerare eller livscykelartefakter som ligger utanför omfånget. Återskapa dem på program- eller infrastrukturlagret eller släpp dem på Azure Database for PostgreSQL.

Verktyget konverterar inte automatiskt privata och offentliga databaslänkar (CREATE DATABASE LINK, CREATE PUBLIC DATABASE LINK). Databaslänkar lagrar autentiseringsuppgifter och fjärrslutpunktsinformation som inte översätts direkt till PostgreSQL.

Återskapa dessa länkar på målet med hjälp av en PostgreSQL-sekundär dataomslutning, till exempel postgres_fdw eller oracle_fdw, eller omstrukturera till anslutningar på programnivå. Sök efter referenser i Oracle-källan @link så att du hittar alla beroenden, inklusive referenser i synonymer och vyer.

Säkerhets- och identitetsobjekt

Användare, roller, privilegier och dataskyddsprinciper är den största klyftan i konverteringen. Verktyget konverterar schemaobjekt, inte säkerhetsskiktet runt dem. Behandla det här området som en separat manuell arbetsström och planera det från oracle-källinventeringen i stället för från schemakonverteringsrapporten.

Objekttyp Limitation Vad du bör göra
User Inte extraherad. Etablera inloggningar separat på Azure. Återskapa varje användare som en PostgreSQL-roll och verifiera den resulterande åtkomsten innan du går live.
Role Inte extraherad. Återskapa varje roll på målet.
Systembehörighet Inte extraherad. Återskapa som PostgreSQL-instruktioner GRANT .
Rollmedlemskap Inte extraherad. Återskapa som GRANT <role> TO <role> -instruktioner.
Objektprivilegier och bevilja Beviljandeextrahering är inaktiverat som standard och omfattar endast objektbidrag. Återskapa bidrag från källinventeringen och verifiera dem sedan.
Säkerhet på radnivå och virtuell privat databas (DBMS_RLS) Inte konverterad. Återskapa principerna som PostgreSQL-säkerhetsprinciper på radnivå.
Säkerhet för Oracle-etikett Inte konverterad. Designa om dataåtkomstgränserna på målet.
Dataredigering (DBMS_REDACT) Inte konverterad. Återappning av maskering på målet, i programskiktet eller med en PostgreSQL-motsvarighet.
Profil, lösenordsprincip och enhetlig eller detaljerad granskningsprincip (DBMS_FGA, AUDIT POLICY) Inte extraherad. Konfigurera motsvarande Azure serverparametrar och granskning och hantera dem som infrastruktur som kod.

Important

Verktyget överför inte säkerhet på radnivå, virtuell privat databas, Oracle Label Security och dataredigeringsprinciper. Ett konverterat schema distribuerar och returnerar data utan dem, så rader som Oracle filtrerat visas och kolumner som Oracle maskerade returneras i klartext. Återskapa dessa principer och verifiera dem innan du dirigerar produktionstrafiken till målet.

Scheduler-objekt

Verktyget konverterar inte Oracle Scheduler-metadata till fungerande PostgreSQL-scheman.

Objekttyp Limitation Vad du bör göra
DBMS_SCHEDULER jobb och schema Inte konverterad. Återskapa schemat på målet med pg_croneller använd en extern schemaläggare som Azure Logic Apps eller Azure Functions.
Äldre DBMS_JOB jobb Har inte identifierats. Återskapa schemat med pg_cron eller en programschemaläggare.
Program, kedja, autentiseringsuppgifter, filbevakare, jobbklass, grupp, fönster och händelsebaserat jobb Inte konverterad. Återskapa orkestreringen i en extern schemaläggare.

Luckor på funktionsnivå

Följande objekt är Oracle-funktioner snarare än objekttyper. Verktyget identifierar antingen inte dessa funktioner eller konverterar dem på ett sätt som förlorar en del av det ursprungliga beteendet, så att de inte alltid visas som en granskningsuppgift.

Feature Limitation Vad du bör göra
Hybridpartitionerad tabell (Oracle 19.3 och senare) Konverterar som en vanlig tabell och de externa partitionerna går förlorade. Identifiera hybridpartitionerade tabeller i källan och läs in externa data separat.
Versionsvy och utlösare för flera utgåvor Versionsbaserad omdefiniering har inte identifierats. En versionsvy konverteras som en oformaterad vy. Konvertera en utgåva och hantera sedan versionsdistributionen manuellt.
Oföränderlig tabell (Oracle 19.11 och senare) Har inte identifierats och det finns ingen PostgreSQL-motsvarighet. Framtvinga kravet i programskiktet eller med utlösare.
Flashback-dataarkiv Tidshistoriken är inte modellerad. Använd ett historiktabellmönster eller ett tidsmässigt tillägg på målet.
Flashback-fråga (AS OF TIMESTAMP, AS OF SCN) Inte konverterad. Skriv om frågor som läser historiska versioner av en rad.
Oracle-sharding Inte modellerad och det finns ingen PostgreSQL-motsvarighet med en databas. Gör om distributionsstrategin.
BFILE och SecureFile LOB-detaljer Hanteras endast som en allmän anteckning om exotiska typer. Granska lagrings- och åtkomstmönstret för varje kolumn.

Identitetskolumner, virtuella och genererade kolumner, osynliga kolumner och globala temporära tabeller hanteras av konverteraren och är inte begränsningar. Privata temporära tabeller finns bara vid körning, så de visas inte i källinventeringen.

Få hjälp

När du stöter på begränsningar:

  1. Använd GitHub Copilot-agent-läge för guidad hjälp med granskningsuppgifter.
  2. I PostgreSQL-dokumentationen finns alternativa implementeringar.
  3. Läs om bästa praxis för migreringsmönster från Oracle till Azure Database for PostgreSQL.
  4. Testa i en scratch-miljö innan du distribuerar till produktion.