Procedimentos armazenados externos do Amazon RDS para Db2 - Amazon Relational Database Service

Procedimentos armazenados externos do Amazon RDS para Db2

É possível criar rotinas externas e registrá-las em bancos de dados do Amazon RDS para Db2 como procedimentos armazenados externos. No momento, o RDS para Db2 permite somente rotinas baseadas em Java para procedimentos armazenados externos.

Procedimentos armazenados externos baseados em Java

Procedimentos armazenados externos baseados em Java são rotinas externas do Java que você registra no banco de dados do RDS para Db2 como procedimentos armazenados externos.

Limitações para procedimentos armazenados externos baseados em Java

Antes de desenvolver a rotina externa, considere as seguintes limitações e restrições.

Para criar a rotina externa, use o Java Development Kit (JDK) fornecido pelo Db2. Consulte mais informações em Java software support for Db2 database products.

O programa Java pode criar arquivos somente no diretório /tmp, e o Amazon RDS não permite habilitar permissões executáveis ou de definição de ID de usuário (SUID) nesses arquivos. O programa Java também não pode usar chamadas de sistema de soquete nem as seguintes chamadas de 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

Consulte as restrições adicionais sobre rotinas externas para o Db2 em Restrictions on external routines na documentação do IBM Db2.

Configurar procedimentos armazenados externos baseados em Java

Para configurar um procedimento armazenado externo, crie um arquivo .jar com a rotina externa, instale-o no banco de dados do RDS para Db2 e, depois, registre-o como um procedimento armazenado externo.

Etapa 1: habilitar procedimentos armazenados externos

Para habilitar procedimentos armazenados externos, em um grupo de parâmetros personalizado associado à instância de banco de dados, defina o parâmetro db2_alternate_authz_behaviour como um dos seguintes valores:

  • EXTERNAL_ROUTINE_DBADM: concede implicitamente a permissão CREATE_EXTERNAL_ROUTINE a qualquer usuário, grupo ou perfil com a autoridade DBADM.

  • EXTERNAL_ROUTINE_DBAUTH: permite que um usuário com a autoridade DBADM conceda a permissão CREATE_EXTERNAL_ROUTINE a qualquer usuário, grupo ou perfil. Nesse caso, nenhum usuário, grupo ou perfil recebe essa permissão implicitamente, nem mesmo um usuário com a autoridade DBADM.

Consulte mais informações sobre essa configuração em GRANT (database authorities) statement na documentação do IBM Db2.

É possível criar e modificar um grupo de parâmetros personalizado usando o AWS Management Console, a AWS CLI ou a API do Amazon RDS.

Para configurar o parâmetro db2_alternate_authz_behaviour em um grupo de parâmetros personalizado
  1. Se você quiser usar um grupo de parâmetros de banco de dados personalizado diferente do que o que a instância de banco de dados está usando, crie outro grupo de parâmetros de banco de dados. Se você estiver usando o modelo traga a sua própria licença (BYOL), garanta que o novo grupo de parâmetros personalizado inclua os IDs da IBM. Consulte informações sobre esses IDs em IDs da IBM para traga a sua própria licença para o Db2. Para obter mais informações sobre como criar um parameter group de banco de dados, consulte Criar um grupo de parâmetros de banco de dados no Amazon RDS.

  2. Defina o valor do parâmetro db2_alternate_authz_behaviour em seu grupo de parâmetros personalizado. Para ter mais informações sobre como modificar um grupo de parâmetros, consulte Modificar parâmetros em um grupo de parâmetros de banco de dados no Amazon RDS.

Para configurar o parâmetro db2_alternate_authz_behaviour em um grupo de parâmetros personalizado
  1. Se você quiser usar um grupo de parâmetros de banco de dados personalizado diferente do que o que a instância de banco de dados está usando, crie um grupo de parâmetros de personalizado executando o comando create-db-parameter-group. Se você estiver usando o modelo traga a sua própria licença (BYOL), garanta que o novo grupo de parâmetros personalizado inclua os IDs da IBM. Consulte informações sobre esses IDs em IDs da IBM para traga a sua própria licença para o Db2.

    Inclua as seguintes opções necessárias:

    • --db-parameter-group-name: um nome para o grupo de parâmetros que você está criando.

    • --db-parameter-group-family: a edição do mecanismo do Db2 e a versão principal. Os valores válidos são db2-se-11.5 e db2-ae-11.5.

    • --description: a descrição desse grupo de parâmetros.

    Para obter mais informações sobre como criar um parameter group de banco de dados, consulte Criar um grupo de parâmetros de banco de dados no Amazon RDS.

    O exemplo a seguir mostra como criar um grupo de parâmetros personalizado chamado MY_EXT_SP_PARAM_GROUP para a família do grupos de parâmetros db2-se-11.5.

    Para 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"

    Para 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. Modifique o parâmetro db2_alternate_authz_behaviour em seu grupo de parâmetros personalizado executando o comando modify-db-parameter-group.

    Inclua as seguintes opções necessárias:

    • --db-parameter-group-name: o nome do grupo de parâmetros criado.

    • --parameters: uma matriz de nomes de parâmetros, valores e os métodos de aplicação da atualização de parâmetros.

    Para ter mais informações sobre como modificar um grupo de parâmetros, consulte Modificar parâmetros em um grupo de parâmetros de banco de dados no Amazon RDS.

    O exemplo a seguir mostra como modificar o grupo de parâmetros MY_EXT_SP_PARAM_GROUP definindo o valor de db2_alternate_authz_behaviour como EXTERNAL_ROUTINE_DBADM.

    Para 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"

    Para 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"
Para configurar o parâmetro db2_alternate_authz_behaviour em um grupo de parâmetros personalizado
  1. Se você quiser usar um grupo de parâmetros de banco de dados personalizado diferente do que o que a instância de banco de dados está usando, crie outro grupo de parâmetros de banco de dados usando a operação de API CreateDBParameterGroup do Amazon RDS. Se você estiver usando o modelo traga a sua própria licença (BYOL), garanta que o novo grupo de parâmetros personalizado inclua os IDs da IBM Db2. Consulte informações sobre esses IDs em IDs da IBM para traga a sua própria licença para o Db2.

    Inclua os seguintes parâmetros necessários:

    • DBParameterGroupName

    • DBParameterGroupFamily

    • Description

    Para obter mais informações sobre como criar um parameter group de banco de dados, consulte Criar um grupo de parâmetros de banco de dados no Amazon RDS.

  2. Modifique o parâmetro db2_alternate_authz_behaviour no grupo de parâmetros personalizado que você criou usando a operação de API ModifyDBParameterGroup do RDS.

    Inclua os seguintes parâmetros necessários:

    • DBParameterGroupName

    • Parameters

    Para ter mais informações sobre como modificar um grupo de parâmetros, consulte Modificar parâmetros em um grupo de parâmetros de banco de dados no Amazon RDS.

Etapa 2: instalar o arquivo .jar com a rotina externa

Depois de criar a rotina do Java, crie o arquivo .jar e execute db2 "call sqlj.install_jar('file:file_path',jar_ID)" para instalá-lo no banco de dados do RDS para Db2.

O exemplo a seguir mostra como criar uma rotina do Java e instalá-la em um banco de dados do RDS para Db2. O exemplo inclui um exemplo de código para uma rotina simples que pode ser usada para testar o processo. Esse exemplo faz as seguintes suposições:

  • O código Java é compilado em um servidor em que o Db2 está instalado. Essa é uma prática recomendada porque não compilar com o JDK fornecido pela IBM pode resultar em erros inexplicáveis.

  • O servidor tem o banco de dados do RDS para Db2 catalogado localmente.

Se você quiser experimentar o processo com o código de exemplo a seguir, copie-o e salve-o em um arquivo chamado 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; } }

O comando a seguir compila a rotina do Java.

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

O comando a seguir cria o arquivo .jar.

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

Os comandos a seguir se conectam ao banco de dados chamado MY_DB2_DATABASE e instalam o arquivo .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()"

Etapa 3: registrar o procedimento armazenado externo

Depois de instalar o arquivo .jar no banco de dados do RDS para Db2, registre-o como um procedimento armazenado executando o comando db2 CREATE PROCEDURE ou db2 REPLACE PROCEDURE.

O exemplo a seguir mostra como se conectar ao banco de dados e registrar a rotina do Java criada na etapa anterior como um procedimento armazenado.

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';

Etapa 4: validar o procedimento armazenado externo

Use as etapas a seguir para testar o exemplo de procedimento armazenado externo que foi registrado na etapa anterior.

Como validar o procedimento armazenado externo
  1. Crie uma tabela como TEST.TEST_TABLE no exemplo a seguir.

    db2 "create table TEST.TEST_TABLE(C1 char(6), C2 date)"
  2. Chame o novo procedimento armazenado externo. A chamada retorna um status de 0.

    db2 "call TESTSP.MYJAVASP('test')" Return Status = 0
  3. Consulte a tabela que você criou na etapa 1 para verificar os resultados da chamada do procedimento armazenado.

    db2 "SELECT * from TEST.TEST_TABLE"

    A consulta produz um resultado semelhante ao seguinte exemplo:

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