

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# ConnConnecting a bases de datos de IBM DB2 para Linux, UNIX y Windows con el AWS Schema Conversion Tool
<a name="CHAP_Source.DB2LUW"></a>

Puede utilizarlos AWS SCT para convertir esquemas, objetos de código en el lenguaje SQL y código de aplicaciones de IBM Db2 para Linux, Unix y Windows (Db2 LUW) a los siguientes objetivos.
+ Amazon RDS para MySQL
+ Amazon Aurora MySQL-Compatible Edition
+ Amazon RDS para PostgreSQL
+ Edición de Amazon Aurora compatible con PostgreSQL
+ Amazon RDS para MariaDB

AWS SCT admite como fuente las versiones 9.1, 9.5, 9.7, 10.1, 10.5, 11.1 y 11.5 de Db2 LUW.

## Privilegios para Db2 LUW como origen
<a name="CHAP_Source.DB2LUW.Permissions"></a>

Los privilegios necesarios para conectarse a una base de datos de Db2 LUW, comprobar los privilegios disponibles y leer los metadatos de esquema de un origen son los siguientes: 
+ Privilegio necesario para establecer una conexión:
  + CONNECT ON DATABASE
+ Privilegio necesario para ejecutar instrucciones SQL:
  + EJECUTAR EN EL PAQUETE NULLID. SYSSH200
+ Privilegios necesarios para obtener información de nivel de instancia:
  + EXECUTE ON FUNCTION SYSPROC.ENV\$1GET\$1INST\$1INFO
  + SELECT ON SYSIBMADM.ENV\$1INST\$1INFO
  + SELECT ON SYSIBMADM.ENV\$1SYS\$1INFO
+ Privilegios necesarios para comprobar los privilegios concedidos a través de roles, grupos y autoridades:
  + EXECUTE ON FUNCTION SYSPROC.AUTH\$1LIST\$1AUTHORITIES\$1FOR\$1AUTHID
  + EXECUTE ON FUNCTION SYSPROC.AUTH\$1LIST\$1GROUPS\$1FOR\$1AUTHID
  + EXECUTE ON FUNCTION SYSPROC.AUTH\$1LIST\$1ROLES\$1FOR\$1AUTHID
  + SELECT ON SYSIBMADM.PRIVILEGES
+ Privilegios necesarios en los catálogos y las tablas del sistema:
  + SELECT ON SYSCAT.ATTRIBUTES
  + SELECT ON SYSCAT.CHECKS
  + SELECT ON SYSCAT.COLIDENTATTRIBUTES
  + SELECT ON SYSCAT.COLUMNS
  + SELECT ON SYSCAT.DATAPARTITIONEXPRESSION
  + SELECT ON SYSCAT.DATAPARTITIONS
  + SELECT ON SYSCAT.DATATYPEDEP
  + SELECT ON SYSCAT.DATATYPES
  + SELECT ON SYSCAT.HIERARCHIES
  + SELECT ON SYSCAT.INDEXCOLUSE
  + SELECT ON SYSCAT.INDEXES
  + SELECT ON SYSCAT.INDEXPARTITIONS
  + SELECT ON SYSCAT.KEYCOLUSE
  + SELECT ON SYSCAT.MODULEOBJECTS
  + SELECT ON SYSCAT.MODULES
  + SELECT ON SYSCAT.NICKNAMES
  + SELECT ON SYSCAT.PERIODS
  + SELECT ON SYSCAT.REFERENCES
  + SELECT ON SYSCAT.ROUTINEPARMS
  + SELECT ON SYSCAT.ROUTINES
  + SELECT ON SYSCAT.ROWFIELDS
  + SELECT ON SYSCAT.SCHEMATA
  + SELECT ON SYSCAT.SEQUENCES
  + SELECCIONAR EN SYSCAT.TABCONST
  + SELECCIONAR EN SYSCAT.TABLES
  + SELECCIONE EN SYSCAT.TRIGGERS
  + SELECCIONE EN SYSCAT.VARIABLEDEP
  + SELECT ON SYSCAT.VARIABLES
  + SELECT ON SYSCAT.VIEWS
  + SELECCIONE EN EL SISTEMA. SYSDUMMY1
+  Para ejecutar instrucciones SQL, la cuenta de usuario necesita un privilegio para utilizar al menos una de las cargas de trabajo habilitadas en la base de datos. Si ninguna de las cargas de trabajo está asignada al usuario, asegúrese de este puede obtener acceso a la carga de trabajo de usuario predeterminada:
  + USAGE ON WORKLOAD SYSDEFAULTUSERWORKLOAD

Para ejecutar consultas, debe crear un espacio de tabla temporal del sistema con un tamaño de página de 8 K, 16 K y 32 K, si no existen. Para crear los espacios de tabla temporales, ejecute los siguientes scripts.

```
CREATE BUFFERPOOL BP8K
  IMMEDIATE
  ALL DBPARTITIONNUMS
  SIZE AUTOMATIC
  NUMBLOCKPAGES 0
  PAGESIZE 8K;
  
CREATE SYSTEM TEMPORARY TABLESPACE TS_SYS_TEMP_8K 
  PAGESIZE 8192 
  BUFFERPOOL BP8K;
  
CREATE BUFFERPOOL BP16K
  IMMEDIATE
  ALL DBPARTITIONNUMS
  SIZE AUTOMATIC
  NUMBLOCKPAGES 0
  PAGESIZE 16K;
  
CREATE SYSTEM TEMPORARY TABLESPACE TS_SYS_TEMP_BP16K 
  PAGESIZE 16384 
  BUFFERPOOL BP16K;  
  
CREATE BUFFERPOOL BP32K
  IMMEDIATE
  ALL DBPARTITIONNUMS
  SIZE AUTOMATIC
  NUMBLOCKPAGES 0
  PAGESIZE 32K;
  
CREATE SYSTEM TEMPORARY TABLESPACE TS_SYS_TEMP_BP32K 
  PAGESIZE 32768 
  BUFFERPOOL BP32K;
```

## Conexión a Db2 LUW como origen
<a name="CHAP_Source.DB2LUW.Connecting"></a>

Utilice el siguiente procedimiento para conectarse a su base de datos Db2 LUW de origen con la AWS Schema Conversion Tool. 

**Para conectarse a una base de datos de origen de Db2 LUW**

1. En AWS Schema Conversion Tool, selecciona **Añadir fuente**. 

1. Elija **Db2 LUW** y, a continuación, elija **Siguiente**. 

   Se abrirá el cuadro de diálogo **Agregar origen**.

1. En **Nombre de conexión**, escriba un nombre para su base de datos. AWS SCT muestra este nombre en el árbol del panel izquierdo. 

1. Utilice las credenciales de la base de datos de AWS Secrets Manager o introdúzcalas manualmente:
   + Para usar las credenciales de base de datos de Secrets Manager, siga las instrucciones siguientes:

     1. En **Secreto de AWS **, elija el nombre del secreto.

     1. Seleccione **Rellenar** para rellenar automáticamente todos los valores del cuadro de diálogo de conexión a la base de datos de Secrets Manager.

     Para obtener información sobre el uso de las credenciales de bases de datos de Secrets Manager, consulte[Configurando AWS Secrets Manager en el AWS Schema Conversion Tool](CHAP_UserInterface.SecretsManager.md).
   + Para introducir manualmente la información de conexión a la base de datos de origen de IBM Db2 LUW, siga las instrucciones siguientes:  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/SchemaConversionTool/latest/userguide/CHAP_Source.DB2LUW.html)

1. Elija **Probar conexión** para comprobar que AWS SCT puede conectarse a la base de datos de origen. 

1. Seleccione **Conectar** para conectarse a su base de datos de origen.

# Migración de IBM DB2 para Linux, UNIX y Windows a Amazon Relational Database Service for PostgreSQL o a una edición compatible con Amazon Aurora PostgreSQL
<a name="CHAP_Source.DB2LUW.ToPostgreSQL"></a>

Al migrar IBM Db2 LUW a PostgreSQL, AWS SCT puede convertir varias sentencias de activación utilizadas con Db2 LUW. Entre estas instrucciones de activación se incluyen las siguientes:
+ **Eventos de activación**: los eventos de activación INSERT, DELETE y UPDATE especifican que la acción activada debe ejecutarse siempre que el evento se aplica a la tabla o vista de asuntos. Puede especificar cualquier combinación de los eventos INSERT, DELETE y UPDATE, pero puede especificar cada evento solo una vez. AWS SCT admite eventos desencadenantes únicos y múltiples. En el caso de los eventos, PostgreSQL tiene prácticamente la misma funcionalidad. 
+ **Evento OF COLUMN**: se puede especificar un nombre de columna desde una tabla base. El disparador se activa únicamente cuando se actualiza una columna que aparece en la lista de nombres de columnas. PostgreSQL tiene la misma funcionalidad.
+ **Disparadores de instrucciones**: estos disparadores indican que la acción se aplica una sola vez en toda la instrucción. Este tipo de granularidad no se puede especificar con los disparadores BEFORE o INSTEAD OF. Si se especifica, se activará un disparador UPDATE o DELETE aunque no haya ninguna fila afectada. PostgreSQL también cuenta con esta funcionalidad y la declaración de los disparadores de instrucciones es idéntica en PostgreSQL y Db2 LUW.
+ **Cláusulas de referencia**: estas cláusulas especifican los nombres de correlación de las variables de transición y los nombres de las tablas de transición. Los nombres de correlación identifican una fila concreta del conjunto de filas afectadas por la operación SQL de activación. Los nombres de las tablas identifican el conjunto completo de filas afectadas. Cada una de las filas afectadas por una operación SQL de activación está disponible para la acción activada al asignar a las columnas los nombres de correlación especificados. PostgreSQL no admite esta funcionalidad y solo utiliza el nombre de correlación NEW u OLD.
+ **ACTIVADORES INSTEAD OF**: AWS SCT los admite.

## Convertir tablas particionadas de Db2 LUW a tablas particionadas de PostgreSQL versión 10
<a name="CHAP_Source.DB2LUW.ToPostgreSQL.PartitionedTables"></a>

AWS SCT puede convertir tablas LUW de Db2 en tablas particionadas en PostgreSQL 10. Existen varias restricciones al convertir una tabla particionada de Db2 LUW en PostgreSQL:
+ Puede crear una tabla particionada con una columna que admita valores null en Db2 LUW y puede especificar una partición para almacenar los valores NULL. Sin embargo, PostgreSQL no admite valores NULL con particiones RANGE.
+ Db2 LUW puede utilizar una cláusula INCLUSIVE o EXCLUSIVE para establecer los valores límite del intervalo. PostgreSQL solo admite INCLUSIVE para el límite inicial y EXCLUSIVE para el límite final. El nombre de la partición convertida tiene el formato <nombre\$1tabla\$1original>\$1<nombre\$1partición\$1original>.
+ Puede crear claves principales o únicas para tablas particionadas de Db2 LUW. PostgreSQL requiere que se creen claves primarias o únicas para cada partición directamente. Las restricciones de claves principales o únicas deben eliminarse de la tabla principal. El nombre de la clave convertida tiene el formato <nombre\$1clave\$1original>\$1<nombre\$1partición\$1original>.
+ Puede crear una restricción de clave externa que tenga como origen o destino una tabla particionada de Db2 LUW. Sin embargo, PostgreSQL no admite referencias de clave externa en tablas particionadas. PostgreSQL tampoco admite las referencias de clave externa entre una tabla particionada y otra tabla.
+ Puede crear un índice en una tabla particionada en Db2 LUW. Sin embargo, PostgreSQL requiere que se cree un índice para cada partición directamente. Los índices deben eliminarse de la tabla principal. El nombre del índice convertido tiene el formato <nombre\$1índice\$1original>\$1<nombre\$1partición\$1original>.
+ Debe definir los disparadores de fila en las particiones individuales, no en la tabla particionada. Los disparadores deben eliminarse de la tabla principal. El nombre del disparador convertido tiene el formato <nombre\$1disparador\$1original>\$1<nombre\$1partición\$1original>.

## Privilegios para PostgreSQL como destino
<a name="CHAP_Source.DB2LUW.ToPostgreSQL.ConfigureTarget"></a>

Para usar PostgreSQL como destino AWS SCT , se requiere el privilegio. `CREATE ON DATABASE` Asegúrese de conceder este privilegio a cada base de datos PostgreSQL de destino.

Para usar los sinónimos públicos convertidos, cambie la ruta de búsqueda predeterminada de la base de datos a `"$user", public_synonyms, public`.

Puede usar el siguiente ejemplo de código para crear un usuario de base de datos y conceder los privilegios.

```
CREATE ROLE user_name LOGIN PASSWORD 'your_password';
GRANT CREATE ON DATABASE db_name TO user_name;
ALTER DATABASE db_name SET SEARCH_PATH = "$user", public_synonyms, public;
```

En el ejemplo anterior, *user\$1name* sustitúyalo por el nombre de tu usuario. A continuación, *db\$1name* sustitúyalo por el nombre de la base de datos de destino. Por último, *your\$1password* sustitúyala por una contraseña segura.

En PostgreSQL, solo el propietario de un esquema o un `superuser` puede anular un esquema. El propietario puede eliminar un esquema y todos los objetos que incluye este esquema, aunque el propietario del esquema no sea propietario de algunos de los objetos.

Si utiliza distintos usuarios para convertir y aplicar diferentes esquemas a la base de datos de destino, puede aparecer un mensaje de error cuando no AWS SCT puede eliminar un esquema. Para evitar este mensaje de error, utilice el rol de `superuser`. 

# Migración de IBM DB2 para Linux, UNIX y Windows a Amazon RDS para MySQL o Amazon Aurora MySQL
<a name="CHAP_Source.DB2LUW.ToMySQL"></a>

Al convertir una base de datos de IBM Db2 LUW a RDS para MySQL o Amazon Aurora MySQL, tenga en cuenta lo siguiente.

## Privilegios para MySQL como destino
<a name="CHAP_Source.DB2LUW.ToMySQL.ConfigureTarget"></a>

Los privilegios necesarios para MySQL como destino se enumeran a continuación:
+ CREATE ON \$1.\$1
+ ALTER ON \$1.\$1
+ DROP ON \$1.\$1
+ INDEX ON \$1.\$1
+ REFERENCES ON \$1.\$1
+ SELECT ON \$1.\$1
+ CREATE VIEW ON \$1.\$1
+ SHOW VIEW ON \$1.\$1
+ TRIGGER ON \$1.\$1
+ CREATE ROUTINE ON \$1.\$1
+ ALTER ROUTINE ON \$1.\$1
+ EXECUTE ON \$1.\$1
+ SELECT ON mysql.proc
+ INSERTE Y ACTUALICE EN AWS\$1DB 2\$1EXT. \$1
+ INSERTAR, ACTUALIZAR Y ELIMINAR EN AWS\$1DB 2\$1EXT\$1DATA. \$1
+ CREE TABLAS TEMPORALES EN AWS\$1DB 2\$1EXT\$1DATA. \$1

Puede usar el siguiente ejemplo de código para crear un usuario de base de datos y conceder los privilegios.

```
CREATE USER 'user_name' IDENTIFIED BY 'your_password';
GRANT CREATE ON *.* TO 'user_name';
GRANT ALTER ON *.* TO 'user_name';
GRANT DROP ON *.* TO 'user_name';
GRANT INDEX ON *.* TO 'user_name';
GRANT REFERENCES ON *.* TO 'user_name';
GRANT SELECT ON *.* TO 'user_name';
GRANT CREATE VIEW ON *.* TO 'user_name';
GRANT SHOW VIEW ON *.* TO 'user_name';
GRANT TRIGGER ON *.* TO 'user_name';
GRANT CREATE ROUTINE ON *.* TO 'user_name';
GRANT ALTER ROUTINE ON *.* TO 'user_name';
GRANT EXECUTE ON *.* TO 'user_name';
GRANT SELECT ON mysql.proc TO 'user_name';
GRANT INSERT, UPDATE ON AWS_DB2_EXT.* TO 'user_name';
GRANT INSERT, UPDATE, DELETE ON AWS_DB2_EXT_DATA.* TO 'user_name';
GRANT CREATE TEMPORARY TABLES ON AWS_DB2_EXT_DATA.* TO 'user_name';
```

En el ejemplo anterior, *user\$1name* sustitúyalo por el nombre de tu usuario. A continuación, *your\$1password* sustitúyala por una contraseña segura.

Para usar Amazon RDS para MySQL o Aurora MySQL como destino, establezca el parámetro `lower_case_table_names` en `1`. Este valor significa que el servidor MySQL gestiona los identificadores de nombres de objetos como tablas, índices, disparadores y bases de datos sin distinguir entre mayúsculas y minúsculas. Si ha activado el registro binario en la instancia de destino, establezca el parámetro `log_bin_trust_function_creators` en `1`. En este caso, no es necesario utilizar las características `DETERMINISTIC`, `READS SQL DATA` o `NO SQL` para crear funciones almacenadas. Para configurar estos parámetros, cree un grupo de parámetros de base de datos nuevo o modifique uno existente.