Puede crear rutinas externas y registrarlas en sus bases de datos de Amazon RDS para Db2 como procedimientos almacenados externos. Actualmente, RDS para Db2 solo admite rutinas basadas en Java para procedimientos almacenados externos.
Procedimientos almacenados externos basados en Java
Los procedimientos almacenados externos basados en Java son rutinas Java externas que se registran en la base de datos de RDS para Db2 como procedimientos almacenados externos.
Temas
Limitaciones de los procedimientos almacenados externos basados en Java
Antes de desarrollar su rutina externa, tenga en cuenta las siguientes limitaciones y restricciones.
Para crear su rutina externa, asegúrese de utilizar el kit de desarrollo de Java (JDK) proporcionado por Db2. Para obtener más información, consulte Java software support for Db2 database products
Su programa Java solo puede crear archivos en el directorio /tmp
y Amazon RDS no permite habilitar permisos ejecutables ni permisos de definición de ID de usuario (SUID) en estos archivos. Su programa Java tampoco puede usar llamadas al sistema de sockets ni las siguientes llamadas al sistema:
_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
Para conocer las restricciones adicionales en las rutinas externas de Db2, consulte Restrictions on external routines
Configuración de procedimientos almacenados externos basados en Java
Para configurar un procedimiento almacenado externo, cree un archivo .jar con su rutina externa, instálelo en la base de datos de RDS para Db2 y, a continuación, regístrelo como procedimiento almacenado externo.
Temas
Paso 1: habilite los procedimientos almacenados externos
Para habilitar los procedimientos almacenados externos, establezca el parámetro db2_alternate_authz_behaviour
en uno de los valores siguientes en un grupo de parámetros personalizado asociado a la instancia de base de datos:
EXTERNAL_ROUTINE_DBADM
: concede de forma implícita a cualquier usuario, grupo o rol con autoridadDBADM
el permisoCREATE_EXTERNAL_ROUTINE
.EXTERNAL_ROUTINE_DBAUTH
: permite a un usuario con autoridadDBADM
conceder el permisoCREATE_EXTERNAL_ROUTINE
a cualquier usuario, grupo o rol. En este caso, no se concede implícitamente este permiso a ningún usuario, grupo o rol, ni siquiera a un usuario con autoridadDBADM
.
Para obtener más información sobre esta configuración, consulte GRANT (database authorities) statement
Puede crear y modificar una instancia de base de datos mediante la AWS Management Console, la AWS CLI o la API de Amazon RDS.
Configuración del parámetro db2_alternate_authz_behaviour en un grupo de parámetros personalizado
-
Si desea utilizar un grupo de parámetros de base de datos personalizado diferente al que está utilizando su instancia de base de datos, cree un nuevo grupo de parámetros de base de datos. Si utiliza el modelo Traiga su propia licencia (BYOL), asegúrese de que el nuevo grupo de parámetros personalizados incluya los ID de IBM. Para obtener información acerca de estos ID, consulte ID de IBM para Traiga su propia licencia para Db2. Para obtener más información acerca de cómo crear un grupo de parámetros de base de datos, consulte Creación de un grupo de parámetros de base de datos en Amazon RDS.
-
Establezca el valor del parámetro
db2_alternate_authz_behaviour
en su grupo de parámetros personalizados. Para obtener más información acerca de cómo modificar un grupo de parámetros, consulte Modificación de los parámetros de un grupo de parámetros de base de datos en Amazon RDS.
Configuración del parámetro db2_alternate_authz_behaviour en un grupo de parámetros personalizado
-
Si desea utilizar un grupo de parámetros de base de datos personalizado diferente al que está utilizando su instancia de base de datos, cree un grupo de parámetros personalizado ejecutando el comando create-db-parameter-group. Si utiliza el modelo Traiga su propia licencia (BYOL), asegúrese de que el nuevo grupo de parámetros personalizados incluya los ID de IBM. Para obtener información acerca de estos ID, consulte ID de IBM para Traiga su propia licencia para Db2.
Incluya las siguientes opciones obligatorias:
-
--db-parameter-group-name
: un nombre para el grupo de parámetros que se está creando. -
--db-parameter-group-family
: la edición y la versión principal del motor de Db2. Los valores válidos sondb2-se-11.5
ydb2-ae-11.5
. -
--description
: la descripción para este grupo de parámetros.
Para obtener más información acerca de cómo crear un grupo de parámetros de base de datos, consulte Creación de un grupo de parámetros de base de datos en Amazon RDS.
En el siguiente ejemplo, se muestra cómo crear un grupo de parámetros personalizado denominado
MY_EXT_SP_PARAM_GROUP
para la familia de grupos de parámetrosdb2-se-11.5
.Para Linux, macOS o: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"
En: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"
-
-
Modifique el parámetro
db2_alternate_authz_behaviour
en su grupo de parámetros personalizados ejecutando el comando modify-db-parameter-group.Incluya las siguientes opciones obligatorias:
-
--db-parameter-group-name
: el nombre del grupo de parámetros creado. -
--parameters
: una matriz de los nombres de parámetros, valores y métodos de aplicación para la actualización del parámetro.
Para obtener más información acerca de cómo modificar un grupo de parámetros, consulte Modificación de los parámetros de un grupo de parámetros de base de datos en Amazon RDS.
En el siguiente ejemplo, se muestra cómo modificar el grupo de parámetros
MY_EXT_SP_PARAM_GROUP
configurando el valor dedb2_alternate_authz_behaviour
enEXTERNAL_ROUTINE_DBADM
.Para Linux, macOS o: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"
En: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"
-
Configuración del parámetro db2_alternate_authz_behaviour en un grupo de parámetros personalizado
-
Si desea utilizar un grupo de parámetros de base de datos personalizado diferente del que utiliza su instancia de base de datos, cree un nuevo grupo de parámetros de base de datos mediante la operación CreateDBParameterGroup de la API de Amazon RDS. Si utiliza el modelo Traiga su propia licencia (BYOL), asegúrese de que el nuevo grupo de parámetros personalizados incluya los ID de IBM Db2. Para obtener información acerca de estos ID, consulte ID de IBM para Traiga su propia licencia para Db2.
Incluya los siguientes parámetros obligatorios:
-
DBParameterGroupName
-
DBParameterGroupFamily
-
Description
Para obtener más información acerca de cómo crear un grupo de parámetros de base de datos, consulte Creación de un grupo de parámetros de base de datos en Amazon RDS.
-
-
Modifique el parámetro
db2_alternate_authz_behaviour
del grupo de parámetros personalizado que creó mediante la operación ModifyDBParameterGroup de la API de RDS.Incluya los siguientes parámetros obligatorios:
-
DBParameterGroupName
-
Parameters
Para obtener más información acerca de cómo modificar un grupo de parámetros, consulte Modificación de los parámetros de un grupo de parámetros de base de datos en Amazon RDS.
-
Paso 2: instale el archivo .jar con la rutina externa
Tras crear la rutina de Java, cree el archivo .jar y, a continuación, ejecute db2 "call sqlj.install_jar('file:
para instalarlo en la base de datos de RDS para Db2.file_path
',jar_ID
)"
En el siguiente ejemplo, se muestra cómo crear una rutina de Java e instalarla en una base de datos de RDS para Db2. En el ejemplo, se incluye un código de ejemplo para una rutina sencilla que puede utilizar para probar el proceso. En este ejemplo, se da por supuesto lo siguiente:
El código Java se compila en un servidor en el que está instalado Db2. Se trata de una práctica recomendada, ya que si no se compila con el JDK proporcionado por IBM, se pueden producir errores sin ninguna explicación.
El servidor tiene la base de datos de RDS para Db2 catalogada localmente.
Si desea probar el proceso con el siguiente código de ejemplo, cópielo y guárdelo en un archivo denominado 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; } }
El siguiente comando compila la rutina de Java.
~/sqllib/java/jdk64/bin/javac MYJAVASP.java
El siguiente comando crea el archivo .jar.
~/sqllib/java/jdk64/bin/jar cvf MYJAVASP.jar MYJAVASP.class
Los siguientes comandos se conectan a la base de datos denominada MY_DB2_DATABASE
e instalan el archivo .jar.
db2 "connect to MY_DB2_DATABASE user
master_username
usingmaster_password
" db2 "call sqlj.install_jar('file:/tmp/MYJAVASP.jar','MYJAVASP')" db2 "call sqlj.refresh_classes()"
Paso 3: registre el procedimiento almacenado externo
Tras instalar el archivo .jar en la base de datos de RDS para Db2, regístrelo como procedimiento almacenado ejecutando el comando db2 CREATE PROCEDURE
o db2
REPLACE PROCEDURE
.
El siguiente ejemplo muestra cómo conectarse a la base de datos y registrar la rutina de Java creada en el paso anterior como un procedimiento almacenado.
db2 "connect to MY_DB2_DATABASE user
master_username
usingmaster_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';
Paso 4: valide el procedimiento almacenado externo
Utilice los siguientes pasos para probar el procedimiento almacenado externo de ejemplo que se registró en el paso anterior.
Validación del procedimiento almacenado externo
-
Cree una tabla como
TEST.TEST_TABLE
en el siguiente ejemplo.db2 "create table TEST.TEST_TABLE(C1 char(6), C2 date)"
-
Llame al nuevo procedimiento almacenado externo. La llamada devuelve un estado de
0
.db2 "call TESTSP.MYJAVASP('test')" Return Status = 0
-
Consulte la tabla que creó en el paso 1 para comprobar los resultados de la llamada al procedimiento almacenado.
db2 "SELECT * from TEST.TEST_TABLE"
La consulta produce una salida similar a la del ejemplo siguiente:
C1 C2 ------ ---------- test 02/05/2024