Behandeln Sie anonyme Blöcke in dynamischen SQL Anweisungen in Aurora Postgre SQL - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Behandeln Sie anonyme Blöcke in dynamischen SQL Anweisungen in Aurora Postgre SQL

Erstellt von anuradha chintha () AWS

Umgebung: PoC oder Pilotprojekt

Quelle: Database Relational

Ziel: Postgre SQL

R-Typ: Re-Architect

Arbeitslast: Oracle; Open Source

Technologien: Datenbanken; Migration

AWSDienstleistungen: Amazon Aurora; Amazon RDS

Übersicht

Dieses Muster zeigt Ihnen, wie Sie den Fehler vermeiden können, der beim Umgang mit anonymen Blöcken in dynamischen SQL Anweisungen auftritt. Sie erhalten eine Fehlermeldung, wenn Sie das AWS Schema Conversion Tool verwenden, um eine Oracle-Datenbank in eine Aurora SQL Postgre-Compatible Edition-Datenbank zu konvertieren. Um den Fehler zu vermeiden, müssen Sie den Wert einer OUT Bind-Variablen kennen, aber Sie können den Wert einer OUT Bind-Variablen erst kennen, nachdem Sie die SQL Anweisung ausgeführt haben. Der Fehler ist darauf zurückzuführen, dass das AWS Schema Conversion Tool (AWSSCT) die Logik innerhalb der SQL Dynamic-Anweisung nicht versteht. AWSSCTkann die dynamische SQL Anweisung nicht in SQL PL/Code (d. h. Funktionen, Prozeduren und Pakete) konvertieren.

Voraussetzungen und Einschränkungen

Voraussetzungen

Architektur

Quelltechnologie-Stack

  • Lokale Oracle-Datenbank 10g und neuere Version

Zieltechnologie-Stack

  • Amazon Aurora Aurora-Postfach SQL

  • Amazon RDS für Postgre SQL

  • AWSSchema Conversion Tool (AWSSCT)

Architektur der Migration

Das folgende Diagramm zeigt, wie Sie mithilfe AWS SCT von OUT Oracle-Bind-Variablen Ihren Anwendungscode nach eingebetteten SQL Anweisungen durchsuchen und den Code in ein kompatibles Format konvertieren, das eine Aurora-Datenbank verwenden kann.

Architekturdiagramm für die Verwendung AWS SCT und OUT Oracle-Bind-Variablen

Das Diagramm zeigt den folgenden Workflow:

  1. Generieren Sie einen AWS SCT Bericht für die Quelldatenbank, indem Sie Aurora Postgre SQL als Zieldatenbank verwenden.

  2. Identifizieren Sie den anonymen Block im dynamischen SQL Codeblock (für den der AWS SCT Fehler aufgetreten ist).

  3. Konvertieren Sie den Codeblock manuell und stellen Sie den Code in einer Zieldatenbank bereit.

Tools

AWSDienste

  • Amazon Aurora SQL Postgre-Compatible Edition ist eine vollständig verwaltete, ACID konforme relationale Datenbank-Engine, die Sie bei der Einrichtung, dem Betrieb und der Skalierung von Postgre-Bereitstellungen unterstützt. SQL

  • Amazon Relational Database Service (AmazonRDS) for Oracle unterstützt Sie bei der Einrichtung, dem Betrieb und der Skalierung einer relationalen Oracle-Datenbank in der AWS Cloud.

  • AWSDas Schema Conversion Tool (AWSSCT) hilft Ihnen dabei, heterogene Datenbankmigrationen vorhersehbar zu machen, indem das Quelldatenbankschema und ein Großteil der Datenbankcodeobjekte automatisch in ein mit der Zieldatenbank kompatibles Format konvertiert werden.

Andere Tools

  • pgAdminermöglicht es Ihnen, eine Verbindung zu Ihrem Datenbankserver herzustellen und mit ihm zu interagieren.

  • Oracle SQL Developer ist eine integrierte Entwicklungsumgebung, mit der Sie Datenbanken in Oracle Database entwickeln und verwalten können. Sie können entweder SQL*Plus oder Oracle SQL Developer für dieses Muster verwenden.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine Oracle-Instanz auf Amazon RDS oder AmazonEC2.

Informationen zum Erstellen einer Oracle-DB-Instance auf Amazon RDS finden Sie in der RDS Amazon-Dokumentation unter Eine Oracle-DB-Instance erstellen und eine Verbindung zu einer Datenbank auf einer Oracle-DB-Instance herstellen.

Informationen zum Erstellen einer Oracle-DB-Instance auf Amazon Elastic Compute Cloud (AmazonEC2) finden Sie unter Amazon EC2 for Oracle in der AWS Prescriptive Guidance-Dokumentation.

DBA

Erstellen Sie ein Datenbankschema und Objekte für die Migration.

Sie können Amazon Cloud Directory verwenden, um ein Datenbankschema zu erstellen. Weitere Informationen finden Sie in der Cloud Directory Directory-Dokumentation unter Schema erstellen.

DBA

Konfigurieren Sie Sicherheitsgruppen für eingehenden und ausgehenden Datenverkehr.

Informationen zum Erstellen und Konfigurieren von Sicherheitsgruppen finden Sie unter Steuern des Zugriffs mit Sicherheitsgruppen in der RDS Amazon-Dokumentation.

DBA

Vergewissern Sie sich, dass die Datenbank läuft.

Informationen zum Überprüfen des Status Ihrer Datenbank finden Sie in der RDSAmazon-Dokumentation unter RDS Amazon-Ereignisse anzeigen.

DBA
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine Aurora SQL Postgre-Instanz in AmazonRDS.

Informationen zum Erstellen einer Aurora SQL Postgre-Instance finden Sie unter Erstellen eines DB-Clusters und Herstellen einer Verbindung zu einer Datenbank auf einem Aurora SQL Postgre-DB-Cluster in der RDS Amazon-Dokumentation.

DBA

Konfigurieren Sie eine Sicherheitsgruppe für eingehenden und ausgehenden Datenverkehr.

Informationen zum Erstellen und Konfigurieren von Sicherheitsgruppen finden Sie in der Aurora-Dokumentation unter Gewähren des Zugriffs auf den DB-Cluster in der VPC durch Erstellen einer Sicherheitsgruppe.

DBA

Vergewissern Sie sich, dass die Aurora SQL Postgre-Datenbank läuft.

Informationen zum Überprüfen des Status Ihrer Datenbank finden Sie unter RDSAmazon-Ereignisse anzeigen in der Aurora-Dokumentation.

DBA
AufgabeBeschreibungErforderliche Fähigkeiten

Connect AWS SCT zur Quelldatenbank her.

Informationen AWS SCT zum Herstellen einer Verbindung mit Ihrer Quelldatenbank finden Sie in der AWS SCT Dokumentation unter Verbindung mit Postgre SQL als Quelle herstellen.

DBA

Connect AWS SCT zur Zieldatenbank her.

Informationen AWS SCT zur Verbindung mit Ihrer Zieldatenbank finden Sie unter Was ist das AWS Schema Conversion Tool? im Benutzerhandbuch für das AWS Schema Conversion Tool.

DBA

Konvertieren Sie das Datenbankschema in AWS SCT und speichern Sie den automatisch konvertierten Code als SQL Datei.

Informationen zum Speichern AWS SCT konvertierter Dateien finden Sie unter Speichern und Anwenden des konvertierten AWS Schemas AWS SCT im Schema Conversion Tool User Guide.

DBA
AufgabeBeschreibungErforderliche Fähigkeiten

Holen Sie sich die SQL Datei für die manuelle Konvertierung.

Rufen Sie in der AWS SCT konvertierten Datei die SQL Datei ab, für die eine manuelle Konvertierung erforderlich ist.

DBA

Aktualisieren Sie das Skript.

Aktualisieren Sie die SQL Datei manuell.

DBA

Zugehörige Ressourcen

Zusätzliche Informationen

Der folgende Beispielcode zeigt, wie die Oracle-Quelldatenbank konfiguriert wird:

CREATE or replace PROCEDURE calc_stats_new1 ( a NUMBER, b NUMBER, result out NUMBER) IS BEGIN result:=a+b; END; /
set serveroutput on ; DECLARE a NUMBER := 4; b NUMBER := 7; plsql_block VARCHAR2(100); output number; BEGIN plsql_block := 'BEGIN calc_stats_new1(:a, :b,:output); END;'; EXECUTE IMMEDIATE plsql_block USING a, b,out output; DBMS_OUTPUT.PUT_LINE('output:'||output); END;

Der folgende Beispielcode zeigt, wie die Aurora SQL Postgre-Zieldatenbank konfiguriert wird:

w integer, x integer) RETURNS integer AS $BODY$ DECLARE begin return w + x ; end; $BODY$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION test_pg.init() RETURNS void AS $BODY$ BEGIN if aws_oracle_ext.is_package_initialized ('test_pg' ) then return; end if; perform aws_oracle_ext.set_package_initialized ('test_pg' ); PERFORM aws_oracle_ext.set_package_variable('test_pg', 'v_output', NULL::INTEGER); PERFORM aws_oracle_ext.set_package_variable('test_pg', 'v_status', NULL::text); END; $BODY$ LANGUAGE plpgsql; DO $$ declare v_sql text; v_output_loc int; a integer :=1; b integer :=2; BEGIN perform test_pg.init(); --raise notice 'v_sql %',v_sql; execute 'do $a$ declare v_output_l int; begin select * from test_pg.calc_stats_new1('||a||','||b||') into v_output_l; PERFORM aws_oracle_ext.set_package_variable(''test_pg'', ''v_output'', v_output_l) ; end; $a$' ; v_output_loc := aws_oracle_ext.get_package_variable('test_pg', 'v_output'); raise notice 'v_output_loc %',v_output_loc; END ; $$