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:
-
É necessário criar o wrapper DRDA no modo
UNFENCED
. Caso contrário, a federação não funcionará no RDS para Db2. -
É necessário permitir o tráfego de entrada e de saída do banco de dados host do RDS para Db2 para os bancos de dados host remotos. Para ter mais informações, consulte Fornecer acesso à instância de banco de dados na VPC criando um grupo de segurança.
Tópicos
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. Substituadb2_version
pela versão do banco de dados do Db2 remoto. Substituausername
epassword
por suas credenciais para o banco de dados do Db2 remoto ao qual você deseja se conectar. Substituadb_name
,dns_name
eport
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
elibrary_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. Substituadb2_version
pela versão do banco de dados do Db2 remoto. Substituausername
epassword
por suas credenciais para o banco de dados do Db2 remoto ao qual você deseja se conectar. Substituadns_name
,port
edb_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 serverserver_name
type db2/mvs versiondb2_version
wrapperwrapper_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
elibrary_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. Substituadb2_version
pela versão do banco de dados do Db2 remoto. Substituausername
epassword
por suas credenciais para o banco de dados do Db2 remoto ao qual você deseja se conectar. Substituadns_name
,port
edb_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 serverserver_name
type db2/mvs versiondb2_version
wrapperwrapper_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
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.
-
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
; -
Crie uma tabela. No exemplo a seguir, substitua
column_name
,data_type
evalue
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. -
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
ecolumnx_value
por suas informações.create index
index_name
ontable_name
(column_name
); insert intotable_name
values(column1_value
,column2_value
,column3_value
); insert intotable_name
values(column1_value
,column2_value
,column3_value
); set passthru reset; connect reset; -
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. Substituanickname
por um nome. Substituaserver_name
etable_name
pelo nome do servidor remoto e da tabela no servidor em que você deseja realizar operações. Substituausername
pelas informações do seu servidor remoto. Substituasql_command
pela operação a ser executada no servidor remoto.connect to
database_name
; create nicknamenickname
forserver_name
."username
"."table_name
"; selectsql_command
fromnickname
; 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
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 optionsna 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?
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
Tópicos
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
typewrapper_type
versiondb_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
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
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.
-
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
; -
Crie uma tabela. No exemplo a seguir, substitua
column_name
,data_type
evalue
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. -
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
ecolumnx_value
por suas informações.create index
index_name
ontable_name
(column_name
); insert intotable_name
values(column1_value
,column2_value
,column3_value
); insert intotable_name
values(column1_value
,column2_value
,column3_value
); set passthru reset; connect reset; -
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. Substituanickname
por um nome. Substituaserver_name
etable_name
pelo nome do servidor remoto e da tabela no servidor em que você deseja realizar operações. Substituausername
pelas informações do seu servidor remoto. Substituasql_command
pela operação a ser executada no servidor remoto.connect to
database_name
; create nicknamenickname
forserver_name
."username
"."table_name
"; selectsql_command
fromnickname
; 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;