Procédures stockées externes pour Amazon RDS for Db2 - Amazon Relational Database Service

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.

Procédures stockées externes pour Amazon RDS for Db2

Vous pouvez créer des routines externes et les enregistrer dans vos bases de données Amazon RDS for Db2 en tant que procédures stockées externes. Actuellement, RDS for Db2 ne prend en charge que les routines basées sur Java pour les procédures stockées externes.

Procédures stockées externes basées sur Java

Les procédures stockées externes basées sur Java sont des routines Java externes que vous enregistrez dans votre base de données RDS for Db2 en tant que procédures stockées externes.

Limites pour les procédures stockées externes basées sur Java

Avant de développer votre routine externe, tenez compte des limites et restrictions suivantes.

Pour créer votre routine externe, assurez-vous d’utiliser le kit de développement Java (JDK) fourni par Db2. Pour plus d’informations, consultez Support logiciel Java pour les produits de base de données Db2..

Votre programme Java peut créer des fichiers uniquement dans le répertoire /tmp et Amazon RDS ne prend pas en charge l’activation des autorisations d’exécution ou de définition d’un identifiant utilisateur (SUID) sur ces fichiers. Votre programme Java ne peut pas non plus utiliser les appels système socket ou les appels système suivants :

  • _sysctl

  • acct

  • afs_syscall

  • bpf

  • capset

  • chown

  • chroot

  • create_module

  • delete_module

  • fanotify_init

  • fanotify_mark

  • finit_module

  • fsconfig

  • fsopen

  • fspick

  • get_kernel_syms

  • getpmsg

  • init_module

  • mount

  • move_mount

  • nfsservctl

  • open_by_handle_at

  • open_tree

  • pivot_root

  • putpmsg

  • query_module

  • quotactl

  • reboot

  • security

  • setdomainname

  • setfsuid

  • sethostname

  • sysfs

  • tuxcall

  • umount2

  • uselib

  • ustat

  • vhangup

  • vserver

Pour des restrictions supplémentaires sur les routines externes pour Db2, consultez Restrictions sur les routines externes dans la documentation IBM Db2.

Configuration des procédures stockées externes basées sur Java

Pour configurer une procédure stockée externe, créez un fichier .jar avec votre routine externe, installez-le sur votre base de données RDS for Db2, puis enregistrez-le en tant que procédure stockée externe.

Étape 1 : activation des procédures stockées externes

Pour activer des procédures stockées externes, dans un groupe de paramètres personnalisés associé à votre instance de base de données, définissez le paramètre db2_alternate_authz_behaviour sur l’une des valeurs suivantes :

  • EXTERNAL_ROUTINE_DBADM : accorde implicitement à tout utilisateur, groupe ou rôle ayant l’autorité DBADM l’autorisation CREATE_EXTERNAL_ROUTINE.

  • EXTERNAL_ROUTINE_DBAUTH : permet à un utilisateur ayant l’autorité DBADM d’accorder des autorisations CREATE_EXTERNAL_ROUTINE à tout utilisateur, groupe ou rôle. Dans ce cas, aucun utilisateur, groupe ou rôle ne reçoit implicitement cette autorisation, pas même un utilisateur ayant l’autorité DBADM.

Pour plus d’informations sur ce paramètre, consultez l’instruction GRANT (autorités de base de données) dans la documentation IBM Db2.

Vous pouvez créer et modifier un groupe de paramètres personnalisés à l’aide de la AWS Management Console, de l’AWS CLI ou de l’API Amazon RDS.

Configuration du paramètre db2_alternate_authz_behaviour dans un groupe de paramètres personnalisé
  1. Si vous souhaitez utiliser un groupe de paramètres de base de données personnalisé différent de celui que votre instance de base de données utilise, créez un nouveau groupe de paramètres de base de données. Si vous utilisez le modèle Apportez votre propre licence (BYOL), assurez-vous que le nouveau groupe de paramètres personnalisés inclut les identifiants IBM. Pour plus d’informations sur ces identifiants, consultez Identifiants IBM pour Apportez votre propre licence (BYOL) pour Db2. Pour plus d’informations sur la création d’un groupe de paramètres de base de données, consultez Création d’un groupe de paramètres de base de données dans Amazon RDS.

  2. Définissez la valeur du paramètre db2_alternate_authz_behaviour dans votre groupe de paramètres personnalisés. Pour plus d’informations sur la modification d’un groupe de paramètres, consultez Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS.

Configuration du paramètre db2_alternate_authz_behaviour dans un groupe de paramètres personnalisé
  1. Si vous souhaitez utiliser un groupe de paramètres de base de données personnalisé différent de celui que votre instance de base de données utilise, créez un groupe de paramètres personnalisés en exécutant la commande create-db-parameter-group. Si vous utilisez le modèle Apportez votre propre licence (BYOL), assurez-vous que le nouveau groupe de paramètres personnalisés inclut les identifiants IBM. Pour plus d’informations sur ces identifiants, consultez Identifiants IBM pour Apportez votre propre licence (BYOL) pour Db2.

    Inclure les options requises suivantes :

    • --db-parameter-group-name : nom du groupe de paramètres que vous créez.

    • --db-parameter-group-family : édition et version majeure du moteur Db2. Les valeurs valides sont db2-se-11.5 et db2-ae-11.5.

    • --description : description de ce groupe de paramètres.

    Pour plus d’informations sur la création d’un groupe de paramètres de base de données, consultez Création d’un groupe de paramètres de base de données dans Amazon RDS.

    L’exemple suivant montre comment créer un groupe de paramètres personnalisés nommé MY_EXT_SP_PARAM_GROUP pour la famille de groupes de paramètres db2-se-11.5.

    Pour Linux, macOS ou Unix :

    aws rds create-db-parameter-group \ --region us-east-1 \ --db-parameter-group-name MY_EXT_SP_PARAM_GROUP \ --db-parameter-group-family db2-se-11.5 \ --description "test db2 external routines"

    Pour Windows :

    aws rds create-db-parameter-group ^ --region us-east-1 ^ --db-parameter-group-name MY_EXT_SP_PARAM_GROUP ^ --db-parameter-group-family db2-se-11.5 ^ --description "test db2 external routines"
  2. Modifiez le paramètre db2_alternate_authz_behaviour dans votre groupe de paramètres personnalisés en exécutant la commande modify-db-parameter-group.

    Inclure les options requises suivantes :

    • --db-parameter-group-name : nom du groupe de paramètres que vous avez créé.

    • --parameters : tableau des noms de paramètres, des valeurs et méthode d’application pour la mise à jour des paramètres.

    Pour plus d’informations sur la modification d’un groupe de paramètres, consultez Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS.

    L’exemple suivant montre comment modifier le groupe de paramètres MY_EXT_SP_PARAM_GROUP en définissant la valeur de db2_alternate_authz_behaviour sur EXTERNAL_ROUTINE_DBADM.

    Pour Linux, macOS ou Unix :

    aws rds modify-db-parameter-group \ --db-parameter-group-name MY_EXT_SP_PARAM_GROUP \ --parameters "ParameterName='db2_alternate_authz_behaviour',ParameterValue='EXTERNAL_ROUTINE_DBADM',ApplyMethod=immediate"

    Pour Windows :

    aws rds modify-db-parameter-group ^ --db-parameter-group-name MY_EXT_SP_PARAM_GROUP ^ --parameters "ParameterName='db2_alternate_authz_behaviour',ParameterValue='EXTERNAL_ROUTINE_DBADM',ApplyMethod=immediate"
Configuration du paramètre db2_alternate_authz_behaviour dans un groupe de paramètres personnalisé
  1. Si vous souhaitez utiliser un groupe de paramètres de base de données personnalisé différent de celui que votre instance de base de données utilise, créez un nouveau groupe de paramètres de base de données à l’aide de l’opération Amazon RDS API CreateDBParameterGroup. Si vous utilisez le modèle Apportez votre propre licence (BYOL), assurez-vous que le nouveau groupe de paramètres personnalisés inclut les identifiants IBM Db2. Pour plus d’informations sur ces identifiants, consultez Identifiants IBM pour Apportez votre propre licence (BYOL) pour Db2.

    Incluez les paramètres requis suivants :

    • DBParameterGroupName

    • DBParameterGroupFamily

    • Description

    Pour plus d’informations sur la création d’un groupe de paramètres de base de données, consultez Création d’un groupe de paramètres de base de données dans Amazon RDS.

  2. Modifiez le paramètre db2_alternate_authz_behaviour dans votre groupe de paramètres personnalisés que vous avez créé à l’aide de l’opération RDS API ModifyDBParameterGroup.

    Incluez les paramètres requis suivants :

    • DBParameterGroupName

    • Parameters

    Pour plus d’informations sur la modification d’un groupe de paramètres, consultez Modification de paramètres dans un groupe de paramètres de base de données dans Amazon RDS.

Étape 2 : installation du fichier .jar avec votre routine externe

Après avoir créé votre routine Java, créez le fichier .jar, puis exécutez db2 "call sqlj.install_jar('file:file_path',jar_ID)" pour l’installer sur votre base de données RDS for Db2.

L’exemple suivant montre comment créer une routine Java et l’installer sur une base de données RDS for Db2. L’exemple comprend un exemple de code pour une routine simple que vous pouvez utiliser pour tester le processus. Cet exemple repose sur les hypothèses suivantes :

  • Le code Java est compilé sur un serveur sur lequel Db2 est installé. Il s’agit d’une bonne pratique, car le fait de ne pas compiler avec le JDK fourni par IBM peut entraîner des erreurs inexpliquées.

  • Le serveur dispose de la base de données RDS for Db2 cataloguée localement.

Si vous souhaitez essayer le processus avec l’exemple de code suivant, copiez-le et enregistrez-le dans un fichier nommé MYJAVASP.java.

import java.sql.*; public class MYJAVASP { public static void my_JAVASP (String inparam) throws SQLException, Exception { try { // Obtain the calling context's connection details. Connection myConn = DriverManager.getConnection("jdbc:default:connection"); String myQuery = "INSERT INTO TEST.TEST_TABLE VALUES (?, CURRENT DATE)"; PreparedStatement myStmt = myConn.prepareStatement(myQuery); myStmt.setString(1, inparam); myStmt.executeUpdate(); } catch (SQLException sql_ex) { throw sql_ex; } catch (Exception ex) { throw ex; } }

La commande suivante compile la routine Java.

~/sqllib/java/jdk64/bin/javac MYJAVASP.java

La commande suivante crée un fichier .jar.

~/sqllib/java/jdk64/bin/jar cvf MYJAVASP.jar MYJAVASP.class

Les commandes suivantes se connectent à la base de données nommée MY_DB2_DATABASE et installent le fichier .jar.

db2 "connect to MY_DB2_DATABASE user master_username using master_password" db2 "call sqlj.install_jar('file:/tmp/MYJAVASP.jar','MYJAVASP')" db2 "call sqlj.refresh_classes()"

Étape 3 : enregistrement de la procédure stockée externe

Après avoir installé le fichier .jar sur votre base de données RDS for Db2, enregistrez-le en tant que procédure stockée en exécutant la commande db2 CREATE PROCEDURE ou db2 REPLACE PROCEDURE.

L’exemple suivant montre comment se connecter à la base de données et enregistrer la routine Java créée à l’étape précédente en tant que procédure stockée.

db2 "connect to MY_DB2_DATABASE user master_username using master_password" create procedure TESTSP.MYJAVASP (in input char(6)) specific myjavasp dynamic result sets 0 deterministic language java parameter style java no dbinfo fenced threadsafe modifies sql data program type sub external name 'MYJAVASP!my_JAVASP';

Étape 4 : validation de la procédure stockée externe

Procédez comme suit pour tester l’exemple de procédure stockée externe enregistré à l’étape précédente.

Pour valider la procédure stockée externe
  1. Créez une table comme TEST.TEST_TABLE dans l’exemple suivant.

    db2 "create table TEST.TEST_TABLE(C1 char(6), C2 date)"
  2. Appelez la nouvelle procédure stockée externe. L’appel renvoie un statut de 0.

    db2 "call TESTSP.MYJAVASP('test')" Return Status = 0
  3. Interrogez la table que vous avez créée à l’étape 1 pour vérifier les résultats de l’appel de procédure stockée.

    db2 "SELECT * from TEST.TEST_TABLE"

    La requête produit un résultat similaire à l’exemple suivant :

    C1 C2 ------ ---------- test 02/05/2024