Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel werden die bekannten Einschränkungen, nicht unterstützten Objekte und Migrationsüberlegungen zusammengefasst, wenn Sie das Oracle zum Azure Database for PostgreSQL Schemakonvertierungsfeature in Visual Studio Code verwenden.
Einschränkungen der Plattformunterstützung
- ARM64: Wird auf Windows oder Linux nicht unterstützt.
Nicht unterstützte und teilweise unterstützte Objekte
In den folgenden Abschnitten werden Oracle-Objekte aufgeführt, die das Tool nicht konvertiert oder mit einem Verhaltensunterschied konvertiert wird, den Sie behandeln müssen. Objekte, die sauber konvertiert werden, werden hier nicht aufgeführt.
In diesen Tabellen wird das typische Ergebnis für jede Objektklasse beschrieben. Ein einzelnes Objekt kann immer noch Aufmerksamkeit benötigen, wenn es ein Konstrukt verwendet, das nicht konvertiert wird, z. B. eine Funktion, die eine Java Routine aufruft, sodass der Bericht pro Objekt aus Ihrem eigenen Konvertierungslauf autoritativ für Ihr Schema ist.
Oracle-System und integrierte Schemas werden nicht extrahiert oder konvertiert. Dazu gehören Schemas wie SYS, , SYSTEM, XDB, MDSYS, und CTXSYSWMSYS.
Note
Objekte, die das Tool extrahiert, aber nicht vollständig konvertieren können , werden dem Schemakonvertierungsbericht als Überprüfungsaufgaben hinzugefügt. Sie können diese Aufgaben manuell oder mit GitHub-Copilot-Agent Modusunterstützung auflösen.
Platzhalterausgabe
Wenn das Tool keine funktionierende Konvertierung für ein Objekt erzeugen kann, gibt es best-effort oder Platzhalter-DDL aus, anstatt das Objekt zu löschen. Der Platzhalter behält den Namen und die Signatur des Originals bei, sodass Objekte, die davon abhängen, weiterhin konvertiert und bereitgestellt werden. Dieser Ansatz verhindert, dass eine kleine Anzahl von Problemobjekten den Rest des Schemas blockiert.
Ein Platzhalter ist nicht funktionsfähig. Der Schemakonvertierungsbericht kennzeichnet jedes Objekt, das ein Objekt empfängt, da vor der Bereitstellung eine Überprüfung erforderlich ist. Objekte, die von einem Platzhalter abhängen, können auch vom generierten Bereitstellungsskript zurückgehalten werden, sodass sich eine einzelne nicht konvertierte Routine auf mehrere andere Objekte auswirken kann.
Folgende Ursachen sind am häufigsten anzutreffen:
- Autonome Transaktionen. Routinen, die verwendet
PRAGMA AUTONOMOUS_TRANSACTIONwerden, sind die größte einzelne Ursache. Die Konvertierung leitet die autonome Arbeit durchdblink. Wenndblinkdies bei der Konvertierung nicht auf dem Ziel installiert ist, greifen diese Routinen auf die Platzhalterausgabe zurück. Routinen, deren Textkörper nicht einfachINSERTgefolgtCOMMITist oder einen Ausnahmehandler oder eineMERGEAnweisung enthalten, benötigen auch eine manuelle Überprüfung. - Ein Verweis auf das Tool konnte nicht aufgelöst werden. Ein Objekt, das auf ein anderes Objekt verweist, das das Tool nicht konvertiert hat oder in einer anderen Arbeitseinheit konvertiert wurde, kann nicht kompiliert werden.
- Transaktionssteuerungsanweisungen. Konstrukte, z
ROLLBACK TO SAVEPOINT. B. nicht immer sauber konvertieren. - Umschlossene PL/SQL. Diese erzeugen immer einen Platzhalter. Weitere Informationen finden Sie unter Wrapped PL/SQL.
Programmierbare Objekte
| Objekttyp | Einschränkung | Was zu tun ist |
|---|---|---|
| Pakettext | Der Paketstatus wird den PostgreSQL-Sitzungsvariablen zugeordnet, sodass sich der Zustand, der über Aufrufe hinweg beibehalten wird, nicht wie eine Oracle-Paketinstanz verhält. | Testen Sie, dass sich der freigegebene Zustand wie erwartet verhält. |
Routine, die verwendet PRAGMA AUTONOMOUS_TRANSACTION |
Die autonome Arbeit wird über eine separate Verbindung dblinkausgeführt, sodass sie unabhängig vom Aufrufer ausgeführt wird und nicht zurückgesetzt wird, wenn der Aufrufer fehlschlägt. Mehrere Körperformen müssen manuell überprüft werden. |
Installieren Sie dblink vor der Konvertierung, und überprüfen Sie dann jede Routine, um zu bestätigen, dass dieser Unterschied akzeptabel ist. |
| Trigger (Systemereignis) | Das Tool erkennt nur LOGON und LOGOFF als Systemereignisuntertypen.
STARTUP, SHUTDOWNund SERVERERROR Trigger werden nicht als Systemereignistrigger klassifiziert, sodass sie in Konvertierung übergeben und Ausgabe erzeugen können, die nicht für PostgreSQL funktioniert. |
Überprüfen Sie die Quelle für diese Trigger, und fügen Sie die Logik außerhalb der Datenbank erneut ein. |
| Trigger (cross-edition) | Die editionbasierte Neudefinition wird nicht erkannt. Ein cross-edition-Trigger wird in einen normalen Trigger konvertiert, sodass er für jede Sitzung statt nur für Datenmanipulation ausgelöst wird, die Editionen überschreitet. | Konvertieren Sie eine einzelne Edition, und behandeln Sie den Versionsrollout in Ihrem Releaseprozess. |
| Textkörper eingeben | Nicht extrahiert. | Reimplement object-type methods as PostgreSQL functions. |
| Java Quelle, Java gespeicherte Prozedur und Java Klasse | Nicht extrahiert. Azure Database for PostgreSQL flexible Server kann Java in der Datenbank nicht ausführen. | Schreiben Sie die Logik in PL/pgSQL um, oder verschieben Sie sie auf die Anwendungsschicht. |
Externe C-Bibliothek (CREATE LIBRARY) |
Nicht extrahiert. | Schreiben Sie die Logik in PL/pgSQL um, oder verschieben Sie sie auf die Anwendungsschicht. |
| Umschlossenes PL/SQL | Der Textkörper kann nicht gelesen werden, sodass nur ein Platzhalter erzeugt wird. Weitere Informationen finden Sie unter Wrapped PL/SQL. | Geben Sie die ursprüngliche unverwappte Quelle an, und konvertieren Sie sie erneut. |
Umschlossenes PL/SQL
Das Tool kann die Quelle von PL/SQL-Einheiten nicht lesen, die mithilfe des Oracle-Hilfsprogramms oder DBMS_DDL.WRAPdes Oracle-Hilfsprogramms wrap in umschlossener Form (verschleiert) gespeichert sind. Das Tool erkennt diese Einheiten, liest ihre Signaturmetadaten aus dem Oracle-Datenwörterbuch und generiert eine PostgreSQL-Routine mit demselben Namen und derselben Signatur und einem Textkörper, der einen Fehler auslöst, wenn er aufgerufen wird.
Mit diesem Platzhalter können Objekte, die von der umschlossenen Einheit konvertiert und bereitgestellt werden, abhängig sein. Die generierte Routine enthält keine Logik, und der Schemakonvertierungsbericht listet jedes umschlossene Objekt als Überprüfungsaufgabe auf, die Sie auflösen müssen, bevor Sie live gehen.
Um eine umschlossene Einheit ordnungsgemäß zu konvertieren, geben Sie die ursprüngliche entwrappte Quelle an, und führen Sie die Konvertierung erneut aus.
Daten- und Speicherobjekte
| Objekttyp | Einschränkung | Was zu tun ist |
|---|---|---|
Benutzerdefinierter Operator (CREATE OPERATOR) |
Die Konvertierung ist nicht garantiert und kann eine Platzhalterausgabe erzeugen. | Überprüfen Sie den generierten Operator, und testen Sie ihn. |
| Index (Bitmap, Bitmapbeitritt, globale Partitionierung oder Domäne) | Nicht extrahiert. PostgreSQL verwendet keine Oracle-Bitmap- oder Domänenindizes. | In der Regel gibt es keine funktionale Aktion. Optimieren Sie leistungsabhängige Abfragen für das Ziel. |
Materialisiertes Ansichtsprotokoll (MLOG$) |
Nicht extrahiert. | Nichts. Dies sind Oracle-Aktualisierungsunterstützungsobjekte, die PostgreSQL nicht benötigt. |
| Externe Tabelle | Nicht extrahiert. Azure Database for PostgreSQL flexiblen Server hat keinen Serverdateisystemzugriff, ist also file_fdw nicht verfügbar. |
Laden Sie die Datei in eine Tabelle mit einer clientseitigen \copy oder COPY ... FROM STDIN, mit der azure_storage Erweiterung oder über Ihre Anwendung. |
| Advanced Queuing (AQ)-Tabelle | Nicht extrahiert. Oracle Advanced Queuing trägt Anwendungslogik. | Entwerfen Sie sie mit einer Anwendungswarteschlange, einer PostgreSQL-Erweiterung oder einem Azure Messagingdienst neu. |
| Blockchain-Tabelle | Nicht extrahiert. | Reimplementieren Sie die Integritätsanforderung in der Anwendungsschicht. |
| Cluster und Hashcluster | Nicht extrahiert. | Erstellen Sie sie als einfache oder partitionierte Tabelle neu. |
Directory-Objekt (CREATE DIRECTORY) |
Nicht extrahiert. | Behandeln des Dateizugriffs auf der Anwendungsebene. |
Benutzerdefinierter Indextyp (CREATE INDEXTYPE) |
Nicht extrahiert. | Erstellen Sie die Access-Methode mit einem PostgreSQL-Erweiterungsindex neu, in dem vorhanden ist. |
| Datenbanklink | Nicht konvertiert. Weitere Informationen finden Sie unter Datenbanklinks. | Erstellen Sie es mit einem Fremddatenwrapper neu. |
Anwendungskontext (CREATE CONTEXT, DBMS_SESSION.SET_CONTEXT) |
Nicht extrahiert. | Ordnen Sie den Kontext den Einstellungen der PostgreSQL-Sitzung zu, und lesen Sie sie mit current_setting(). |
| Analyseansicht, Attributdimension, Hierarchie, OLAP-Dimension, Data Mining-Modell und materialisierte Zonenzuordnung | Nicht extrahiert. Diese haben kein PostgreSQL-Ziel. | Erstellen Sie die erforderliche Ausgabe als Ansichten oder Funktionen neu, oder legen Sie sie ab. |
LOB-Speicherklausel, registriertes XML-Schema (DBMS_XMLSCHEMA.REGISTERSCHEMA) und XML-schemagebundener Index |
Nicht extrahiert. | Modellieren Sie die Speicher- oder Validierungsanforderung für das Ziel neu. |
| Resource Manager Plan- und Consumergruppe, SQL-Profil, SQL-Planbasisplan, Edition, SQL-Übersetzungsprofil, Informationslebenszyklus-Verwaltungsrichtlinie, Sperrmodusprofil und Workspace Manager-Objekt | Nicht extrahiert. Dabei handelt es sich um Oracle-Instanzen, Optimierer oder Lebenszyklusartefakte, die außerhalb des Gültigkeitsbereichs liegen. | Erstellen Sie sie auf der Anwendungs- oder Infrastrukturebene neu, oder legen Sie sie auf Azure Database for PostgreSQL ab. |
Datenbanklinks
Das Tool konvertiert nicht automatisch private und öffentliche Datenbanklinks (CREATE DATABASE LINK, CREATE PUBLIC DATABASE LINK). Datenbanklinks speichern Anmeldeinformationen und Remoteendpunktinformationen, die nicht direkt in PostgreSQL übersetzt werden.
Erstellen Sie diese Links auf dem Ziel neu, indem Sie einen PostgreSQL-Fremddatenwrapper wie postgres_fdw oder oracle_fdwoder umgestalten zu Verbindungen auf Anwendungsebene. Durchsuchen Sie Ihre Oracle-Quelle nach @link Verweisen, sodass Sie jede Abhängigkeit finden, einschließlich Verweise innerhalb von Synonymen und Ansichten.
Sicherheits- und Identitätsobjekte
Benutzer, Rollen, Berechtigungen und Datenschutzrichtlinien sind die größte Lücke bei der Konvertierung. Das Tool konvertiert Schemaobjekte, nicht die Sicherheitsebene um sie herum. Behandeln Sie diesen Bereich als separaten manuellen Arbeitsablauf, und planen Sie ihn aus Ihrem Oracle-Quellbestand statt aus dem Schemakonvertierungsbericht.
| Objekttyp | Einschränkung | Was zu tun ist |
|---|---|---|
| Benutzer | Nicht extrahiert. | Stellen Sie Anmeldungen separat auf Azure bereit. Erstellen Sie jeden Benutzer als PostgreSQL-Rolle neu, und überprüfen Sie den resultierenden Zugriff, bevor Sie live gehen. |
| Role | Nicht extrahiert. | Erstellen Sie jede Rolle im Ziel neu. |
| Systemberechtigungen | Nicht extrahiert. | Erstellen Sie als PostgreSQL-Anweisungen GRANT neu. |
| Rollenmitgliedschaft | Nicht extrahiert. | Erstellen Sie als Anweisungen neu GRANT <role> TO <role> . |
| Objektberechtigungen und -erteilung | Die Zuweisungsextraktion ist standardmäßig deaktiviert und deckt nur Objekterteilungen ab. | Erstellen Sie Zuschüsse aus Ihrem Quellbestand neu, und überprüfen Sie sie. |
Sicherheit auf Zeilenebene und virtuelle private Datenbank (DBMS_RLS) |
Nicht konvertiert. | Erstellen Sie die Richtlinien als Sicherheitsrichtlinien auf Zeilenebene von PostgreSQL neu. |
| Oracle Label Security | Nicht konvertiert. | Entwerfen Sie die Datenzugriffsgrenzen für das Ziel neu. |
Datenrotaktion (DBMS_REDACT) |
Nicht konvertiert. | Reapply masking on the target, in the application layer or with a PostgreSQL equivalent. |
Profil-, Kennwortrichtlinie und einheitliche oder differenzierte Überwachungsrichtlinie (DBMS_FGA, AUDIT POLICY) |
Nicht extrahiert. | Konfigurieren Sie die entsprechenden Azure Serverparameter und -überwachung, und verwalten Sie sie als Infrastruktur als Code. |
Important
Das Tool übernimmt keine Sicherheitsrichtlinien auf Zeilenebene, virtuelle private Datenbank, Oracle Label Security und Datenaktualisierungsrichtlinien. Ein konvertiertes Schema stellt Daten bereit und gibt sie zurück, sodass zeilen, die von Oracle gefiltert werden, sichtbar sind und Spalten, die Oracle maskiert haben, im Klartext zurückgegeben werden. Erstellen Sie diese Richtlinien neu, und überprüfen Sie sie, bevor Sie den Produktionsdatenverkehr an das Ziel weiterleiten.
Schedulerobjekte
Das Tool konvertiert oracle scheduler-Metadaten nicht in funktionierende PostgreSQL-Zeitpläne.
| Objekttyp | Einschränkung | Was zu tun ist |
|---|---|---|
DBMS_SCHEDULER Auftrag und Zeitplan |
Nicht konvertiert. | Erstellen Sie den Zeitplan für das Ziel neu, pg_cronoder verwenden Sie einen externen Planer wie Azure Logic Apps oder Azure Functions. |
Legacyauftrag DBMS_JOB |
Nicht erkannt. | Erstellen Sie den Zeitplan mit pg_cron oder einem Anwendungsplaner neu. |
| Programm, Kette, Anmeldeinformationen, Dateiüberwachung, Auftragsklasse, Gruppe, Fenster und ereignisbasierter Auftrag | Nicht konvertiert. | Erstellen Sie die Orchestrierung in einem externen Planer neu. |
Lücken auf Featureebene
Die folgenden Elemente sind Oracle-Features anstelle von Objekttypen. Das Tool erkennt diese Features nicht oder konvertiert sie auf eine Weise, die einen Teil des ursprünglichen Verhaltens verliert, sodass sie nicht immer als Überprüfungsaufgabe angezeigt werden.
| Funktion | Einschränkung | Was zu tun ist |
|---|---|---|
| Hybridpartitionierte Tabelle (Oracle 19.3 und höher) | Konvertiert als gewöhnliche Tabelle, und die externen Partitionen gehen verloren. | Identifizieren Sie hybride partitionierte Tabellen in der Quelle, und laden Sie die externen Daten separat. |
| Ausgabeansicht und Auslöser für die Edition | Die editionbasierte Neudefinition wird nicht erkannt. Eine Editionsansicht wird als einfache Ansicht konvertiert. | Konvertieren Sie eine Edition, und behandeln Sie dann den Versionsrollout manuell. |
| Unveränderliche Tabelle (Oracle 19.11 und höher) | Nicht erkannt, und es gibt keine PostgreSQL-Entsprechung. | Erzwingen Sie die Anforderung auf der Anwendungsebene oder mit Triggern. |
| Flashback-Datenarchiv | Die zeitliche Geschichte ist nicht modelliert. | Verwenden Sie ein Verlaufstabellenmuster oder eine zeitliche Erweiterung für das Ziel. |
Flashbackabfrage (AS OF TIMESTAMP, AS OF SCN) |
Nicht konvertiert. | Schreiben Sie Abfragen neu, die historische Versionen einer Zeile lesen. |
| Oracle Sharding | Nicht modelliert, und es gibt keine Single-Database PostgreSQL-Entsprechung. | Entwerfen Sie die Verteilungsstrategie neu. |
BFILE und SecureFile-Branchenspezifische Angaben |
Behandelt nur als generische Notiz zu exotischen Typen. | Überprüfen Sie das Speicher- und Zugriffsmuster für jede Spalte. |
Identitätsspalten, virtuelle und generierte Spalten, unsichtbare Spalten und globale temporäre Tabellen werden vom Konverter behandelt und sind keine Einschränkungen. Private temporäre Tabellen sind nur zur Laufzeit vorhanden, sodass sie nicht im Quellbestand angezeigt werden.
Hilfe erhalten
Beim Auftreten von Einschränkungen:
- Verwenden Sie den GitHub Copilot-Agentmodus für geführte Unterstützung bei Überprüfungsaufgaben.
- Consult PostgreSQL documentation for alternative implementations.
- Informieren Sie sich über bewährte Methoden für Oracle-zu-Azure Database for PostgreSQL-Migrationsmuster.
- Testen Sie in einer Entwurfsumgebung , bevor Sie sie in der Produktion bereitstellen.