

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Federazione per Amazon RDS per Db2
<a name="db2-federation"></a>

Puoi usare il tuo database Amazon RDS per Db2 come database federato. Dopo aver configurato la federazione per RDS per Db2, potrai accedere ai dati in più database ed eseguire query su di essi dal tuo database RDS per Db2. La federazione evita la necessità di eseguire la migrazione dei dati nel database RDS per Db2 o di consolidare i dati in un unico database. 

Utilizzando il database RDS for Db2 come database federato, è possibile continuare ad accedere a tutte le funzionalità di RDS for Db2 e trarne vantaggio Servizi AWS, il tutto mantenendo i dati in database diversi. È possibile impostare sia una federazione omogenea, che collega database dello stesso tipo, sia una federazione eterogenea, che collega database di tipi diversi.

Prima di tutto devi connettere il tuo database Db2 in RDS per Db2 ai database remoti. Quindi puoi eseguire query su tutti i database connessi. Ad esempio, è possibile eseguire un'istruzione SQL JOIN che unisce le tabelle del database RDS for Db2 con le tabelle di un database Db2 on remoto. z/OS 

**Topics**
+ [Federazione omogenea](#db2-federation-homogeneous)
+ [Federazione eterogenea](#db2-federation-heterogeneous)

## Federazione omogenea
<a name="db2-federation-homogeneous"></a>

Puoi configurare una federazione omogenea tra il tuo database RDS per Db2 e la seguente famiglia di prodotti Db2:
+ Db2 per Linux, UNIX, Windows (LUW)
+ Db2 iSeries
+ Db2 per z/OS

La federazione omogenea di RDS per Db2 non supporta le seguenti azioni:
+ Esecuzione di comandi `CATALOG` per configurare una directory di nodi e un database remoto su un database host RDS per Db2
+ Configurazione del bilanciamento del carico di lavoro (WLB) per la federazione con Db2 su z/OS
+ Configurazione del file di configurazione driver del server di dati IBM (`db2dsdriver.cfg`)

La federazione omogenea in RDS per Db2 prevede i seguenti requisiti:
+ È necessario creare il wrapper DRDA in modalità `UNFENCED`. In caso contrario, la federazione non funzionerà in RDS per Db2.
+ È necessario consentire il traffico in entrata e in uscita dal database host RDS per Db2 ai database host remoti. Per ulteriori informazioni, consulta [Fornisci accesso alla istanza database nel VPC creando un gruppo di sicurezza](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup).

**Topics**
+ [Fase 1: creare un wrapper DRDA e un server federato](#db2-federation-homogeneous-create)
+ [Fase 2: creare una mappatura degli utenti](#db2-federation-homogeneous-map)
+ [Fase 3: controllare la connessione](#db2-federation-homogeneous-check)

### Fase 1: creare un wrapper DRDA e un server federato
<a name="db2-federation-homogeneous-create"></a>

Per la federazione omogenea, crea un wrapper DRDA e un server federato. La connessione all’host remoto utilizza `HOST`, `PORT` e `DBNAME`. 

Scegli uno dei seguenti metodi a seconda del tipo di database Db2 remoto:
+ **Database Db2 per Linux, UNIX e Windows (LUX)**: esegui i seguenti comandi SQL. Nell'esempio seguente, sostituiscilo *server\$1name* con il nome del server che utilizzerai per la federazione. Sostituiscilo *db2\$1version* con la versione del tuo database Db2 remoto. Sostituisci *username* e *password* con le tue credenziali per il database Db2 remoto a cui desideri connetterti. Sostituisci *db\$1name* e *port* con i valori appropriati per il database Db2 remoto a cui desideri connetterti. *dns\$1name*

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

  **Esempio**

  ```
  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**: esegui i seguenti comandi SQL. [Nell'esempio seguente, sostituite *wrapper\$1name* e *library\$1name* con un nome per il wrapper DRDA e il file della libreria wrapper.](https://www.ibm.com/docs/en/db2/11.5?topic=wrapper-db2-library-files) *server\$1name*Sostituiscilo con il nome del server che utilizzerai per la federazione. Sostituiscilo *db2\$1version* con la versione del tuo database Db2 remoto. Sostituisci *username* e *password* con le tue credenziali per il database Db2 remoto a cui desideri connetterti. Sostituisci *dns\$1name* e *db\$1name* con i valori appropriati per il database Db2 remoto a cui desideri connetterti. *port*

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

  **Esempio**

  ```
  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 per z/OS**: esegui i seguenti comandi SQL. [Nell'esempio seguente, sostituite *wrapper\$1name* e *library\$1name* con un nome per il wrapper DRDA e il file della libreria wrapper.](https://www.ibm.com/docs/en/db2/11.5?topic=wrapper-db2-library-files) *server\$1name*Sostituiscilo con il nome del server che utilizzerai per la federazione. Sostituiscilo *db2\$1version* con la versione del tuo database Db2 remoto. Sostituisci *username* e *password* con le tue credenziali per il database Db2 remoto a cui desideri connetterti. Sostituisci *dns\$1name* e *db\$1name* con i valori appropriati per il database Db2 remoto a cui desideri connetterti. *port*

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

  **Esempio**

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

### Fase 2: creare una mappatura degli utenti
<a name="db2-federation-homogeneous-map"></a>

Crea una mappatura degli utenti per associare il server federato al server di origine dati eseguendo il seguente comando SQL. Nell'esempio seguente, *server\$1name* sostituitelo con il nome del server remoto su cui desiderate eseguire le operazioni. Si tratta del server che hai creato nella [fase 1](#db2-federation-homogeneous-create). Sostituisci *username* e *password* con le tue credenziali per questo server remoto.

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

Per ulteriori informazioni, consulta [User mappings](https://www.ibm.com/docs/en/db2/11.5?topic=systems-user-mappings) nella documentazione di IBM Db2.

### Fase 3: controllare la connessione
<a name="db2-federation-homogeneous-check"></a>

Verifica che la configurazione della federazione sia avvenuta correttamente controllando la connessione. Apri una sessione per inviare comandi SQL nativi all’origine dati remota utilizzando il comando SET PASSTHRU, quindi crea una tabella sul server di dati remoto.

1. Apri e chiudi una sessione per inviare SQL a un’origine dati. Nell'esempio seguente, *server\$1name* sostituiscilo con il nome del server creato per la federazione nel passaggio 1.

   ```
   set passthru server_name;
   ```

1. Creare una nuova tabella . Nell'esempio seguente *column\$1name**data\$1type*, sostituisci e *value* con gli elementi appropriati per la tua tabella.

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

    Per ulteriori informazioni, consulta [CREATE TABLE statement](https://www.ibm.com/docs/en/db2-event-store/2.0.0?topic=statements-create-table) nella documentazione di IBM Db2.

1. Crea un indice, inserisci i valori per le righe nella tabella e reimposta la connessione. La reimpostazione della connessione interrompe la connessione ma mantiene i processi di backend. Nell'esempio seguente, sostituisci*index\$1name*, *table\$1name**column\$1name*, e *columnx\$1value* con le tue informazioni. 

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

1. Connettiti al tuo database Db2 remoto, crea un nickname per il server remoto ed esegui le operazioni. Quando non ti serve più l’accesso ai dati nel database Db2 remoto, reimposta e quindi termina la connessione. Nell'esempio seguente, sostituiscilo *database\$1name* con il nome del tuo database Db2 remoto. Sostituisci *nickname* con un nome. Sostituisci *server\$1name* e *table\$1name* con il nome del server remoto e della tabella sul server su cui desideri eseguire le operazioni. Sostituiscilo *username* con le informazioni relative al tuo server remoto. Sostituire *sql\$1command* con l'operazione da eseguire sul server remoto.

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

**Esempio**

Nell’esempio seguente viene creata una sessione pass-through per consentire le operazioni sul server federato `testdb10`. 

Viene poi creata la tabella `t1` con tre colonne con diversi tipi di dati. 

Quindi, viene creato l’indice `i1_t1` su tre colonne della tabella `t1`. Successivamente, vengono inserite due righe con valori per queste tre colonne e quindi viene effettuata la disconnessione.

Infine, viene effettuata la connessione al database Db2 remoto `testdb2` e viene creato un nickname per la tabella ` t1` nel server federato `testdb10`. Viene creato il nickname con il nome utente `TESTUSER` per quella origine dati. Un comando SQL restituisce tutti i dati della tabella `t1`. Viene effettuata la disconnessione e la sessione viene terminata.

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

## Federazione eterogenea
<a name="db2-federation-heterogeneous"></a>

È possibile configurare una federazione eterogenea tra il database RDS per Db2 e altre origini dati come Oracle e Microsoft SQL Server. Per un elenco completo delle origini dati supportate da Db2 LUW, consulta [Data Source Support Matrix of Federation Bundled in Db2 LUW V11.5](https://www.ibm.com/support/pages/data-source-support-matrix-federation-bundled-db2-luw-v115) sul sito IBM Support.

La Federazione eterogenea di RDS per Db2 non supporta quanto segue:
+ Wrapper nativi per le altre origini dati
+ Wrapper JDBC per le altre origini dati
+ Federazione a origini dati Sybase, Informix e Teradata perché queste origini dati richiedono l’installazione del software client su RDS per Db2

La federazione eterogenea in RDS per Db2 prevede i seguenti requisiti:
+ RDS per Db2 supporta solo il metodo wrapper ODBC.
+ Se crei una definizione esplicita di un wrapper, devi impostare l’opzione `DB2_FENCED` su `'N'`. Per un elenco delle opzioni wrapper valide per ODBC, consulta [ODBC options](https://www.ibm.com/docs/en/db2/11.5?topic=options-odbc) nella documentazione di IBM Db2.
+ È necessario consentire il traffico in entrata e in uscita dal database host RDS per Db2 al database host remoto. Per ulteriori informazioni, consulta [Fornisci accesso alla istanza database nel VPC creando un gruppo di sicurezza](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup).

Per informazioni sulla federazione con Oracle, consulta [How to query Oracle by using Db2 Federation and the ODBC driver?](https://www.ibm.com/support/pages/node/6431133) sul sito IBM Support.

Per ulteriori informazioni sulle origini dati che supportano la federazione, consulta [Data Source Support Matrix of Federation Bundled in Db2 LUW V11.5](https://www.ibm.com/support/pages/node/957245) sul sito IBM Support.

**Topics**
+ [Fase 1: creare un wrapper ODBC](#db2-federation-heteogenous-define-wrapper)
+ [Fase 2: creare un server federato](#db2-federation-heterogeneous-create)
+ [Fase 3: creare una mappatura degli utenti](#db2-federation-heterogeneous-map)
+ [Fase 4: controllare la connessione](#db2-federation-heterogeneous-check)

### Fase 1: creare un wrapper ODBC
<a name="db2-federation-heteogenous-define-wrapper"></a>

Crea un wrapper eseguendo il seguente comando:

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

### Fase 2: creare un server federato
<a name="db2-federation-heterogeneous-create"></a>

Crea un server federato eseguendo il seguente comando: Nell'esempio seguente, *server\$1name* sostituiscilo con il nome del server che utilizzerai per la federazione. Sostituire *wrapper\$1type* con il wrapper appropriato. Sostituisci *db\$1version* con la versione del tuo database remoto. Sostituisci *dns\$1name* e *service\$1name* con i valori appropriati per il database remoto a cui desideri connetterti. *port* 

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

Per informazioni sui tipi di wrapper, consulta [Data Source Support Matrix of Federation Bundled in Db2 LUW V11.5](https://www.ibm.com/support/pages/node/957245) sul sito IBM Support.

**Esempio**

Nell’esempio seguente viene creato un server federato per un database Oracle remoto.

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

### Fase 3: creare una mappatura degli utenti
<a name="db2-federation-heterogeneous-map"></a>

Crea una mappatura degli utenti per associare il server federato al server di origine dati eseguendo il seguente comando SQL. Nell'esempio seguente, *server\$1name* sostituitelo con il nome del server remoto su cui desiderate eseguire le operazioni. Si tratta del server che hai creato nella [fase 2](#db2-federation-heterogeneous-create). Sostituisci *username* e *password* con le tue credenziali per questo server remoto.

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

Per ulteriori informazioni, consulta [User mappings](https://www.ibm.com/docs/en/db2/11.5?topic=systems-user-mappings) nella documentazione di IBM Db2.

### Fase 4: controllare la connessione
<a name="db2-federation-heterogeneous-check"></a>

Verifica che la configurazione della federazione sia avvenuta correttamente controllando la connessione. Apri una sessione per inviare comandi SQL nativi all’origine dati remota utilizzando il comando SET PASSTHRU, quindi crea una tabella sul server di dati remoto.

1. Apri e chiudi una sessione per inviare SQL a un’origine dati. Nell'esempio seguente, *server\$1name* sostituiscilo con il nome del server creato per la federazione nel [passaggio 2](#db2-federation-heterogeneous-create).

   ```
   set passthru server_name;
   ```

1. Creare una nuova tabella . Nell'esempio seguente *column\$1name**data\$1type*, sostituisci e *value* con gli elementi appropriati per la tua tabella.

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

    Per ulteriori informazioni, consulta [CREATE TABLE statement](https://www.ibm.com/docs/en/db2-event-store/2.0.0?topic=statements-create-table) nella documentazione di IBM Db2.

1. Crea un indice, inserisci i valori per le righe nella tabella e reimposta la connessione. La reimpostazione della connessione interrompe la connessione ma mantiene i processi di backend. Nell'esempio seguente, sostituisci*index\$1name*, *table\$1name**column\$1name*, e *columnx\$1value* con le tue informazioni. 

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

1. Connettiti al tuo database Db2 remoto, crea un nickname per il server remoto ed esegui le operazioni. Quando non ti serve più l’accesso ai dati nel database Db2 remoto, reimposta e quindi termina la connessione. Nell'esempio seguente, sostituiscilo *database\$1name* con il nome del tuo database Db2 remoto. Sostituisci *nickname* con un nome. Sostituisci *server\$1name* e *table\$1name* con il nome del server remoto e della tabella sul server su cui desideri eseguire le operazioni. Sostituiscilo *username* con le informazioni relative al tuo server remoto. Sostituire *sql\$1command* con l'operazione da eseguire sul server remoto.

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

**Esempio**

Nell’esempio seguente viene creata una sessione pass-through per consentire le operazioni sul server federato `testdb10`. 

Viene poi creata la tabella `t1` con tre colonne con diversi tipi di dati. 

Quindi, viene creato l’indice `i1_t1` su tre colonne della tabella `t1`. Successivamente, vengono inserite due righe con valori per queste tre colonne e quindi viene effettuata la disconnessione.

Infine, viene effettuata la connessione al database Db2 remoto `testdb2` e viene creato un nickname per la tabella ` t1` nel server federato `testdb10`. Viene creato il nickname con il nome utente `TESTUSER` per quella origine dati. Un comando SQL restituisce tutti i dati della tabella `t1`. Viene effettuata la disconnessione e la sessione viene terminata.

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