Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Migrer les variables de OUT liaison Oracle vers une base de données Postgre SQL
Créé par Bikash Chandra Rout (AWS) et Vinay Paladi () AWS
Environnement : PoC ou pilote | Source : Base de données relationnelle | Cible : RDS /Aurora Postgresql |
Type R : Replateforme | Charge de travail : Oracle | Technologies : bases de données ; migration |
AWSservices : Amazon Aurora ; Amazon RDS ; AWS SCT |
Récapitulatif
Ce modèle montre comment migrer les variables de OUT
liaison de base de données Oracle vers l'un des services de AWS base de données SQL compatibles Postgre suivants :
Amazon Relational Database Service (RDSAmazon) pour Postgre SQL
Édition compatible avec Amazon Aurora Postgre SQL
Postgre SQL ne prend pas en charge les variables de OUT
liaison. Pour obtenir les mêmes fonctionnalités dans vos instructions Python, vous pouvez créer une SQL fonction PL/pg personnalisée qui utilise plutôt les variables de SET
package GET
et. Pour appliquer ces variables, l'exemple de script de fonction wrapper fourni dans ce modèle utilise un pack d'extension AWS Schema Conversion Tool (AWSSCT).
Remarque : Si l'EXECUTE IMMEDIATE
instruction Oracle est une SELECT
instruction qui peut renvoyer une ligne au maximum, il est recommandé de procéder comme suit :
Insérez des variables de
OUT
liaison (définitions) dans laINTO
clauseInsérez des variables de
IN
liaison dans laUSING
clause
Pour plus d'informations, consultez la EXECUTEIMMEDIATEdéclaration
Conditions préalables et limitations
Prérequis
Un AWS compte actif
Une base de données source Oracle Database 10g (ou plus récente) dans un centre de données sur site
Une instance de base de données Amazon RDS for Postgre ou une SQL instance
de base de données SQLcompatible avec Aurora Postgre
Architecture
Pile technologique source
Base de données Oracle Database 10g (ou version ultérieure) sur site
Pile technologique cible
Une instance de base de données Amazon RDS for Postgre ou une SQL instance de base de données SQL compatible avec Aurora Postgre
Architecture cible
Le schéma suivant montre un exemple de flux de travail pour la migration de variables de OUT
liaison Oracle Database vers une base de données compatible PostgreSQL. AWS
Le schéma suivant illustre le flux de travail suivant :
AWSSCTconvertit le schéma de base de données source et la majorité du code personnalisé dans un format compatible avec la base de données SQL compatible AWS Postgre cible.
Tous les objets de base de données qui ne peuvent pas être convertis automatiquement sont signalés par la fonction PL/pGSQL. Les objets marqués sont ensuite convertis manuellement pour terminer la migration.
Outils
Amazon Aurora Postgre SQL -Compatible Edition est un moteur de base de données relationnelle entièrement géré ACID et conforme qui vous aide à configurer, exploiter et dimensionner les déploiements Postgre. SQL
Amazon Relational Database Service (RDSAmazon) pour SQL Postgre vous aide à configurer, exploiter et dimensionner une base de données relationnelle SQL Postgre dans le cloud. AWS
AWSSchema Conversion Tool (AWSSCT) prend en charge les migrations de bases de données hétérogènes en convertissant automatiquement le schéma de base de données source et la majorité du code personnalisé dans un format compatible avec la base de données cible.
pgAdmin
est un outil de gestion open source pour SQL Postgre. Il fournit une interface graphique qui vous permet de créer, de gérer et d'utiliser des objets de base de données.
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Connectez-vous à votre base de données SQL compatible AWS Postgre. | Après avoir créé votre instance de base de données, vous pouvez utiliser n'importe quelle application SQL client standard pour vous connecter à une base de données de votre cluster de bases de données. Par exemple, vous pouvez l'utiliser pgAdmin Pour plus d'informations, consultez l'une des rubriques suivantes :
| Ingénieur en migration |
Ajoutez l'exemple de script de fonction wrapper issu de ce modèle au schéma principal de la base de données cible. | Copiez l'exemple de script de fonction d'SQLemballage PL/pG depuis la section Informations supplémentaires de ce modèle. Ajoutez ensuite la fonction au schéma principal de la base de données cible. Pour plus d'informations, consultez CREATEFUNCTION | Ingénieur en migration |
(Facultatif) Mettez à jour le chemin de recherche dans le schéma principal de la base de données cible afin d'inclure le schéma Test_PG. | Pour améliorer les performances, vous pouvez mettre à jour la variable Postgre SQL search_path afin qu'elle inclue le nom du schéma Test_PG. Si vous incluez le nom du schéma dans le chemin de recherche, il n'est pas nécessaire de le spécifier chaque fois que vous appelez la fonction PL/pGSQL. Pour plus d'informations, consultez la section 5.9.3 Le chemin de recherche du schéma | Ingénieur en migration |
Ressources connexes
OUTlier des variables
(documentation Oracle) Améliorez les performances des SQL requêtes en utilisant des variables de liaison
(Oracle Blog)
Informations supplémentaires
Exemple de fonction PL/pG SQL
/* Oracle */ CREATE or replace PROCEDURE test_pg.calc_stats_new1 ( a NUMBER, b NUMBER, result out NUMBER ) IS BEGIN result:=a+b; END; / /* Testing */ set serveroutput on DECLARE a NUMBER := 4; b NUMBER := 7; plsql_block VARCHAR2(100); output number; BEGIN plsql_block := 'BEGIN test_pg.calc_stats_new1(:a, :b,:output); END;'; EXECUTE IMMEDIATE plsql_block USING a, b,out output; -- calc_stats(a, a, b, a) DBMS_OUTPUT.PUT_LINE('output:'||output); END; output:11 PL/SQL procedure successfully completed. --Postgres-- /* Example : 1 */ CREATE OR REPLACE FUNCTION test_pg.calc_stats_new1( w integer, x integer ) RETURNS integer AS $BODY$ begin return w + x ; end; $BODY$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION aws_oracle_ext.set_package_variable( package_name name, variable_name name, variable_value anyelement ) RETURNS void LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$ begin perform set_config ( format( '%s.%s',package_name, variable_name ) , variable_value::text , false ); end; $BODY$; CREATE OR REPLACE FUNCTION aws_oracle_ext.get_package_variable_record( package_name name, record_name name ) RETURNS text LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$ begin execute 'select ' || package_name || '$Init()'; return aws_oracle_ext.get_package_variable ( package_name := package_name , variable_name := record_name || '$REC' ); end; $BODY$; --init()-- 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; /* callable for 1st Example */ 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 ; $$ /*In above Postgres example we have set the value of v_output using v_output_l in the dynamic anonymous block to mimic the behaviour of oracle out-bind variable .*/ --Postgres Example : 2 -- CREATE OR REPLACE FUNCTION test_pg.calc_stats_new2( w integer, x integer, inout status text, out result integer) AS $BODY$ DECLARE begin result := w + x ; status := 'ok'; end; $BODY$ LANGUAGE plpgsql; /* callable for 2nd Example */ DO $$ declare v_sql text; v_output_loc int; v_staus text:= 'no'; a integer :=1; b integer :=2; BEGIN perform test_pg.init(); execute 'do $a$ declare v_output_l int; v_status_l text; begin select * from test_pg.calc_stats_new2('||a||','||b||','''||v_staus||''') into v_status_l,v_output_l; PERFORM aws_oracle_ext.set_package_variable(''test_pg'', ''v_output'', v_output_l) ; PERFORM aws_oracle_ext.set_package_variable(''test_pg'', ''v_status'', v_status_l) ; end; $a$' ; v_output_loc := aws_oracle_ext.get_package_variable('test_pg', 'v_output'); v_staus := aws_oracle_ext.get_package_variable('test_pg', 'v_status'); raise notice 'v_output_loc %',v_output_loc; raise notice 'v_staus %',v_staus; END ; $$