Federação do Amazon RDS para Db2 - Amazon Relational Database Service

Federação do Amazon RDS para Db2

É possível usar o banco de dados do Amazon RDS para Db2 como um banco de dados federado. Depois de configurar a federação para o RDS para Db2, você poderá acessar e consultar dados em vários bancos de dados do seu banco de dados do RDS para Db2. A federação evita que você precise migrar dados para o banco de dados do RDS para Db2 ou consolidar dados em um único banco de dados.

Ao usar o banco de dados do RDS para Db2 como um banco de dados federado, é possível continuar acessando todos os recursos do RDS para Db2 e aproveitar vários Serviços da AWS, além de manter os dados em bancos de dados diferentes. É possível configurar a federação homogênea, que conecta diferentes bancos de dados do mesmo tipo, ou a federação heterogênea, que conecta bancos de dados diferentes de tipos diferentes.

Primeiro, é necessário conectar o banco de dados do Db2 no RDS para Db2 aos bancos de dados remotos. Depois, é possível executar consultas em todos os bancos de dados conectados. Por exemplo, é possível executar uma declaração SQL JOIN que une tabelas no banco de dados do RDS para Db2 com tabelas em um banco de dados do Db2 remoto no z/OS.

Federação homogênea

É possível configurar uma federação homogênea entre o banco de dados do RDS para Db2 e a seguinte família de produtos Db2:

  • Db2 para Linux, UNIX, Windows (LUW)

  • Db2 iSeries

  • Db2 para z/OS

A federação homogênea do RDS para Db2 não é compatível com as seguintes ações:

  • Executar comandos CATALOG para configurar um diretório de nós e um banco de dados remoto em um banco de dados host do RDS para Db2.

  • Configurar o balanceamento de workload (WLB) ao federar para o Db2 no z/OS.

  • Configurar o arquivo de configuração do driver do servidor de dados IBM (db2dsdriver.cfg).

A federação homogênea do RDS para Db2 tem os seguintes requisitos:

Etapa 1: Criar um wrapper DRDA e um servidor federado

Em relação a uma federação homogênea, crie um wrapper DRDA e um servidor federado. A conexão com o host remoto usa HOST, PORT e DBNAME.

Escolha um dos métodos a seguir com base no tipo do banco de dados do Db2 remoto:

  • Banco de dados do Db2 para Linux, UNIX e Windows (LUX): execute os comandos SQL a seguir. No exemplo a seguir, substitua server_name pelo nome do servidor que você usará para federação. Substitua db2_version pela versão do banco de dados do Db2 remoto. Substitua username e password por suas credenciais para o banco de dados do Db2 remoto ao qual você deseja se conectar. Substitua db_name, dns_name e port pelos valores apropriados para o banco de dados do Db2 remoto ao qual você deseja se conectar.

    create wrapper drda options(DB2_FENCED 'N'); create server server_name type DB2/LUW wrapper drda version 'db2_version' authorization "master_username" password "master_password" options (add DBNAME 'db_name',add HOST 'dns_name',add PORT 'port');

    Exemplo

    create wrapper drda options(DB2_FENCED 'N'); create server SERVER1 type DB2/LUW wrapper drda version '11.5' authorization "sysuser" password "******" options (add DBNAME 'TESTDB2',add HOST 'ip-123-45-67-899.us-west-1.compute.internal',add PORT '25010');
  • Db2 iSeries: execute os comandos SQL a seguir. No exemplo a seguir, substitua wrapper_name e library_name por um nome para o wrapper DRDA e o arquivo de biblioteca de wrapper. Substitua server_name pelo nome do servidor que você usará para federação. Substitua db2_version pela versão do banco de dados do Db2 remoto. Substitua username e password por suas credenciais para o banco de dados do Db2 remoto ao qual você deseja se conectar. Substitua dns_name, port e db_name pelos valores apropriados para o banco de dados do Db2 remoto ao qual você deseja se conectar.

    create wrapper wrapper_name library 'library name' options(DB2_FENCED 'N'); create server server_name type db2/mvs version db2_version wrapper wrapper_name authorization "sername" password "password" options (HOST 'dns_name', PORT 'port', DBNAME 'db_name');

    Exemplo

    create wrapper WRAPPER1 library 'libdb2drda.so' options(DB2_FENCED 'N'); create server SERVER1 type db2/mvs version 11 wrapper WRAPPER1 authorization "sysuser" password "******" options (HOST 'test1.123.com', PORT '446', DBNAME 'STLEC1');
  • Db2 para z/OS: execute os comandos SQL a seguir. No exemplo a seguir, substitua wrapper_name e library_name por um nome para o wrapper DRDA e o arquivo de biblioteca de wrapper. Substitua server_name pelo nome do servidor que você usará para federação. Substitua db2_version pela versão do banco de dados do Db2 remoto. Substitua username e password por suas credenciais para o banco de dados do Db2 remoto ao qual você deseja se conectar. Substitua dns_name, port e db_name pelos valores apropriados para o banco de dados do Db2 remoto ao qual você deseja se conectar.

    create wrapper wrapper_name library 'library_name' options(DB2_FENCED 'N'); create server server_name type db2/mvs version db2_version wrapper wrapper_name authorization "username" password "password" options (HOST 'dns_name', PORT 'port', DBNAME 'db_name');

    Exemplo

    create wrapper WRAPPER1 library 'libdb2drda.so' OPTIONS(DB2_FENCED 'N'); create server SERVER1 type db2/mvs version 11 wrapper WRAPPER1 authorization "sysuser" password "******" options (HOST 'test1.123.com', PORT '446', DBNAME 'STLEC1');

Etapa 2: Criar um mapeamento do usuário

Crie um mapeamento de usuário para associar o servidor federado ao servidor de fonte de dados executando o comando SQL a seguir. No exemplo a seguir, substitua server_name pelo nome do servidor remoto no qual você deseja realizar as operações. Esse é o servidor que você criou na etapa 1. Substitua username e password pelas suas credenciais para esse servidor remoto.

create user mapping for user server server_name options (REMOTE_AUTHID 'username', REMOTE_PASSWORD 'password');

Para ter mais informações, consulte User mappings na documentação do IBM Db2.

Etapa 3: Conferir a conexão

Confirme se a configuração da federação foi bem-sucedida conferindo a conexão. Abra uma sessão para enviar comandos SQL nativos à sua fonte de dados remota usando o comando SET PASSTHRU e, depois, crie uma tabela no servidor de dados remoto.

  1. Abra e feche uma sessão para enviar SQL a uma fonte de dados. No exemplo a seguir, substitua server_name pelo nome do servidor que você criou para federação na etapa 1.

    set passthru server_name;
  2. Crie uma tabela. No exemplo a seguir, substitua column_name, data_type e value pelos itens apropriados para sua tabela.

    create table table_name ( column_name data_type(value), column_name data_type(value);

    Para ter mais informações, consulte CREATE TABLE statement na documentação do IBM Db2.

  3. Crie um índice, insira valores para linhas na tabela e redefina a conexão. A redefinição da conexão interrompe a conexão, mas retém os processos de back-end. No exemplo a seguir, substitua index_name, table_name, column_value e columnx_value por suas informações.

    create index index_name on table_name(column_name); insert into table_name values(column1_value,column2_value,column3_value); insert into table_name values(column1_value,column2_value,column3_value); set passthru reset; connect reset;
  4. Conecte-se ao seu banco de dados do Db2 remoto, crie um apelido para seu servidor remoto e execute operações. Quando terminar de acessar os dados no banco de dados do Db2 remoto, redefina e encerre a conexão. No exemplo a seguir, substitua database_name pelo nome do banco de dados do Db2 remoto. Substitua nickname por um nome. Substitua server_name e table_name pelo nome do servidor remoto e da tabela no servidor em que você deseja realizar operações. Substitua username pelas informações do seu servidor remoto. Substitua sql_command pela operação a ser executada no servidor remoto.

    connect to database_name; create nickname nickname for server_name."username"."table_name"; select sql_command from nickname; connect reset; terminate;

Exemplo

O exemplo a seguir cria uma sessão de passagem para permitir operações no servidor federado testdb10.

Depois, ele cria a tabela t1 com três colunas com diferentes tipos de dados.

Depois, o exemplo cria o índice i1_t1 em três colunas na tabela t1. Depois, ele insere duas linhas com valores para essas três colunas e então se desconecta.

Por último, o exemplo se conecta ao banco de dados do Db2 remoto testdb2 e cria um apelido para a tabela t1 no servidor federado testdb10. Ele cria o apelido com o nome de usuário TESTUSER dessa fonte de dados. Um comando SQL gera todos os dados da tabela t1. O exemplo desconecta e encerra a sessão.

set passthru testdbl0; create table t1 ( c1 decimal(13,0), c2 char(200), c3 int); create index i1_t1 on t1(c3); insert into t1 values(1,'Test',1); insert into t1 values(2,'Test 2',2); connect reset; connect to testdb2; create nickname remote_t1 for testdbl0."TESTUSER"."T1"; select * from remote_t1; connect reset; terminate;

Federação heterogênea

É possível configurar uma federação heterogênea entre o banco de dados do RDS para Db2 e outras fontes de dados, como Oracle e Microsoft SQL Server. Para ter uma lista completa das fontes de dados que o Db2 LUW comporta, consulte Data Source Support Matrix of Federation Bundled in Db2 LUW V11.5 no site de suporte da IBM.

A federação heterogênea do RDS para Db2 não é compatível com os seguintes itens:

  • Wrappers nativos para as outras fontes de dados.

  • Wrappers JDBC para as outras fontes de dados.

  • Federação para fontes de dados Sybase, Informix e Teradata porque essas fontes de dados exigem instalação de software-cliente no RDS para Db2

A federação heterogênea do RDS para Db2 tem os seguintes requisitos:

  • O RDS para Db2 é compatível com o método de wrapper ODBC.

  • Se você criar uma definição explícita de um wrapper, deverá definir a opção DB2_FENCED como 'N'. Para ter uma lista de opções de wrapper válidas para ODBC, consulte ODBC options na documentação do IBM Db2.

  • É necessário permitir o tráfego de entrada e de saída do banco de dados host do RDS para Db2 para o banco de dados host remoto. Para ter mais informações, consulte Fornecer acesso à instância de banco de dados na VPC criando um grupo de segurança.

Para ter informações sobre federação para Oracle, consulte How to query Oracle by using Db2 Federation and the ODBC driver? no site de suporte da IBM.

Para ter mais informações sobre fontes de dados que comportam a federação, consulte Data Source Support Matrix of Federation Bundled in Db2 LUW V11.5 no site de suporte da IBM.

Etapa 1: Criar um wrapper ODBC

Crie um wrapper executando o seguinte comando:

db2 "create wrapper odbc options( module '/home/rdsdb/sqllib/federation/odbc/lib/libodbc.so')"

Etapa 2: Criar um servidor federado

Crie um servidor federado executando o comando a seguir. No exemplo a seguir, substitua server_name pelo nome do servidor que você usará para federação. Substitua wrapper_type pelo wrapper apropriado. Substitua db_version pela versão do banco de dados remoto. Substitua dns_name, port e service_name pelos valores apropriados para o banco de dados remoto ao qual você deseja se conectar.

db2 "create server server_name type wrapper_type version db_version options (HOST 'dns_name', PORT 'port', SERVICE_NAME 'service_name')“

Para ter informações sobre tipos de wrapper, consulte Data Source Support Matrix of Federation Bundled in Db2 LUW V11.5 no site de suporte da IBM.

Exemplo

O exemplo a seguir cria um servidor federado para um banco de dados Oracle remoto.

db2 "create server server1 type oracle_odbc version 12.1 options (HOST 'test1.amazon.com', PORT '1521', SERVICE_NAME 'pdborcl.amazon.com')“

Etapa 3: Criar um mapeamento do usuário

Crie um mapeamento de usuário para associar o servidor federado ao servidor de fonte de dados executando o comando SQL a seguir. No exemplo a seguir, substitua server_name pelo nome do servidor remoto no qual você deseja realizar as operações. Esse é o servidor que você criou na etapa 2. Substitua username e password pelas suas credenciais para esse servidor remoto.

create user mapping for user server server_name options (REMOTE_AUTHID 'username', REMOTE_PASSWORD 'password');

Para ter mais informações, consulte User mappings na documentação do IBM Db2.

Etapa 4: Conferir a conexão

Confirme se a configuração da federação foi bem-sucedida conferindo a conexão. Abra uma sessão para enviar comandos SQL nativos à sua fonte de dados remota usando o comando SET PASSTHRU e, depois, crie uma tabela no servidor de dados remoto.

  1. Abra e feche uma sessão para enviar SQL a uma fonte de dados. No exemplo a seguir, substitua server_name pelo nome do servidor que você criou para federação na etapa 2.

    set passthru server_name;
  2. Crie uma tabela. No exemplo a seguir, substitua column_name, data_type e value pelos itens apropriados para sua tabela.

    create table table_name ( column_name data_type(value), column_name data_type(value);

    Para ter mais informações, consulte CREATE TABLE statement na documentação do IBM Db2.

  3. Crie um índice, insira valores para linhas na tabela e redefina a conexão. A redefinição da conexão interrompe a conexão, mas retém os processos de back-end. No exemplo a seguir, substitua index_name, table_name, column_value e columnx_value por suas informações.

    create index index_name on table_name(column_name); insert into table_name values(column1_value,column2_value,column3_value); insert into table_name values(column1_value,column2_value,column3_value); set passthru reset; connect reset;
  4. Conecte-se ao seu banco de dados do Db2 remoto, crie um apelido para seu servidor remoto e execute operações. Quando terminar de acessar os dados no banco de dados do Db2 remoto, redefina e encerre a conexão. No exemplo a seguir, substitua database_name pelo nome do banco de dados do Db2 remoto. Substitua nickname por um nome. Substitua server_name e table_name pelo nome do servidor remoto e da tabela no servidor em que você deseja realizar operações. Substitua username pelas informações do seu servidor remoto. Substitua sql_command pela operação a ser executada no servidor remoto.

    connect to database_name; create nickname nickname for server_name."username"."table_name"; select sql_command from nickname; connect reset; terminate;

Exemplo

O exemplo a seguir cria uma sessão de passagem para permitir operações no servidor federado testdb10.

Depois, ele cria a tabela t1 com três colunas com diferentes tipos de dados.

Depois, o exemplo cria o índice i1_t1 em três colunas na tabela t1. Depois, ele insere duas linhas com valores para essas três colunas e então se desconecta.

Por último, o exemplo se conecta ao banco de dados do Db2 remoto testdb2 e cria um apelido para a tabela t1 no servidor federado testdb10. Ele cria o apelido com o nome de usuário TESTUSER dessa fonte de dados. Um comando SQL gera todos os dados da tabela t1. O exemplo desconecta e encerra a sessão.

set passthru testdbl0; create table t1 ( c1 decimal(13,0), c2 char(200), c3 int); create index i1_t1 on t1(c3); insert into t1 values(1,'Test',1); insert into t1 values(2,'Test 2',2); connect reset; connect to testdb2; create nickname remote_t1 for testdbl0."TESTUSER"."T1"; select * from remote_t1; connect reset; terminate;