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 una 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
CATALOGpara 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 obter 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_namepelo nome do servidor que você usará para federação. Substituadb2_versionpela versão do banco de dados do Db2 remoto. Substituausernameepasswordpor suas credenciais para o banco de dados do Db2 remoto ao qual você deseja se conectar. Substituadb_name,dns_nameeportpelos valores apropriados para o banco de dados do Db2 remoto ao qual você deseja se conectar.create wrapper drda options(DB2_FENCED 'N'); create serverserver_nametype 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_nameelibrary_namepor um nome para o wrapper DRDA e o arquivo de biblioteca de wrapper. Substitua server_namepelo nome do servidor que você usará para federação. Substituadb2_versionpela versão do banco de dados do Db2 remoto. Substituausernameepasswordpor suas credenciais para o banco de dados do Db2 remoto ao qual você deseja se conectar. Substituadns_name,portedb_namepelos valores apropriados para o banco de dados do Db2 remoto ao qual você deseja se conectar.create wrapperwrapper_namelibrary 'library name' options(DB2_FENCED 'N'); create serverserver_nametype db2/mvs versiondb2_versionwrapperwrapper_nameauthorization "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_nameelibrary_namepor um nome para o wrapper DRDA e o arquivo de biblioteca de wrapper. Substitua server_namepelo nome do servidor que você usará para federação. Substituadb2_versionpela versão do banco de dados do Db2 remoto. Substituausernameepasswordpor suas credenciais para o banco de dados do Db2 remoto ao qual você deseja se conectar. Substituadns_name,portedb_namepelos valores apropriados para o banco de dados do Db2 remoto ao qual você deseja se conectar.create wrapperwrapper_namelibrary 'library_name' options(DB2_FENCED 'N'); create serverserver_nametype db2/mvs versiondb2_versionwrapperwrapper_nameauthorization "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 serverserver_nameoptions (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_namepelo nome do servidor que você criou para federação na etapa 1.set passthruserver_name; -
Crie uma tabela. No exemplo a seguir, substitua
column_name,data_typeevaluepelos itens apropriados para sua tabela.create tabletable_name(column_namedata_type(value),column_namedata_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_valueecolumnx_valuepor suas informações.create indexindex_nameontable_name(column_name); insert intotable_namevalues(column1_value,column2_value,column3_value); insert intotable_namevalues(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_namepelo nome do banco de dados do Db2 remoto. Substituanicknamepor um nome. Substituaserver_nameetable_namepelo nome do servidor remoto e da tabela no servidor em que você deseja realizar operações. Substituausernamepelas informações do seu servidor remoto. Substituasql_commandpela operação a ser executada no servidor remoto.connect todatabase_name; create nicknamenicknameforserver_name."username"."table_name"; selectsql_commandfromnickname; 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_FENCEDcomo'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 obter 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 serverserver_nametypewrapper_typeversiondb_versionoptions (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 serverserver_nameoptions (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_namepelo nome do servidor que você criou para federação na etapa 2.set passthruserver_name; -
Crie uma tabela. No exemplo a seguir, substitua
column_name,data_typeevaluepelos itens apropriados para sua tabela.create tabletable_name(column_namedata_type(value),column_namedata_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_valueecolumnx_valuepor suas informações.create indexindex_nameontable_name(column_name); insert intotable_namevalues(column1_value,column2_value,column3_value); insert intotable_namevalues(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_namepelo nome do banco de dados do Db2 remoto. Substituanicknamepor um nome. Substituaserver_nameetable_namepelo nome do servidor remoto e da tabela no servidor em que você deseja realizar operações. Substituausernamepelas informações do seu servidor remoto. Substituasql_commandpela operação a ser executada no servidor remoto.connect todatabase_name; create nicknamenicknameforserver_name."username"."table_name"; selectsql_commandfromnickname; 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;