¿Cuál es nuestra oportunidad? Pues bien, simplemente migrar desde una base de datos Oracle ON-Premise hacía una base de datos Oracle AWS RDS (Cloud) 🙂
¿Cómo lo podemos hacer? Una forma de llevar a cabo una migración Oracle desde ON-Premise hacía Oracle RDS AWS es mediante Oracle DataPump, en la siguiente nota explicaremos mediante un caso práctico como llevarlo a cabo.

Oracle RDS AWS es un Relational Database System de Amazon, que funciona como un servicio en la nube , podríamos llamarlo un DBaaS (Database as Service) , si quieres saber como generar un Oracle RDS en AWS mira por favor la siguienta nota ¿Qué es Oracle RDS?
Importar datos con Oracle Data Pump hacía un Oracle RDS AWSLo que necesitamos para llevar a cabo la migración:
- Una base de datos Oracle On-Premise
- Un Amazon S3 Bucket
- Una base de datos Oracle RDS en AWS
Pasos llevados a cabo para la migración desde On-Premise hacía Oracle RDS AWS
- Creación de un IAM
- Creación de un rol de acceso
- Asociación entre IAM Role y nuestra base de datos
- Configuramos las opciones de integración dentro de nuestras bases de datos
- Respaldo On-Premise con Datapump
- Upload dmp hacía S3 Bucket
- Creamos un objeto directorio desde nuestro Oracle RDS AWS
- Copiar dmp desde S3 Bucket hacía Oracle RDS AWS
- Importar dmp desde Oracle Directory Object hacía Oracle RDS AWS
1.- Creación de un IAM (Identity and Access Management)
Se debe crear un IAM (Identity and Access Management) Policy para que Amazon Oracle RDS pueda acceder a un Amazon S3 Bucket, este permiso es requerido para poder transferir archivos desde el S3 Bucket a nuestro Oracle RDS
a) Vamos a la consola de manejo de IAM IAM Management Console (amazon.com)
b) Seleccionamos Policies

c) Seleccionamos Create Policy

d) Buscamos el servicio S3

e) Al seleccionar el S3, vamos a Access Level –> List y seleccionamos «ListBucket»

f) En Access Level –>Read seleccionamos «GetObject»

g) Agregamos un ARN (Amazon Resource Name)

Debería quedar como sigue (con el nombre del Bucket S3 que poseemos)

h) Presionar «Next: Tags» , «Next: Reviews» y darle nombre a la política generada

Así se visualiza la política de acceso generada

2.- Creación de un rol de acceso
Creación de un rol que permita a Oracle RDS acceder a Amazon S3 Bucket
a) Seleccionamos Roles bajo el Access management

b) Seleccionamos «Create Role»
c) Seleccionamos «AWS Service» y buscamos RDS

d) Y en el caso de uso, seleccionamos «RDS – Add Role to Database»

e) Seleccionamos «Next: Permissions»
f) Buscamos en los filtros de las políticas la que acabamos de generar llamada «PolicyDatapumpRDS»

g) Presionamos «Next: Tags» y «Next: Review»
h) Indicamos el nombre de nuestro rol a generar

i) Presionamos «Create Role»
3.- Asociación entre IAM Role y nuestra base de datos
a) Accedemos a nuestra Management Console : https://console.aws.amazon.com/rds/home?#
b) Presionamos en nuestras bases de datos en «DB Instances»
c) Seleccionamos «Connectivity & Security»

d) En la sección «Manage IAM Roles» agregamos el rol «RoleDatapumpRDS» que acabamos de crear y seleccionamos «S3_INTEGRATION» como feature

e) Presionamos «Add Role» y debe aparecer como Status Active

4.- Configuramos las opciones de integración dentro de nuestras bases de datos
Para lo anterior, debemos ejecutar los siguientes pasos
a) Vamos a nuestra consola de manejo de RDS https://console.aws.amazon.com/rds/home
b) Seleccionamos el menú «Option groups»

c) Agregamos un nuevo «Option groups» mediante el botón «Create group»

d) Al momento de crear nuestro «Option group» , debemos validar nuestro engine, para el caso nuestro, es una 19c con contenedores, esto se configuro cuando creamos nuestro Oracle RDS AWS

e) Agregamos la opción de integración a nuestro grupo de configuraciones generado en el paso anterior

f) Seleccionamos la configuración nueva (integración con S3) con esto se generarán todos los Store Procedures necesarios una vez que la asociemos con nuestra base de datos

g) Seleccionamos «Apply immediatly» y posterior a eso , «Add option»

h) Modificamos nuestra base de datos Oracle RDS para agregar el grupo que contiene la integración con S3 Bucket, para ello seleccionamos nuestra instancia Oracle RDS AWS y seleccionamos «Modify»

i) En «Aditional configuration» modificamos el «Option group» y selecciomos el que acabamos de crear , que tiene la opción de integración con S3

j) Vamos al final de la pantalla y presionamos «Continue»
k) En esta pantalla es donde aplicamos el cambio real, que puede ser en una ventana de modificación predeterminado o puede ser aplicado de forma inmediata, para los ambientes productivos se recomienda que el cambio sea aplicado en la ventana de mantención, dado que a veces el cambio de características de la base de datos requiere su reinicio

5.- Respaldo On-Premise con Datapump
En nuestra base de datos On-Premise ejecutamos nuestra respaldo de tabla, esquema o base de datos mediante Oracle Export Datapump

6.- Upload dmp hacía S3 Bucket
Subimos nuestro archivo dump (generado en On-Premise) hacía nuestro S3 Bucket, esto lo podemos realizar mediante la consola de AWS
a) Buscamos nuestro bucket S3 y seleccionamos «Upload»

b) Seleccionamos el archivo y presionamos «Upload»

7.- Creamos un objeto directorio desde nuestro Oracle RDS AWS
Amazon proporciona paquetes muy similares a los de Oracle para un sinnúmero de tareas (por el hecho de ser un DBaaS que posee un S.O. restringido para nosotros los administradores) , entre ellas, la creación de DIRECTORY. Para crear los DIRECTORY ejecutamos el siguiente comando
EXEC rdsadmin.rdsadmin_util.create_directory(p_directory_name => 'integracion_S3_RDS');
Después simplemente buscamos nuestro directorio (siempre creado con uppercase) en el diccionario de datos de Oracle RDS AWS
select * from dba_directories where directory_name = 'INTEGRACION_S3_RDS'
8.- Copiar dmp desde S3 Bucket hacía Oracle RDS AWS
Copiamos el archivo de dump desde nuestro S3 Bucket hacía la base RDS en AWS
a) Nos conectamos mediante un cliente (SQL*Plus o Oracle SQL Developer) a nuestra instancia AWS RDS
Para saber como conectarse, por favor puedes ver este link :
b) Una vez conectados, ejecutamos el siguiente código, que copia todo el contenido delS3 Bucket hacía la instancia AWS RDS (Path de S.O. donde reside el RDS)
SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3(
p_bucket_name => 'ligariusbucket1',
p_s3_prefix => '',
p_directory_name => 'INTEGRACION_S3_RDS')
AS TASK_ID FROM DUAL
El resultado en nuestra SQL Developer con el cual conectamos a la instancia Oracle RDS AWS

c) Podemos validar el estado de la tarea que ejecutamos (Download desde S3 Bucket hacía nuestro objeto directorio) mediante la siguiente sentencia ejecutada en Oracle RDS AWS , cambiamos el TASK-ID y procedemos a ejecutar
SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-<TASK-ID>.log'))
Resultado una vez ejecutado el proceso con el TASK-ID correcto, se puede apreciar el mensaje de download exitoso entre el S3 Bucket y el objeto directorio oracle que creamos en nuestra instancia RDS

d) También podemos validar el archivo cargado, leyendo el directorio Oracle desde nuestra Oracle RDS AWS
select * from table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('INTEGRACION_S3_RDS')) order by filename;
9.- Importar dmp desde Oracle Directory Object hacía Oracle RDS AWS
Importamos el archivo dump que se encuentra en nuestra raíz de Oracle RDS hacía la base de datos, recordar que Oracle RDS está montado sobre un Filesystem, al cual nosotros no tenemos acceso
DECLARE
v_hdnl NUMBER;
BEGIN
v_hdnl := DBMS_DATAPUMP.OPEN(
operation => 'IMPORT',
job_mode => 'SCHEMA',
job_name => null);
DBMS_DATAPUMP.ADD_FILE(
handle => v_hdnl,
filename => 'CARGA_DATOS.DMP',
directory => 'INTEGRACION_S3_RDS',
filetype => dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.ADD_FILE(
handle => v_hdnl,
filename => 'CARGA_DATOS.DMP.log',
directory => 'INTEGRACION_S3_RDS',
filetype => dbms_datapump.ku$_file_type_log_file);
DBMS_DATAPUMP.METADATA_FILTER(v_hdnl,'SCHEMA_EXPR','IN (''CARGA2'')');
DBMS_DATAPUMP.metadata_remap (v_hdnl,'REMAP_TABLESPACE','USERS','DATOS');
DBMS_DATAPUMP.START_JOB(v_hdnl);
END;
/
Después simplemente ejecutan la consulta sobre los datos cargados en Oracle RDS AWS
Espero les sirva 😉