View a markdown version of this page

Fin del soporte de RDS Custom para Oracle - Amazon Relational Database Service

Fin del soporte de RDS Custom para Oracle

nota

Aviso de fin de soporte: el 31 de marzo de 2027, AWS dejará de prestar soporte para Amazon RDS Custom para Oracle. Después del 31 de marzo de 2027, ya no podrá acceder a la consola de RDS Custom para Oracle ni a los recursos de RDS Custom para Oracle. Para obtener más información, consulte Fin del soporte de RDS Custom para Oracle.

Descripción general

Tras considerarlo detenidamente, AWS ha tomado la decisión de interrumpir el servicio Amazon RDS Custom para Oracle. El servicio dejará de estar disponible a partir del 31 de marzo de 2027. Esta guía normativa ofrece estrategias de migración detalladas para ayudarle a migrar de RDS Custom para Oracle a DB Oracle autoadministradas en Amazon Elastic Compute Cloud (Amazon EC2).

Fechas clave

  • Del 31 de marzo de 2026 al 31 de marzo de 2027: le recomendamos que migre de RDS Custom para Oracle a Oracle en EC2. Durante este período, puede seguir utilizando RDS Custom para Oracle con las características y el soporte existentes.

  • Después del 31 de marzo de 2027: ya no podrá utilizar el servicio RDS Custom para Oracle.

Público objetivo

Esta guía está destinada a:

  • Administradores de DB responsables de las migraciones de DB de Oracle

  • Arquitectos de nube que planifican estrategias de migración

  • Ingenieros de DevOps que gestionan la infraestructura de DB

  • Responsables de TI que supervisan el proceso de migración

Requisitos previos

Antes de comenzar, asegúrese de que dispone de lo siguiente:

  • Una instancia activa de Amazon RDS Custom para Oracle que ejecute Oracle 19c Enterprise Edition

  • Permisos de AWS Identity and Access Management (IAM) adecuados para crear y administrar instancias de EC2

  • Conocimiento de la arquitectura de su DB (no CDB o CDB de multitenencia con PDB)

  • Planificación de conectividad de red entre las instancias de origen y destino

  • Estrategia de copia de seguridad y recuperación para su migración

Opciones de migración

Como parte del proceso de migración, puede elegir una de las dos opciones de migración en función de sus necesidades empresariales y su caso de uso:

Opción 1: Duplicación activa de RMAN (migración en línea/fuera de línea)

El más adecuado para lo siguiente:
  • Cargas de trabajo que pueden permitirse un tiempo de inactividad planificado durante la transición final

  • Requisitos de migración más sencillos con menos piezas móviles

  • DB a las que desea realizar una migración sencilla y única

  • Escenarios en los que no se necesita una sincronización continua antes de la transición

Características clave
  • Tiempo de inactividad: tiempo de inactividad mínimo durante la transición final (la DB permanece en línea durante la duplicación, tiempo de inactividad breve durante la transición final).

  • Complejidad: menor complejidad con la duplicación directa de la DB.

  • Duración: el tiempo de migración depende del tamaño de la DB y del ancho de banda de la red.

  • Alternativa: requiere mantener la DB de origen hasta que se complete la validación.

  • Capacidad en línea: la DB de origen permanece en línea y accesible durante el proceso de duplicación.

Enfoque de migración: la duplicación activa de RMAN crea una copia exacta de la DB de origen en el destino, copiando los archivos de la DB a través de la red desde la DB de origen, que se encuentra en funcionamiento. La DB de origen permanece en línea y accesible para las aplicaciones durante el proceso de duplicación. En el caso de las DB multitenencia, RMAN duplica automáticamente toda la CDB, incluidas CDB$ROOT, PDB$SEED y todas las DB conectables, en una sola operación. Solo se necesita un breve período de transición para redirigir las aplicaciones a la nueva instancia de EC2.

Opción 2: Oracle Data Guard (migración en línea)

El más adecuado para lo siguiente:
  • Cargas de trabajo de producción que requieren un tiempo de inactividad mínimo

  • DB de misión crítica que deben permanecer disponibles

  • Escenarios en los que se necesita una sincronización continua antes de la transición

  • Migraciones que requieren una función de respaldo integrada

Características clave
  • Tiempo de inactividad: tiempo de inactividad prácticamente nulo (de segundos a minutos para la conmutación).

  • Complejidad: mayor complejidad con la configuración de Data Guard.

  • Duración: tiempo de configuración inicial más sincronización continua hasta la conmutación.

  • Alternativa: capacidad de respaldo integrada mediante el mantenimiento del origen en modo de espera.

Enfoque de migración: Oracle Data Guard mantiene una DB en espera sincronizada mediante el envío y la aplicación continuos de los registros de rehacer desde la DB principal. Cuando esté todo listo para completar la migración, se lleva a cabo una conmutación que convierte el servidor EC2 en espera en el servidor principal con un tiempo de inactividad mínimo. En el caso de las DB multitenencia, Data Guard protege automáticamente toda la CDB, incluidas todas las PDB.

Matriz de decisiones

Utilice la siguiente matriz para elegir la opción de migración adecuada:

Aspecto

Duplicación activa de RMAN

Oracle Data Guard

Disponibilidad de DB de origen

En línea durante la duplicación En línea durante todo el proceso

Tiempo de inactividad aceptable

Minutos a horas (transición final) Segundos a minutos (conmutación)

Complejidad de migración

Más baja Más alto

Sincronización continua

No

Capacidad de opción alternativa

Manual (mantener el origen) Integrada (automática)

Pruebas antes de la transición

Limitado Posibilidad de realizar pruebas completas

Requisitos de ancho de banda de la red

Elevado durante la duplicación Moderado (continuo)

Lo mejor para

La mayoría de las migraciones, entornos de desarrollo/pruebas, transiciones planificadas Producción, sistemas críticos, tiempo de inactividad prácticamente nulo

Consideraciones de arquitectura

Ambas opciones de migración admiten dos arquitecturas de DB de Oracle:

No CDB

DB de Oracle tradicionales de instancia única que no cuentan con la arquitectura multitenencia. Estas DB:

  • Tienen una sola instancia de DB

  • No usan DB conectables (PDB)

  • Son más fáciles de gestionar y migrar

  • Normalmente se denominan ORCL en RDS Custom para Oracle

Multitenencia (CDB con PDB)

DB de contenedor (CDB) que alojan varias DB conectables (PDB), introducidas en Oracle 12c. Estas DB:

  • Tienen una DB de contenedor (CDB) con CDB$ROOT y PDB$SEED

  • Alojan una o más DB conectables (PDB)

  • Proporcionan consolidación de DB y aislamiento de recursos

  • Normalmente, se denominan RDSCDB en RDS Custom para Oracle

  • Usan Oracle Managed Files (OMF) con subdirectorios basados en GUID para archivos de datos de PDB

Nota importante para las migraciones multitenencia: la DB de destino pasará a llamarse ORCL durante el proceso de migración (origen: RDSCDB → destino: ORCL). Esto simplifica la configuración de destino y se ajusta a las convenciones de nomenclatura estándar.

Diferencias clave en el enfoque de migración

Aspecto

No CDB

Multitenencia (CDB con PDB)

Alcance de la migración

DB única CDB completa con todas las PDB

Estado posterior a la migración

DB abierta READ WRITE CDB abierta READ WRITE; PDB en estado MOUNTED

Administración de PDB

N/A Es necesario abrir las PDB y configurar la apertura automática

Limpieza

DB única CDB$ROOT (se extiende a PDB); gestionar usuarios comunes de C#

Conexiones de aplicaciones

Servicios de bases de datos Servicios de PDB (no de CDB)

Archivo de parámetros

Parámetros estándar Requiere enable_pluggable_database=TRUE

Complejidad

Más baja Más elevado debido a la presencia de varios contenedores

Requisitos previos comunes para ambas opciones de migración

Antes de iniciar cualquiera de las opciones de migración, siga los siguientes pasos de requisitos previos:

  1. Inicio y configuración de una instancia de EC2

    Inicie una instancia de EC2 teniendo en cuenta lo siguiente:

    • Tipo de instancia: elija un tipo de instancia de EC2 que cumpla con los requisitos de recursos de su carga de trabajo. Usar la misma clase de instancia que su instancia de RDS Custom es un buen punto de partida. Tenga en cuenta los requisitos de memoria, CPU y ancho de banda de la red.

    • Sistema operativo: Oracle Linux o Red Hat Enterprise Linux (que coincida o sea compatible con su versión del sistema operativo personalizado de RDS)

    • Software de Oracle: instale el software de Oracle Database (con la misma versión principal, la misma versión secundaria, la misma actualización de versión y, a ser posible, los mismos parches únicos que en RDS Custom). Asegúrese de que el software de Oracle esté instalado en /u01/app/oracle/ o en la ubicación que prefiera.

    • Almacenamiento: configure los volúmenes de Amazon EBS con el tamaño e IOPS adecuados para cumplir con sus requisitos de carga de trabajo. Considere la posibilidad de utilizar los volúmenes gp3 para obtener un rendimiento rentable o io2 Block Express para cargas de trabajo de alto rendimiento.

  2. Configuración de la arquitectura de almacenamiento

    1. Almacenamiento en el sistema de archivos (recomendado para la mayoría de los casos)

      • Uso de directorios estándar del sistema de archivos para los archivos de datos de Oracle

      • Más fácil de administrar y adecuado para la mayoría de las cargas de trabajo

      • En esta guía se utilizan ejemplos de almacenamiento de sistemas de archivos

    2. Oracle Automatic Storage Management (ASM)

      • Si su carga de trabajo requiere ASM, instale y configure ASM independiente en la instancia de EC2.

      • Ajuste todos los parámetros de ruta en el archivo de inicialización según corresponda para utilizar grupos de discos ASM (por ejemplo, +DATA, +FRA).

      • El proceso de migración es similar para ASM con ajustes de ruta.

  3. Configuración de mecanismo de transferencia de archivos

    Cree un mecanismo para transferir archivos entre las instancias RDS Custom y EC2. Dispone de varias opciones para hacerlo:

    1. Opción A: Amazon S3 (recomendada para la mayoría de los escenarios)

      • Cree un bucket de S3 o utilice uno existente.

      • Instale y configure AWS CLI en las dos instancias.

      • Para obtener instrucciones, consulte Introducción a la AWS CLI.

    2. Opción B: SCP/SFTP directo

      • Si los puertos SSH están abiertos entre instancias, puede transferir archivos directamente.

      • Adecuado para archivos pequeños, como archivos de parámetros y archivos de contraseñas.

    3. Opción C: Amazon EFS

      • Si ya tiene Amazon EFS montado en ambas instancias, puede usarlo como un sistema de archivos compartidos.

      • Adecuado para entornos con infraestructura EFS existente.

      Esta guía utiliza Amazon S3 para los ejemplos, pero puede adaptar los comandos al método que elija.

  4. Configuración de la conectividad de red

    Asegúrese de que exista conectividad de red entre las instancias de RDS Custom y EC2:

    • Misma VPC: los grupos de seguridad deben permitir el tráfico bidireccional en el puerto de oyente de Oracle (1521 predeterminado o su puerto personalizado).

    • Diferentes VPC (misma cuenta): configure el emparejamiento de VPC y configure tablas de enrutamiento y grupos de seguridad.

    • Diferentes cuentas: configure el emparejamiento de VPC entre cuentas o utilice AWS Transit Gateway.

    • Compruebe la conectividad: utilice ping y telnet para comprobar la conectividad en el puerto de la DB.

  5. Creación de una estructura de directorios en EC2

    La estructura de directorios depende de la arquitectura de su DB:

    ejemplo Para no CDB:
    # Non-CDB directories mkdir -p /u01/app/oracle/oradata/ORCL/controlfile/ mkdir -p /u01/app/oracle/oradata/ORCL/datafile mkdir -p /u01/app/oracle/oradata/ORCL/onlinelog mkdir -p /u01/app/oracle/oradata/ORCL/arch mkdir -p /u01/app/oracle/admin/ORCL/adump mkdir -p /u01/app/oracle/backup # Set ownership chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chown -R oracle:oinstall /u01/app/oracle/admin/ORCL chown -R oracle:oinstall /u01/app/oracle/backup
    ejemplo Para multitenencia (CDB con PDB)
    # CDB directories mkdir -p /u01/app/oracle/oradata/ORCL/controlfile/ mkdir -p /u01/app/oracle/oradata/ORCL/cdb/datafile mkdir -p /u01/app/oracle/oradata/ORCL/pdbseed/datafile mkdir -p /u01/app/oracle/oradata/ORCL/onlinelog mkdir -p /u01/app/oracle/oradata/ORCL/arch mkdir -p /u01/app/oracle/admin/ORCL/adump mkdir -p /u01/app/oracle/backup # PDB directories (RDS Custom uses OMF with GUID-based paths) # Create a generic pdb directory - migration will create subdirectories as needed mkdir -p /u01/app/oracle/oradata/ORCL/pdb/datafile # Set ownership chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chown -R oracle:oinstall /u01/app/oracle/admin/ORCL chown -R oracle:oinstall /u01/app/oracle/backup
    nota

    RDS Custom para Oracle utiliza Oracle Managed Files (OMF) para los archivos de datos de las PDB con subdirectorios basados en GUID (por ejemplo, /rdsdbdata/db/pdb/RDSCDB_A/{GUID}/datafile/). El proceso de migración creará automáticamente la estructura de subdirectorios necesaria en el destino. Solo tiene que crear los directorios principales.

    Estrategia de almacenamiento: considere la posibilidad de utilizar un volumen de EBS independiente para /u01/app/oracle/backup, a fin de poder desconectarlo y eliminarlo fácilmente una vez finalizada la migración, lo que le permitirá reducir los costes de almacenamiento.

  6. Comprobación de la configuración de la DB de origen

Antes de iniciar la migración, compruebe la configuración de la DB de origen:

  1. Inicie sesión en el host de DB personalizado de RDS como usuario de rdsdb y configure el entorno:

    ejemplo
    # For non-CDB export ORACLE_HOME=/rdsdbbin/oracle.19.custom.r1.EE.1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH # For multitenant CDB export ORACLE_HOME=/rdsdbbin/oracle.19.custom.r1.EE-CDB.1 export ORACLE_SID=RDSCDB export PATH=$ORACLE_HOME/bin:$PATH
  2. Conéctese a la DB y compruebe la arquitectura:

    ejemplo
    sqlplus / as sysdba SQL> SELECT name, cdb, open_mode, log_mode FROM v$database;
    ejemplo Para no CDB, resultado esperado
    NAME CDB OPEN_MODE LOG_MODE --------- --- -------------------- ------------ ORCL NO READ WRITE ARCHIVELOG
    ejemplo Para multitenencia (CDB), resultado esperado:
    NAME CDB OPEN_MODE LOG_MODE --------- --- -------------------- ------------ RDSCDB YES READ WRITE ARCHIVELOG
  3. Si tiene una CDB multitenencia, enumere todas las PDB y su estado:

    ejemplo
    SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;

    Resultado esperado (ejemplo con 1 PDB denominada ORCLDB):

    ejemplo
    CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB READ WRITE NO
  4. Compruebe el tamaño total de la DB:

    ejemplo Para no CDB:
    SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM dba_data_files;
    ejemplo Para multitenencia:
    -- Total CDB size (all containers) SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM cdb_data_files; -- Size per PDB SQL> SELECT p.name AS pdb_name, ROUND(SUM(d.bytes)/1024/1024/1024, 2) AS size_gb FROM v$pdbs p JOIN cdb_data_files d ON p.con_id = d.con_id GROUP BY p.name, p.con_id ORDER BY p.con_id;

Opción 1: Migración física usando la duplicación activa de RMAN

En esta sección se describen los pasos detallados para migrar su DB de Oracle desde RDS Custom para Oracle a EC2 usando la duplicación activa de RMAN. Este método realiza una duplicación a partir de una DB activa y en funcionamiento manteniendo la DB de origen en línea y accesible durante el proceso de migración.

Cuándo usar la duplicación activa de RMAN

Elija la duplicación activa de RMAN en las siguientes circunstancias:

  • Desea mantener la DB de origen en línea y accesible durante la migración.

  • Puede permitirse un breve período de transición para la redirección final de la aplicación.

  • Desea un proceso de migración sencillo con menos elementos que mover.

  • El tamaño de la DB y el ancho de banda de la red permiten un tiempo de duplicación razonable.

  • No necesita sincronización continua antes de la transición.

  • Va a migrar DB de producción, desarrollo o prueba.

Descripción general de la duplicación activa de RMAN

La duplicación activa de RMAN no requiere realizar una copia de seguridad de la DB de origen ni ponerla fuera de línea. Duplica la DB de origen, que está en funcionamiento, en el destino copiando los archivos de la DB a través de la red, mientras que la DB de origen permanece en línea y accesible para las aplicaciones.

Ventajas clave:
  • La DB de origen permanece en línea: las aplicaciones pueden seguir accediendo a la DB de origen durante la duplicación

  • No se requiere copia de seguridad: elimina la necesidad de un almacenamiento intermedio para copias de seguridad.

  • Transferencia de red directa: los archivos de la DB se copian directamente del origen al destino.

  • Coherencia automática: RMAN garantiza que la DB duplicada sea coherente.

  • Operación única: en el caso de multitenencia, duplica toda la CDB, incluidas todas las PDB, en una sola operación.

El proceso de duplicación crea una copia exacta de la DB de origen en el destino, incluyendo todos los archivos de datos, los archivos de control y los registros de rehacer. La DB de origen sigue atendiendo las solicitudes de las aplicaciones durante todo el proceso de duplicación. Solo se necesita un breve periodo de transición al final para redirigir las aplicaciones del origen al destino.

Plazo habitual
  1. Fase de duplicación (la DB de origen permanece en línea): de 30 minutos a varias horas, dependiendo del tamaño de la DB.

  2. Fase de validación (el origen permanece en línea): de unas horas a varios días, según sea necesario.

  3. Fase de transición (tiempo de inactividad breve): minutos para redirigir las aplicaciones a EC2.

Flujo de trabajo de migración para la duplicación activa de RMAN

Pasos para la instancia de DB RDS Custom (origen):
  1. Pause la automatización de Amazon RDS Custom.

  2. Verifique la arquitectura de la DB (no CDB o CDB con PDB).

  3. Cree un archivo de contraseñas y un archivo de parámetros a partir de la DB de origen.

  4. Copie el archivo de contraseñas y el archivo de parámetros en la instancia de EC2 de destino.

  5. Compruebe que la DB de origen se esté ejecutando en modo de registro de archivo.

  6. Configure tnsnames.ora en el servidor de DB de RDS Custom.

Pasos de la instancia de DB de EC2 (destino):
  1. Edite el archivo de parámetros de EC2 (específico de la arquitectura).

  2. Configure tnsnames.ora en EC2.

  3. Configure el entorno de la instancia de EC2.

  4. Configure el oyente de Oracle en EC2.

  5. Inicie la DB en EC2 en estado NOMOUNT.

Pasos de duplicación de RMAN:
  1. Realice la duplicación activa de RMAN.

  2. Abra la DB (y las PDB multitenencia).

  3. Configure la apertura automática de PDB (solo multitenencia).

  4. Elimine usuarios y objetos específicos de RDS Custom.

  5. Cree SPFILE y configure el inicio automático.

  6. Reanude la automatización de Amazon RDS Custom en el origen (si lo mantiene activo).

Paso 1: Pausa de automatización de Amazon RDS Custom

Ponga en pausa el modo de automatización de su instancia RDS Custom antes de continuar con los pasos de migración para asegurarse de que la automatización no interfiera con la actividad de RMAN. El parámetro --resume-full-automation-mode-minute (240 minutos = 4 horas en este ejemplo) debe ajustarse en función del tamaño de su DB y del tiempo previsto para la duplicación.

Importante: Pausar la automatización no afecta la disponibilidad de la DB. La DB permanece en línea y accesible para las aplicaciones durante el proceso de duplicación.

ejemplo
aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode all-paused \ --resume-full-automation-mode-minute 240 \ --region us-east-1 --query 'DBInstances[0].AutomationMode'

Valide el estado de la automatización:

ejemplo
aws ds describe-db-instances \ --db-instance-identifier my-custom-instance \ --region us-east-1 \ --query 'DBInstances[0].AutomationMode'

Resultado previsto: "all-paused"

Paso 2: Creación de archivos de contraseñas y de parámetros

Cree un archivo de contraseñas utilizando orapwd. Obtenga la contraseña SYS de AWS Secrets Manager (almacenada durante la creación de la instancia de RDS Custom).

ejemplo
# Non-CDB $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwORCL password=<SYS_PASSWORD> entries=10 # Multitenant $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwRDSCDB password=<SYS_PASSWORD> entries=10

Cree un archivo de parámetros a partir de la DB de origen:

ejemplo
sqlplus / as sysdba SQL> CREATE PFILE='/tmp/initORCL.ora' FROM SPFILE; -- Non-CDB SQL> CREATE PFILE='/tmp/initRDSCDB.ora' FROM SPFILE; -- Multitenant

El archivo de parámetros generado contendrá rutas y parámetros específicos de RDS Custom. En el caso de multitenencia, los parámetros clave incluyen:

  • enable_pluggable_database= TRUE (crítico para multitenencia)

  • noncdb_compatible=TRUE (para compatibilidad con versiones anteriores)

  • Rutas de archivos para CDB$ROOT, PDB$SEED y todas las PDB

  • db_create_file_dest y db_create_online_log_dest_1 para OMF

Paso 3: Transferencia de archivos a EC2

Elija su método preferido para la transferencia de archivos. En esta guía, se utiliza Amazon S3 para los ejemplos.

Uso de Amazon S3:

Usando Amazon S3:

ejemplo Para no CDB:
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /tmp/initORCL.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwORCL s3://<YOUR_BUCKET>/ # On EC2, download files aws s3 cp s3://<YOUR_BUCKET>/initORCL.ora $ORACLE_HOME/dbs/ aws s3 cp s3://<YOUR_BUCKET>/orapwORCL $ORACLE_HOME/dbs/
ejemplo Para multitenencia
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /tmp/initRDSCDB.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwRDSCDB s3://<YOUR_BUCKET>/ # On EC2, download and rename files to use ORCL naming aws s3 cp s3://<YOUR_BUCKET>/initRDSCDB.ora $ORACLE_HOME/dbs/initORCL.ora aws s3 cp s3://<YOUR_BUCKET>/orapwRDSCDB $ORACLE_HOME/dbs/orapwORCL

Valide los archivos en EC2:

ejemplo
ls -l $ORACLE_HOME/dbs/initORCL.ora ls -l $ORACLE_HOME/dbs/orapwORCL

Paso 4: Edición del archivo de parámetros en EC2

El archivo de parámetros debe modificarse con cuidado para garantizar que la migración se realice correctamente. Este es uno de los pasos más importantes del proceso de migración.

Edite $ORACLE_HOME/dbs/initORCL.ora en la instancia de EC2 y realice los siguientes cambios críticos:

  1. Actualice el nombre de la DB: para multitenencia, cambie todas las apariciones de RDSCDB a ORCL.

  2. Convierta rutas de RDS Custom en rutas de EC2: sustituya /rdsdbdata/ por /u01/app/oracle/.

  3. Elimine parámetros específicos de RDS Custom.
    • dg_broker_config_file1 y dg_broker_config_file2 (si está presente, indica que existía una réplica)

    • standby_file_management (si está presente)

    • spfile (crearemos un SPFILE nuevo más adelante)

    • Cualquier parámetro log_archive_dest que apunte a un destino en espera (conserve solo log_archive_dest_1 para el archivado local)

  4. Añada parámetros de conversión de nombres de archivo (véase más abajo).

  5. Ajuste los parámetros de memoria en función del tamaño de la instancia de EC2 (opcional pero recomendable).

Descripción de los parámetros de conversión de nombres de archivos:

Los parámetros LOG_FILE_NAME_CONVERT y DB_FILE_NAME_CONVERT son críticos para la duplicación de RMAN. Indican a RMAN cómo asignar las rutas de los archivos de origen a las rutas de los archivos de destino durante el proceso de duplicación. Sin estos parámetros, RMAN intentará crear archivos en las mismas rutas que el origen, lo que fallará en EC2.

Consideraciones clave:
  • Cada parámetro acepta pares de cadenas: la ruta de origen seguida de la ruta de destino.

  • Se pueden especificar varios pares en un solo parámetro.

  • En el caso de multitenencia, debe asignar rutas para CDB$ROOT, PDB$SEED, y todas las PDB.

  • El orden de los pares es importante: RMAN los procesa en el orden especificado.

  • Las rutas distinguen entre mayúsculas y minúsculas y deben coincidir exactamente.

Asignaciones de rutas:

No CDB:

Ruta de RDS Custom

Ruta de EC2

Descripción

/rdsdbbin /u01/app/oracle Base de Oracle
/rdsdbdata/db/ORCL_A/datafile/ /u01/app/oracle/oradata/ORCL/datafile/ Archivos de datos
/rdsdbdata/db/ORCL_A/controlfile/ /u01/app/oracle/oradata/ORCL/controlfile/ Archivos de control
/rdsdbdata/db/ORCL_A/onlinelog/ /u01/app/oracle/oradata/ORCL/onlinelog/ Registros de rehacer en línea
/rdsdbdata/db/ORCL_A/arch/ /u01/app/oracle/oradata/ORCL/arch/ Registros de archivos
/rdsdbdata/admin/ORCL/adump /u01/app/oracle/admin/ORCL/adump Volcado de auditoría
/rdsdbdata/log /u01/app/oracle Destino de diagnóstico
Multitenant

Ruta de RDS Custom

Ruta de EC2

Descripción

/rdsdbbin /u01/app/oracle Base de Oracle
/rdsdbdata/db/cdb/RDSCDB/datafile/ /u01/app/oracle/oradata/ORCL/cdb/datafile/ Archivos de datos raíz de CDB
/rdsdbdata/db/cdb/pdbseed/ /u01/app/oracle/oradata/ORCL/pdbseed/datafile/ Archivos de datos de PDB$SEED
/rdsdbdata/db/pdb/RDSCDB_A/ /u01/app/oracle/oradata/ORCL/pdb/datafile/ Archivos de datos de PDB (OMF con GUID)
/rdsdbdata/db/cdb/RDSCDB_A/controlfile/ /u01/app/oracle/oradata/ORCL/controlfile/ Archivos de control
/rdsdbdata/db/cdb/RDSCDB_A/onlinelog/ /u01/app/oracle/oradata/ORCL/onlinelog/ Registros de rehacer en línea
/rdsdbdata/db/cdb/RDSCDB_A/arch/redolog /u01/app/oracle/oradata/ORCL/arch/ Registros de archivos
/rdsdbdata/admin/RDSCDB/adump /u01/app/oracle/admin/ORCL/adump Volcado de auditoría
/rdsdbdata/log /u01/app/oracle Destino de diagnóstico

Añadir parámetros de conversión:

ejemplo No CDB:
*.DB_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/datafile/','/u01/app/oracle/oradata/ORCL/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
ejemplo Multitenencia (debe incluir las asignaciones para la raíz de CDB, PDB$SEED y todas las rutas de PDB):
*.DB_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB/datafile/','/u01/app/oracle/oradata/ORCL/cdb/datafile/','/rdsdbdata/db/cdb/pdbseed/','/u01/app/oracle/oradata/ORCL/pdbseed/datafile/','/rdsdbdata/db/pdb/RDSCDB_A/','/u01/app/oracle/oradata/ORCL/pdb/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'

Importante: En el caso de multitenencia, asegúrese de que enable_pluggable_database=TRUE esté presente en el archivo de parámetros. RDS Custom utiliza OMF para los archivos de datos de PDB con subdirectorios basados en GUID; la asignación de rutas se encarga de ello automáticamente.

Archivos de parámetros de ejemplo completos:

ejemplo Ejemplo de archivo de parámetros no CDB (initORCL.ora):
ORCL.__data_transfer_cache_size=0 ORCL.__db_cache_size=6039797760 ORCL.__inmemory_ext_roarea=0 ORCL.__inmemory_ext_rwarea=0 ORCL.__java_pool_size=0 ORCL.__large_pool_size=33554432 ORCL.__oracle_base='/u01/app/oracle' ORCL.__pga_aggregate_target=4966055936 ORCL.__sga_target=7449083904 ORCL.__shared_io_pool_size=134217728 ORCL.__shared_pool_size=1207959552 ORCL.__streams_pool_size=0 ORCL.__unified_pga_pool_size=0 *.archive_lag_target=300 *.audit_file_dest='/u01/app/oracle/admin/ORCL/adump' *.compatible='19.0.0' *.control_files='/u01/app/oracle/oradata/ORCL/controlfile/control-01.ctl' *.db_block_checking='MEDIUM' *.db_create_file_dest='/u01/app/oracle/oradata/ORCL' *.db_name='ORCL' *.db_recovery_file_dest_size=1073741824 *.db_unique_name='ORCL' *.dbfips_140=FALSE *.diagnostic_dest='/u01/app/oracle' *.filesystemio_options='setall' *.heat_map='OFF' *.job_queue_processes=50 *.local_listener='(address=(protocol=tcp)(host=)(port=1521))' *.log_archive_dest_1='location="/u01/app/oracle/oradata/ORCL/arch", valid_for=(ALL_LOGFILES,ALL_ROLES)' *.log_archive_format='-%s-%t-%r.arc' *.max_string_size='STANDARD' *.memory_max_target=12385852416 *.memory_target=12385852416 *.open_cursors=300 *.pga_aggregate_target=0 *.processes=1673 *.recyclebin='OFF' *.sga_target=0 *.undo_tablespace='UNDO_T1' *.use_large_pages='FALSE' *.DB_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/datafile/','/u01/app/oracle/oradata/ORCL/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/ORCL_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
ejemplo Ejemplo de archivo de parámetros multitenencia (initORCL.ora):
ORCL.__data_transfer_cache_size=0 ORCL.__db_cache_size=6006243328 ORCL.__inmemory_ext_roarea=0 ORCL.__inmemory_ext_rwarea=0 ORCL.__java_pool_size=0 ORCL.__large_pool_size=33554432 ORCL.__oracle_base='/u01/app/oracle' ORCL.__pga_aggregate_target=4966055936 ORCL.__sga_target=7415529472 ORCL.__shared_io_pool_size=134217728 ORCL.__shared_pool_size=1207959552 ORCL.__streams_pool_size=0 ORCL.__unified_pga_pool_size=0 *.archive_lag_target=300 *.audit_file_dest='/u01/app/oracle/admin/ORCL/adump' *.compatible='19.0.0' *.control_files='/u01/app/oracle/oradata/ORCL/controlfile/control-01.ctl' *.db_block_checking='MEDIUM' *.db_create_file_dest='/u01/app/oracle/oradata/ORCL/pdb/datafile' *.db_create_online_log_dest_1='/u01/app/oracle/oradata/ORCL' *.db_name='ORCL' *.db_recovery_file_dest_size=1073741824 *.db_unique_name='ORCL' *.dbfips_140=FALSE *.diagnostic_dest='/u01/app/oracle' *.enable_pluggable_database=TRUE *.filesystemio_options='setall' *.heat_map='OFF' *.job_queue_processes=50 *.local_listener='(address=(protocol=tcp)(host=)(port=1521))' *.log_archive_dest_1='location="/u01/app/oracle/oradata/ORCL/arch", valid_for=(ALL_LOGFILES,ALL_ROLES)' *.log_archive_format='-%s-%t-%r.arc' *.max_string_size='STANDARD' *.memory_max_target=12361688064 *.memory_target=12361688064 *.noncdb_compatible=TRUE *.open_cursors=300 *.pga_aggregate_target=0 *.processes=1670 *.recyclebin='OFF' *.sga_target=0 *.undo_tablespace='UNDO_T1' *.use_large_pages='FALSE' *.DB_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB/datafile/','/u01/app/oracle/oradata/ORCL/cdb/datafile/','/rdsdbdata/db/cdb/pdbseed/','/u01/app/oracle/oradata/ORCL/pdbseed/datafile/','/rdsdbdata/db/pdb/RDSCDB_A/','/u01/app/oracle/oradata/ORCL/pdb/datafile/' *.LOG_FILE_NAME_CONVERT='/rdsdbdata/db/cdb/RDSCDB_A/onlinelog/','/u01/app/oracle/oradata/ORCL/onlinelog/'
Explicaciones de los parámetros clave:
  • enable_pluggable_database=TRUE: necesario para CDB multitenencia. Este parámetro habilita la característica de DB conectable.

  • noncdb_compatible=TRUE: configurado por RDS Custom para garantizar la compatibilidad con versiones anteriores. Se puede conservar o quitar según sus requisitos.

  • db_create_file_dest: especifica la ubicación predeterminada de Oracle Managed Files (OMF). En el caso de multitenencia, apunta al directorio de archivos de datos de PDB.

  • db_create_online_log_dest_1: especifica la ubicación de los registros de rehacer en línea cuando se utiliza OMF.

  • DB_FILE_NAME_CONVERT: es crítico para la duplicación de RMAN. Asigna las rutas de los archivos de datos de origen a las rutas de destino.

  • LOG_FILE_NAME_CONVERT: asigna las rutas de registro de rehacer de origen a las rutas de destino.

  • memory_target y memory_max_target: ajústelos en función de la memoria de su instancia de EC2. Los valores que se muestran son ejemplos.

  • processes: número máximo de procesos del sistema operativo que pueden conectarse a Oracle. Ajústelo en función de su carga de trabajo.

Pautas de tamaño de la memoria:

Al ajustar los parámetros de memoria de su instancia de EC2:

Memoria de la instancia de EC2

memory_target recomendado

memory_max_target recomendado

16 GB 12 GB (12884901888 bytes) 14 GB (15032385536 bytes)
32 GB 24 GB (25769803776 bytes) 28 GB (30064771072 bytes)
64 GB 48 GB (51539607552 bytes) 56 GB (60129542144 bytes)
128 GB 96 GB (103079215104 bytes) 112 GB (120259084288 bytes)

Deje aproximadamente entre un 20 y un 25 % de la memoria del sistema para el sistema operativo y otros procesos.

Paso 5: Configuración de TNS y del oyente

En ambas instancias, añada entradas de TNS a: tnsnames.ora.

ejemplo No CDB:
DB_SOURCE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL))) DB_TARGET = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
ejemplo Multitenencia:
DB_SOURCE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = RDSCDB))) DB_TARGET = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
ejemplo Configure el oyente en EC2 ($ORACLE_HOME/network/admin/listener.ora):
LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <EC2_IP>)(PORT = 1521))) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1) (SID_NAME = ORCL)))
ejemplo Inicie el oyente:
lsnrctl start
nota

En el caso de la duplicación activa de RMAN, las entradas de TNS se conectan a la instancia de la DB utilizando el SID (no SERVICE_NAME). En el caso de multitenencia, se conecta a la CDB y RMAN duplica automáticamente todas las PDB.

Paso 6: Inicio de la DB en NOMOUNT en EC2

ejemplo
export ORACLE_SID=ORCL export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH sqlplus / as sysdba SQL> STARTUP NOMOUNT PFILE='$ORACLE_HOME/dbs/initORCL.ora';
ejemplo Verifique los parámetros:
SQL> SHOW PARAMETER db_name SQL> SHOW PARAMETER control_files SQL> SHOW PARAMETER enable_pluggable_database -- For multitenant

Paso 7: Realización de la duplicación activa de RMAN

La duplicación activa de RMAN copia la DB desde el origen activo y en funcionamiento al destino. La DB de origen permanece en línea y accesible para las aplicaciones durante todo este proceso.

Conecte RMAN tanto a la instancia de origen como a la de destino:

ejemplo
rman target sys/<password>@DB_SOURCE auxiliary sys/<password>@DB_TARGET
ejemplo Resultado esperado para no CDB:
Recovery Manager: Release 19.0.0.0.0 - Production connected to target database: ORCL (DBID=4089929259) connected to auxiliary database: ORCL (not mounted)
ejemplo Resultado esperado para multitenencia:
Recovery Manager: Release 19.0.0.0.0 - Production connected to target database: RDSCDB (DBID=4089929259) connected to auxiliary database: ORCL (not mounted)
ejemplo Ejecute el comando de duplicación activa:
RMAN> DUPLICATE DATABASE TO 'ORCL' FROM ACTIVE DATABASE NOFILENAMECHECK;
nota
  • El origen permanece en línea: la DB de origen sigue atendiendo las solicitudes de las aplicaciones durante la duplicación.

  • Para no CDB: esto duplica toda la DB mientras permanece en línea.

  • Para multitenencia: esto duplica toda la CDB, incluido CDB$ROOT, PDB$SEED y todas las PDB en una sola operación mientras el origen permanece en línea.

  • NOFILENAMECHECK: permite que RMAN continúe incluso si los nombres de los archivos difieren entre el origen y el destino.

  • Duración: depende del tamaño de la DB y del ancho de banda de la red. Para una DB de 100 GB, espere entre 30 y 60 minutos.

  • Repercusión en la red: alto consumo de ancho de banda de la red durante la duplicación, pero la DB de origen sigue estando accesible.

El proceso de duplicación activa de RMAN incluye varias fases:
  1. Conexión a DB de origen y destino

  2. Creación de un SPFILE a partir de la memoria en el destino

  3. Restauración del archivo de control en el destino

  4. Montaje de la DB de destino

  5. Copia de todos los archivos de datos del origen al destino a través de la red (el origen permanece en línea)

  6. Recuperación de la DB de destino

  7. Apertura de la DB de destino con RESETLOGS

Durante la duplicación, la DB de origen:
  • Permanece en modo READ WRITE.

  • Sigue aceptando conexiones.

  • Procesa las transacciones con normalidad.

  • Genera registros de rehacer con normalidad.

  • Está totalmente accesible para las aplicaciones.

ejemplo Supervisión del progreso en otra sesión:
SQL> SELECT sid, serial#, sofar, totalwork, ROUND(sofar/totalwork*100,2) pct_complete FROM v$session_longops WHERE totalwork > 0 AND sofar <> totalwork;

Supervisión detallada y resolución de problemas durante la duplicación de RMAN:

Mientras se ejecuta la duplicación de RMAN, puede supervisar el avance mediante varios métodos:

  1. Supervisión de resultado de RMAN:

    La sesión RMAN mostrará información detallada sobre el progreso, que incluye:

    • Asignación de canales

    • Progreso de la copia del archivo de datos

    • Tiempo de finalización estimado

    • Bytes procesados

    channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00001 name=/rdsdbdata/db/ORCL_A/datafile/system01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/system01.dbf tag=TAG20260303T120000 channel ORA_AUX_DISK_1: datafile copy complete, elapsed time: 00:05:23 channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00003 name=/rdsdbdata/db/ORCL_A/datafile/sysaux01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/sysaux01.dbf tag=TAG20260303T120000
    ejemplo Ejemplo de código de salida:
    channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00001 name=/rdsdbdata/db/ORCL_A/datafile/system01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/system01.dbf tag=TAG20260303T120000 channel ORA_AUX_DISK_1: datafile copy complete, elapsed time: 00:05:23 channel ORA_AUX_DISK_1: starting datafile copy input datafile file number=00003 name=/rdsdbdata/db/ORCL_A/datafile/sysaux01.dbf output file name=/u01/app/oracle/oradata/ORCL/datafile/sysaux01.dbf tag=TAG20260303T120000
  2. Supervisión de las operaciones de larga duración:

    ejemplo En una sesión independiente de SQL*Plus en la instancia de EC2 de destino:
    SQL> SELECT sid, serial#, opname, sofar, totalwork, ROUND(sofar/totalwork*100,2) pct_complete, time_remaining, elapsed_seconds FROM v$session_longops WHERE totalwork > 0 AND sofar <> totalwork ORDER BY start_time;
    Esta consulta muestra lo siguiente:
    • opname: nombre de la operación (por ejemplo, “RMAN: restauración completa del archivo de datos”)

    • sofar: bloques procesados hasta el momento

    • totalwork: número total de bloques que se van a procesar

    • pct_complete: porcentaje completado

    • time_remaining: segundos restantes estimados

    • elapsed_seconds: tiempo transcurrido hasta el momento

  3. Supervisión de los canales de RMAN:

    ejemplo
    SQL> SELECT sid, serial#, context, sofar, totalwork, ROUND(sofar/totalwork*100,2) pct_complete FROM v$session_longops WHERE opname LIKE 'RMAN%' AND totalwork > 0 AND sofar <> totalwork;
  4. Comprobación del registro de alertas:

    ejemplo En la instancia de EC2 de destino, supervise el registro de alertas para detectar cualquier error o advertencia:
    tail -f $ORACLE_BASE/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log
    Problemas comunes durante la duplicación de RMAN:
    • Tiempo de espera de la red

      RMAN-03009: failure of duplicate command on ORA_AUX_DISK_1 channel ORA-03135: connection lost contact

      Solución: aumente los valores del tiempo de espera de la red en sqlnet.ora en ambas instancias:

      SQLNET.RECV_TIMEOUT=600 SQLNET.SEND_TIMEOUT=600
    • Espacio insuficiente en el destino

      RMAN-03009: failure of duplicate command ORA-19504: failed to create file "/u01/app/oracle/oradata/ORCL/datafile/users01.dbf" ORA-27040: file create error, unable to create file Linux-x86_64 Error: 28: No space left on device

      Solución: compruebe el espacio disponible y añada más capacidad de volumen de EBS:

      df -h /u01/app/oracle/oradata
    • Errores en el archivo de parámetros

      RMAN-05021: this configuration cannot be used RMAN-06004: ORACLE error from auxiliary database: ORA-01261: Parameter db_create_file_dest destination string cannot be translated

      Solución: compruebe que todos los directorios del archivo de parámetros existen y tienen los permisos adecuados.

    • Discrepancia en el archivo de contraseñas

      RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of duplicate command at 03/03/2026 12:00:00 RMAN-06136: ORACLE error from auxiliary database: ORA-01017: invalid username/password; logon denied

      Solución: asegúrese de que el archivo de contraseñas de destino coincida con el de origen y tenga el nombre correcto (orapwORCL).

Paso 8: Apertura de las PDB (solo para multitenencia)

Una vez finalizada la duplicación de RMAN, la CDB en EC2 está abierta en modo READ WRITE, pero todas las PDB tienen el estado MOUNTED. Este es el comportamiento esperado: debe abrirlas manualmente.

Compruebe el estado actual de la PDB:

SQL> SELECT con_id, name, open_mode FROM v$pdbs;

Resultado esperado (ejemplo con una PDB denominada ORCLDB):

CON_ID NAME OPEN_MODE ---------- ------------------------------ ---------- 2 PDB$SEED READ ONLY 3 ORCLDB MOUNTED

Abra todas las PDB:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN; Pluggable database altered.

Compruebe que todas las PDB estén ahora abiertas en modo READ WRITE:

SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;

Resultado previsto:

CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB READ WRITE NO

Configure la apertura automática al iniciar el sistema mediante el método de estado de guardado (recomendado para Oracle 19c):

SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE; Pluggable database altered.

Esto indica a Oracle que recuerde el estado actual de apertura de las PDB y lo restablezca al iniciar la CDB.

Compruebe el estado guardado:

SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;

Compruebe que los servicios de PDB estén registrados en el oyente:

lsnrctl services

El resultado esperado debería mostrar los servicios para la CDB y cada PDB. Si los servicios no se muestran:

SQL> ALTER SYSTEM REGISTER;

A continuación, vuelva a comprobarlo con lsnrctl services.

Paso 9: Eliminación de objetos de RDS Custom

Dado que ahora se trata de una DB autoadministrada en EC2, debe eliminar los usuarios y objetos específicos de RDS Custom. El proceso de limpieza difiere entre las arquitecturas multitenencia y las no CDB.

importante

Antes de eliminar usuarios y espacios de tabla específicos de RDS, compruebe que no existan objetos de aplicación en estos esquemas:

SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE owner IN ('RDSADMIN', 'RDS_DATAGUARD') AND object_name NOT LIKE 'RDS%' AND object_name NOT LIKE 'SYS_%' GROUP BY owner, object_type;

Si encuentra algún objeto de aplicación, mígrelo a los esquemas de aplicación adecuados antes de continuar.

ejemplo No CDB:
SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';

Resultado previsto: no rows selected

Multitenencia:

En un entorno multitenencia, RDS Custom crea usuarios comunes en CDB$ROOT que se ven en todas las PDB. Debe limpiar desde CDB$ROOT.

-- Connect to CDB$ROOT SQL> SHOW CON_NAME; -- Check for RDS-specific common users (including C## prefixed users) SQL> SELECT username, common, con_id FROM cdb_users WHERE username LIKE '%RDS%' OR username LIKE 'C##RDS%' ORDER BY username; -- Drop non-common users SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; -- If any C## common users exist -- SQL> DROP USER C##RDSADMIN CASCADE ; -- Drop directories and tablespace SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal from CDB$ROOT SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%'; -- Verify removal from each PDB SQL> ALTER SESSION SET CONTAINER = <PDB_NAME>; SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';

Resultado esperado para todas las consultas: no rows selected

Paso 10: Configuración del inicio automático

Cree SPFILE:

SQL> CREATE SPFILE FROM PFILE='$ORACLE_HOME/dbs/initORCL.ora'; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;

En el caso de multitenencia, asegúrese de que las PDB estén abiertas:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

Editar /etc/oratab:

ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y

Paso 11: Validación final

ejemplo No CDB:
SQL> SELECT name, open_mode, log_mode FROM v$database; SQL> SELECT SUM(bytes)/1024/1024/1024 AS size_gb FROM dba_data_files; SQL> SELECT COUNT(*) FROM dba_objects WHERE status = 'INVALID';
ejemplo Multitenencia:
SQL> SELECT name, open_mode, log_mode, cdb FROM v$database; SQL> SELECT con_id, name, open_mode FROM v$pdbs; SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM cdb_data_files; SQL> SELECT con_id, COUNT(*) FROM cdb_objects WHERE status = 'INVALID' GROUP BY con_id;
Test application connectivity: # Non-CDB sqlplus <app_user>/<password>@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) sqlplus <app_user>/<password>@<EC2_IP>:1521/<PDB_NAME>

Paso 12: Reanudación de la automatización de RDS Custom

aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode full \ --region us-east-1

Opción 2: Migración física mediante Oracle Data Guard

En esta sección se describen los pasos detallados para migrar su DB de Oracle de RDS Custom para Oracle a EC2 utilizando Oracle Data Guard. Este método es adecuado para migraciones que requieren un tiempo de inactividad mínimo.

Cuándo utilizar Oracle Data Guard

Elija Oracle Data Guard en las siguientes circunstancias:
  • Necesita un tiempo de inactividad mínimo (de segundos a minutos para la conmutación).

  • Va a migrar DB de producción o de importancia crítica.

  • Necesita sincronización continua antes de la transición.

  • Desea disponer de una función de respaldo integrada.

  • Debe probar la DB de destino antes de confirmar la migración.

Descripción general de Oracle Data Guard

Oracle Data Guard mantiene una DB en espera sincronizada mediante el envío y la aplicación continuos de los registros de rehacer desde la DB principal. Cuando esté todo listo para completar la migración, se lleva a cabo una conmutación que convierte el servidor EC2 en espera en el servidor principal con un tiempo de inactividad mínimo (segundos a minutos). En el caso de las DB multitenencia, Data Guard protege automáticamente toda la CDB, incluidas todas las PDB. Las acciones de rehacer generadas por cualquier PDB se envían al servidor en espera y se aplican a la PDB correspondiente en dicho servidor.

Flujo de trabajo de migración para Oracle Data Guard

Pasos de la instancia de DB de RDS Custom (principal):
  1. Pause la automatización de Amazon RDS Custom.

  2. Verifique la arquitectura de la DB (no CDB o CDB con PDB).

  3. Compruebe que la DB principal se está ejecutando en modo de registro de archivo y que FORCE_LOGGING está habilitado.

  4. Cree un archivo de contraseñas.

  5. Realice una copia de seguridad en línea de la DB principal mediante RMAN (o utilice la duplicación activa).

  6. Cree un archivo de parámetros a partir de la DB de origen.

  7. Copie los conjuntos de copias de seguridad, el archivo de parámetros y el archivo de contraseñas en la instancia de EC2 de destino.

Pasos de la instancia de DB de EC2 (en espera):
  1. Copie todos los archivos del origen en la instancia de EC2.

  2. Copie el archivo de contraseñas en la instancia de EC2.

  3. Edite el archivo de parámetros de EC2 (específico de la arquitectura).

  4. Cree el archivo de parámetros del servidor a partir del archivo de parámetros.

  5. Restaure el archivo de control y la DB en espera.

Pasos de configuración de Data Guard:
  1. Configure los oyentes de Oracle en ambas instancias.

  2. Configure tnsnames.ora en ambas instancias.

  3. Inicie el agente de Oracle Data Guard en ambas instancias (opcional, pero recomendable).

  4. Habilite la configuración de Oracle Data Guard.

  5. Configure fal_server y fal_client en la instancia de reserva de EC2.

  6. Configure los archivos de registro de rehacer en espera en ambas instancias.

  7. Recupere la instancia en espera.

  8. Realice la conmutación manual.

  9. Abra la DB (y las PDB multitenencia).

  10. Configure la apertura automática de PDB (solo multitenencia).

  11. Elimine usuarios y objetos específicos de RDS Custom.

  12. Cree SPFILE y configure el inicio automático.

Paso 1: Pausa de automatización de Amazon RDS Custom

Ponga en pausa el modo de automatización en su instancia de RDS Custom. El parámetro --resume-full-automation-mode-minute debe ajustarse en función del tamaño de su DB y del tiempo previsto para la configuración de Data Guard.

aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode all-paused \ --resume-full-automation-mode-minute 480 \ --region us-east-1

Valide el estado de la automatización:

aws rds describe-db-instances \ --db-instance-identifier my-custom-instance \ --region us-east-1 \ --query 'DBInstances[0].AutomationMode'

Resultado previsto: "all-paused"

Paso 2: Confirmación del modo de registro de archivos y FORCE_LOGGING

Oracle Data Guard requiere que la DB principal esté en modo de registro de archivos con el registro forzado habilitado:

sqlplus / as sysdba SQL> SELECT log_mode, force_logging FROM v$database;

Resultado previsto:

LOG_MODE FORCE_LOGGING ------------ ------------- ARCHIVELOG YES

Si el registro forzado no está habilitado, ejecute:

SQL> ALTER DATABASE FORCE LOGGING;

Paso 3: Creación de archivos de contraseñas y de parámetros

Cree un archivo de contraseñas utilizando orapwd. Obtenga la contraseña de SYS de AWS Secrets Manager.

# Non-CDB $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwORCL password=<SYS_PASSWORD> entries=10 # Multitenant $ORACLE_HOME/bin/orapwd file=/rdsdbdata/config/orapwRDSCDB password=<SYS_PASSWORD> entries=10

Cree un archivo de parámetros a partir de la DB de origen:

sqlplus / as sysdba SQL> CREATE PFILE='/tmp/initORCL.ora' FROM SPFILE; -- Non-CDB SQL> CREATE PFILE='/tmp/initRDSCDB.ora' FROM SPFILE; -- Multitenant

Paso 4: Realización de copia de seguridad de RMAN o uso de duplicación activa

Tiene dos opciones para crear la DB en espera:

Opción A: Copia de seguridad en línea de RMAN (recomendada en la mayoría de los escenarios)

Cree un directorio de copias de seguridad y realice una copia de seguridad de la DB:

mkdir -p /rdsdbdata/backup rman target / RMAN> run { backup as compressed backupset filesperset 2 format '/rdsdbdata/backup/db_%U' database; sql 'alter system archive log current'; backup as compressed backupset filesperset 50 format '/rdsdbdata/backup/arch_%U' archivelog all; } RMAN> backup current controlfile for standby format '/rdsdbdata/backup/standby.ctl';
nota

En el caso de multitenencia, la palabra clave de la DB realiza automáticamente una copia de seguridad de toda la CDB, incluidas todas las PDB.

Opción B: Duplicación activa (método alternativo)

Omita el paso de la copia de seguridad y utilice la duplicación activa de RMAN para crear el sistema en espera directamente a través de la red. Esto elimina la necesidad de almacenar copias de seguridad y transferir archivos. Una vez configurados TNS y los oyentes (véase más abajo), ejecute:

RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER;

Esta guía se centra en la opción A (basada en copias de seguridad), pero la opción B es una alternativa válida.

Paso 5: Transferencia de archivos a EC2

Elija su método preferido para la transferencia de archivos. En esta guía, se utiliza Amazon S3 para los ejemplos.

Uso de Amazon S3:

ejemplo Para no CDB:
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /rdsdbdata/backup s3://<YOUR_BUCKET>/ --recursive aws s3 cp /tmp/initORCL.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwORCL s3://<YOUR_BUCKET>/ # On EC2, download files aws s3 cp s3://<YOUR_BUCKET>/backup /u01/app/oracle/backup/ --recursive aws s3 cp s3://<YOUR_BUCKET>/initORCL.ora $ORACLE_HOME/dbs/ aws s3 cp s3://<YOUR_BUCKET>/orapwORCL $ORACLE_HOME/dbs/
ejemplo Para multitenencia:
# Copy files to Amazon S3 from the RDS Custom instance aws s3 cp /rdsdbdata/backup s3://<YOUR_BUCKET>/ --recursive aws s3 cp /tmp/initRDSCDB.ora s3://<YOUR_BUCKET>/ aws s3 cp /rdsdbdata/config/orapwRDSCDB s3://<YOUR_BUCKET>/ # On EC2, download and rename files to use ORCL naming aws s3 cp s3://<YOUR_BUCKET>/backup /u01/app/oracle/backup/ --recursive aws s3 cp s3://<YOUR_BUCKET>/initRDSCDB.ora $ORACLE_HOME/dbs/initORCL.ora aws s3 cp s3://<YOUR_BUCKET>/orapwRDSCDB $ORACLE_HOME/dbs/orapwORCL

Paso 6: Edición del archivo de parámetros en EC2

Edite $ORACLE_HOME/dbs/initORCL.ora en la instancia de EC2 y realice los siguientes cambios críticos:

  1. Actualice el nombre de la DB: para multitenencia, cambie todas las apariciones de RDSCDB a ORCL.

  2. Cambie db_unique_name: de ORCL_A (o RDSCDB_A) a ORCL_B.

  3. Convierta rutas de RDS Custom en rutas de EC2: sustituya /rdsdbdata/ por /u01/app/oracle/.

  4. Elimine parámetros específicos de RDS Custom.
    • dg_broker_config_file1 y dg_broker_config_file2 (si están presentes)

    • standby_file_management (si está presente)

    • spfile (crearemos un SPFILE nuevo más adelante)

    • Cualquier parámetro log_archive_dest que apunte a destinos en espera.

  5. Ajuste los parámetros de memoria en función del tamaño de la instancia de EC2 (opcional pero recomendable).

Asignaciones de rutas:

No CDB:
  • /rdsdbdata/db/ORCL_A/datafile//u01/app/oracle/oradata/ORCL/datafile/

  • /rdsdbdata/db/ORCL_A/controlfile//u01/app/oracle/oradata/ORCL/controlfile/

  • /rdsdbdata/db/ORCL_A/onlinelog//u01/app/oracle/oradata/ORCL/onlinelog/

  • /rdsdbdata/admin/ORCL/adump/u01/app/oracle/admin/ORCL/adump

Multitenencia:
  • /rdsdbdata/db/cdb/RDSCDB/datafile//u01/app/oracle/oradata/ORCL/cdb/datafile/

  • /rdsdbdata/db/cdb/pdbseed//u01/app/oracle/oradata/ORCL/pdbseed/datafile/

  • /rdsdbdata/db/pdb/RDSCDB_A//u01/app/oracle/oradata/ORCL/pdb/datafile/

  • /rdsdbdata/db/cdb/RDSCDB_A/controlfile//u01/app/oracle/oradata/ORCL/controlfile/

  • /rdsdbdata/admin/RDSCDB/adump/u01/app/oracle/admin/ORCL/adump

Importante: En el caso de multitenencia, asegúrese de que enable_pluggable_database=TRUE esté presente en el archivo de parámetros.

Paso 7: Creación de SPFILE y restauración de la DB en espera

Inicie la instancia y cree el SPFILE:

sqlplus / as sysdba SQL> STARTUP NOMOUNT PFILE='$ORACLE_HOME/dbs/initORCL.ora'; SQL> CREATE SPFILE='/u01/app/oracle/admin/ORCL/pfile/spfileORCL.ora' FROM PFILE='$ORACLE_HOME/dbs/initORCL.ora'; SQL> SHUTDOWN IMMEDIATE;

Cree un enlace simbólico:

ln -sfn /u01/app/oracle/admin/ORCL/pfile/spfileORCL.ora $ORACLE_HOME/dbs/spfileORCL.ora

Inicie la instancia y realice la restauración:

SQL> STARTUP NOMOUNT; rman target /

Si los archivos de copia de seguridad se encuentran en una ruta diferente a la del origen, catalogue primero dichos archivos:

RMAN> catalog start with '/u01/app/oracle/backup/';

Restaure el archivo de control en espera y realice el montaje:

RMAN> restore standby controlfile from '/u01/app/oracle/backup/standby.ctl'; RMAN> alter database mount;

Si las rutas de los archivos de datos son diferentes (por ejemplo, al utilizar ASM), utilice SET NEWNAME:

RMAN> run { set newname for database to '+DATA/%b'; restore database; switch datafile all; }

De lo contrario, simplemente realice la restauración:

RMAN> restore database;

Recupere la DB hasta la última secuencia disponible:

RMAN> list backup of archivelog all; RMAN> recover database until sequence <LAST_SEQ + 1>;
nota

En el caso de multitenencia, RMAN restaura y recupera automáticamente todas las PDB. No es necesario restaurar cada PDB por separado.

Paso 8: Configuración de TNS y los oyentes

En ambas instancias, añada entradas de TNS a: tnsnames.ora.

ejemplo No CDB:
ORCL_A = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL))) ORCL_B = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))
ejemplo Multitenencia:
RDSCDB_A = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <RDS_CUSTOM_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = RDSCDB))) ORCL_B = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <EC2_IP>)(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))

Configure los oyentes en ambas instancias. En RDS Custom, añada a listener.ora:

ejemplo Para no CDB:
SID_LIST_L_ORCL_DG=(SID_LIST = (SID_DESC = (SID_NAME = ORCL)(GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /rdsdbbin/oracle.19.custom.r1.EE.1))) L_ORCL_DG=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST = <RDS_CUSTOM_IP>)))
ejemplo Para multitenencia:
SID_LIST_L_RDSCDB_DG=(SID_LIST = (SID_DESC = (SID_NAME = RDSCDB)(GLOBAL_DBNAME = RDSCDB) (ORACLE_HOME = /rdsdbbin/oracle.19.custom.r1.EE-CDB.1))) L_RDSCDB_DG=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST = <RDS_CUSTOM_IP>)))

Inicie el oyente.

$ORACLE_HOME/bin/lsnrctl start L_ORCL_DG # or L_RDSCDB_DG for multitenant

En EC2, cree $ORACLE_HOME/network/admin/listener.ora:

SID_LIST_L_ORCL_DG=(SID_LIST = (SID_DESC = (SID_NAME = ORCL)(GLOBAL_DBNAME = ORCL) (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1))) L_ORCL_DG=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)(HOST = <EC2_IP>)))

Inicie el oyente:

$ORACLE_HOME/bin/lsnrctl start L_ORCL_DG
nota

Si lo prefiere, puede utilizar el oyente existente en RDS Custom, pero crear un oyente de Data Guard independiente ofrece un mayor aislamiento.

importante

Si la conectividad de tnsping o listener falla, compruebe las reglas de iptables en EC2. Muchas instancias de Linux EC2 tienen reglas iptables predeterminadas que bloquean el puerto 1521. Añada una regla: sudo iptables -I INPUT 5 -p tcp --dport 1521 -j ACCEPT

Step 9: Habilitación del agente de Data Guard y configuración

En ambas instancias, habilite el agente de Data Guard:

sqlplus / as sysdba SQL> ALTER SYSTEM SET dg_broker_start=true;

En el servidor principal de RDS Custom, conéctese al agente de Data Guard y cree la configuración:

dgmgrl /
ejemplo Para no CDB:
DGMGRL> CREATE CONFIGURATION my_dg_config AS PRIMARY DATABASE IS ORCL_A CONNECT IDENTIFIER IS ORCL_A; DGMGRL> ADD DATABASE ORCL_B AS CONNECT IDENTIFIER IS ORCL_B MAINTAINED AS PHYSICAL;

ejemplo Para multitenencia:
DGMGRL> CREATE CONFIGURATION my_dg_config AS PRIMARY DATABASE IS RDSCDB_A CONNECT IDENTIFIER IS RDSCDB_A; DGMGRL> ADD DATABASE ORCL_B AS CONNECT IDENTIFIER IS ORCL_B MAINTAINED AS PHYSICAL;

Configure los identificadores de conexión estáticos y habilite:

ejemplo Para no CDB:
DGMGRL> edit database orcl_a set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<RDS_CUSTOM_IP>))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)))'; DGMGRL> edit database orcl_b set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<EC2_IP>))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)))'; DGMGRL> ENABLE CONFIGURATION;

ejemplo Para multitenencia:
DGMGRL> edit database rdscdb_a set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<RDS_CUSTOM_IP>))(CONNECT_DATA=(SID=RDSCDB)(SERVER=DEDICATED)))'; DGMGRL> edit database orcl_b set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(PORT=1521)(HOST=<EC2_IP>))(CONNECT_DATA=(SID=ORCL)(SERVER=DEDICATED)))'; DGMGRL> ENABLE CONFIGURATION;
nota

El agente de Data Guard es opcional, pero se recomienda para facilitar la administración. Para migraciones sencillas, puede configurar Data Guard manualmente sin el agente.

nota

Al habilitar Data Guard para una CDB, protege automáticamente todas las PDB. Las acciones de rehacer generadas por cualquier PDB se envían al servidor en espera y se aplican a la PDB correspondiente en dicho servidor.

Paso 10: Configuración de registros de rehacer en espera e inicio de la recuperación

En la instancia de EC2 en espera, añada los archivos de registro de rehacer en espera (n+1, donde n es el número de grupos de registros de rehacer en línea):

ALTER DATABASE ADD STANDBY LOGFILE ('slog1.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog2.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog3.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog4.rdo') SIZE 128M; ALTER DATABASE ADD STANDBY LOGFILE ('slog5.rdo') SIZE 128M;
nota

En el caso de multitenencia, los registros de rehacer en espera se crean en el nivel de CDB y los comparten todas las PDB.

Configure los parámetros de FAL en espera:

ejemplo Para no CDB:
SQL> alter system set fal_server = 'ORCL_A'; SQL> alter system set fal_client = 'ORCL_B';

ejemplo Para multitenencia:
SQL> alter system set fal_server = 'RDSCDB_A'; SQL> alter system set fal_client = 'ORCL_B';

Inicie la recuperación administrada:

SQL> recover managed standby database disconnect from session;

Controle el retraso de aplicación:

SQL> SELECT name, value FROM v$dataguard_stats WHERE name = 'apply lag';

Supervisión y administración detalladas de la sincronización de Data Guard:

La supervisión de Data Guard es fundamental para garantizar el éxito de la migración. A continuación se presentan algunas técnicas de supervisión exhaustivas:

  1. Supervisión de las estadísticas de Data Guard:

    -- Comprehensive Data Guard statistics SQL> SELECT name, value, unit, time_computed, datum_time FROM v$dataguard_stats ORDER BY name;

    Métricas clave que se deben supervisar:

    • retraso en el transporte: diferencia de tiempo entre el momento en que se generó la acción de rehacer en principal y el momento en que se recibió en espera.

    • retraso de aplicación: diferencia de tiempo entre el momento en que se generó la acción de rehacer y el momento en que se aplicó en espera.

    • velocidad de aplicación: velocidad a la que se aplica la acción de rehacer (MB/s).

    • recepción de rehacer: total de acciones de rehacer recibidas por espera.

    • aplicación de rehacer: acciones de rehacer totales aplicadas por espera.

  2. Supervisión del envío de registro de archivos:

    En principal (RDS Custom):

    -- Check archive log generation rate SQL> SELECT TO_CHAR(first_time, 'YYYY-MM-DD HH24') AS hour, COUNT(*) AS log_count, ROUND(SUM(blocks * block_size)/1024/1024/1024, 2) AS size_gb FROM v$archived_log WHERE first_time > SYSDATE - 1 GROUP BY TO_CHAR(first_time, 'YYYY-MM-DD HH24') ORDER BY hour; -- Check archive log destination status SQL> SELECT dest_id, status, error, destination FROM v$archive_dest WHERE status != 'INACTIVE';

    En espera (EC2):

    -- Check archive log apply status SQL> SELECT sequence#, first_time, next_time, applied FROM v$archived_log WHERE applied = 'NO' ORDER BY sequence#; -- Check archive log gap SQL> SELECT thread#, low_sequence#, high_sequence# FROM v$archive_gap;
  3. Supervisión del proceso de recuperación administrado:

    -- Check if managed recovery is running SQL> SELECT process, status, thread#, sequence#, block#, blocks FROM v$managed_standby WHERE process LIKE 'MRP%' OR process LIKE 'RFS%'; -- Check recovery progress SQL> SELECT process, status, sequence#, TO_CHAR(timestamp, 'YYYY-MM-DD HH24:MI:SS') AS timestamp FROM v$managed_standby ORDER BY process;
  4. Supervisión de la velocidad de aplicación de rehacer para multitenencia:

    En el caso de las DB multitenencia, supervise la velocidad de aplicación por PDB:

    -- Check redo apply rate per container SQL> SELECT con_id, name, ROUND(SUM(value)/1024/1024, 2) AS redo_applied_mb FROM v$con_sysstat cs, v$containers c WHERE cs.con_id = c.con_id AND cs.name = 'redo size' GROUP BY con_id, name ORDER BY con_id;
  5. Supervisión de los registros de rehacer en espera:

    -- Check standby redo log status SQL> SELECT group#, thread#, sequence#, bytes/1024/1024 AS size_mb, status FROM v$standby_log ORDER BY group#; -- Check if standby redo logs are being used SQL> SELECT group#, thread#, sequence#, status, archived FROM v$standby_log WHERE status = 'ACTIVE';
  6. Estimación de la finalización de sincronización:

    Calcule el tiempo restante en función de la velocidad de aplicación:

    -- Calculate estimated time to catch up SQL> SELECT ROUND((SELECT value FROM v$dataguard_stats WHERE name = 'apply lag')/60, 2) AS lag_minutes, ROUND((SELECT value FROM v$dataguard_stats WHERE name = 'apply rate')/1024, 2) AS apply_rate_mbps, ROUND( (SELECT value FROM v$dataguard_stats WHERE name = 'apply lag') / NULLIF((SELECT value FROM v$dataguard_stats WHERE name = 'apply rate'), 0) / 60, 2 ) AS estimated_catchup_minutes FROM dual;

Problemas comunes de sincronización de Data Guard:

Problema 1: Retraso de aplicación elevado

Síntomas:

SQL> SELECT name, value FROM v$dataguard_stats WHERE name = 'apply lag'; NAME VALUE -------------------------------- ----- apply lag +00 01:30:00

Causas y soluciones:

  • Recursos insuficientes de CPU/E/S en espera: actualice el tipo de instancia de EC2 o aumente las IOPS de EBS.

  • Limitación del ancho de banda de la red: utilice redes mejoradas o tipos de instancias con un ancho de banda superior.

  • Varias PDB con una alta tasa de transacciones: considere aumentar el paralelismo de aplicaciones de rehacer (requiere una licencia de Active Data Guard).

-- Increase apply parallelism (requires Active Data Guard) SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE PARALLEL 4 DISCONNECT FROM SESSION;
Problema 2: Ausencia en registro de archivos

Síntomas:

SQL> SELECT * FROM v$archive_gap; THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# ------- ------------- -------------- 1 1234 1240

Solución:

-- FAL (Fetch Archive Log) will automatically fetch missing logs -- Verify FAL parameters are set correctly SQL> SHOW PARAMETER fal_server SQL> SHOW PARAMETER fal_client -- Manually register missing archive logs if needed -- On primary, check if logs still exist SQL> SELECT name FROM v$archived_log WHERE sequence# BETWEEN 1234 AND 1240; -- If logs are missing on primary, you may need to rebuild the standby
Problema 3: Fallo en transporte de rehacer

Síntomas:

SQL> SELECT dest_id, status, error FROM v$archive_dest WHERE dest_id = 2; DEST_ID STATUS ERROR ------- --------- ---------------------------------------- 2 ERROR ORA-16191: Primary log shipping client not logged on standby

Solución:

-- Check network connectivity -- Verify TNS configuration -- Check listener status on standby -- Restart log transport SQL> ALTER SYSTEM SET log_archive_dest_state_2 = 'DEFER'; SQL> ALTER SYSTEM SET log_archive_dest_state_2 = 'ENABLE';
Problema 4: La recuperación administrada no aplica la acción de rehacer

Síntomas:

SQL> SELECT process, status FROM v$managed_standby WHERE process = 'MRP0'; PROCESS STATUS --------- ------------ MRP0 WAIT_FOR_LOG

Solución:

# Check if archive logs are arriving ls -ltr /u01/app/oracle/oradata/ORCL/arch/ # Check alert log for errors tail -100 $ORACLE_BASE/diag/rdbms/orcl_b/ORCL/trace/alert_ORCL.log # Restart managed recovery sqlplus / as sysdba SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

En el caso de Multitenencia, también puede comprobar el estado de cada PDB en espera:

SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;

Resultado esperado (las PDB con estado MOUNTED en espera):

CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED MOUNTED 3 ORCLDB MOUNTED
nota

En estado de espera físico, las PDB permanecen en el estado MOUNTED durante la recuperación administrada.

Paso 11: Realización de la conmutación

Una vez que se haya asegurado de que la espera está totalmente sincronizada y lista, realice la conmutación. En el caso de multitenencia, la conmutación conmutará toda la CDB (todas las PDB) de RDS Custom principal a EC2 en espera.

En la instancia principal de RDS Custom, conéctese al agente de Data Guard y compruebe que ambas DB estén listas para la conmutación:

ejemplo Para no CDB:
DGMGRL> VALIDATE DATABASE ORCL_A; DGMGRL> VALIDATE DATABASE ORCL_B;

ejemplo Para multitenencia:
DGMGRL> VALIDATE DATABASE RDSCDB_A; DGMGRL> VALIDATE DATABASE ORCL_B;

Ambos deberían mostrar Ready for Switchover: Yes.

Cambie RDS Custom principal a EC2 en espera:

DGMGRL> SWITCHOVER TO ORCL_B;

Compruebe que la conmutación se ha realizado correctamente:

DGMGRL> SHOW CONFIGURATION VERBOSE;

La instancia EC2 (ORCL_B) es ahora la DB principal y la instancia de RDS Custom es la instancia física en espera.

Paso 12: Apertura de las PDB (solo para multitenencia)

Tras la conmutación, la CDB en EC2 está abierta en el modo READ WRITE, pero todas las PDB están en estado MOUNTED. Debe abrirlas manualmente.

Conéctese a la nueva entidad principal en EC2:

sqlplus / as sysdba SQL> SELECT name, open_mode, database_role, cdb FROM v$database;

Resultado previsto:

NAME OPEN_MODE DATABASE_ROLE CDB --------- -------------------- ---------------- --- ORCL READ WRITE PRIMARY YES

Compruebe el estado actual de la PDB:

SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;

Resultado esperado (PDB con estado MOUNTED; por ejemplo, con una PDB denominada ORCLDB):

CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB MOUNTED

Abra todas las PDB:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

Se modificó la DB conectable.

Compruebe que todas las PDB estén ahora abiertas en modo READ WRITE:

SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs;

Resultado previsto:

CON_ID NAME OPEN_MODE RES ---------- ------------------------------ ---------- --- 2 PDB$SEED READ ONLY NO 3 ORCLDB READ WRITE NO

Paso 13: Configuración de la apertura automática de PDB en el inicio (solo multitenencia).

Configure las PDB para que se abran automáticamente al iniciar la CDB mediante el método de estado de guardado (recomendado para Oracle 19c):

SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE; Pluggable database altered.

Compruebe el estado guardado:

SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;

Compruebe que los servicios de PDB estén registrados en el oyente:

lsnrctl services

El resultado esperado debería mostrar los servicios para la CDB y cada PDB. Si los servicios no se muestran:

SQL> ALTER SYSTEM REGISTER;

A continuación, vuelva a comprobarlo con lsnrctl services.

Paso 14: Eliminación de objetos de RDS Custom

Dado que ahora se trata de una DB autoadministrada en EC2, debe eliminar los usuarios y objetos específicos de RDS Custom. El proceso de limpieza difiere ligeramente entre las arquitecturas multitenencia y las no CDB.

importante

Antes de eliminar usuarios y espacios de tabla específicos de RDS, compruebe que no existan objetos de aplicación en estos esquemas:

SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE owner IN ('RDSADMIN', 'RDS_DATAGUARD') AND object_name NOT LIKE 'RDS%' AND object_name NOT LIKE 'SYS_%' GROUP BY owner, object_type;

Si encuentra algún objeto de aplicación, mígrelo a los esquemas de aplicación adecuados antes de continuar.

Limpieza para no CDB:

sqlplus / as sysdba -- Drop RDS-specific users SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; -- Drop RDS-specific directories SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; -- Drop the RDSADMIN tablespace SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';

Resultado previsto: no rows selected

Limpieza para multitenencia:

En un entorno multitenencia, RDS Custom crea usuarios comunes en CDB$ROOT que se ven en todas las PDB. Debe limpiar desde CDB$ROOT.

sqlplus / as sysdba -- Verify you are in CDB$ROOT SQL> SHOW CON_NAME; -- Check for RDS-specific common users (including C## prefixed users) SQL> SELECT username, common, con_id FROM cdb_users WHERE username LIKE 'RDS%' OR username LIKE 'C##RDS%' ORDER BY username; -- Drop non-common users SQL> DROP USER RDSADMIN CASCADE; SQL> DROP USER RDS_DATAGUARD CASCADE; -- If any C## common users exist -- Example (adjust based on your findings): -- SQL> DROP USER C##RDS_DATAGUARD CASCADE; -- Drop RDS-specific directories SQL> DROP DIRECTORY OPATCH_INST_DIR; SQL> DROP DIRECTORY OPATCH_LOG_DIR; SQL> DROP DIRECTORY OPATCH_SCRIPT_DIR; -- Drop the RDSADMIN tablespace SQL> DROP TABLESPACE RDSADMIN INCLUDING CONTENTS AND DATAFILES; -- Verify removal from CDB$ROOT SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%'; -- Verify removal from each PDB (example with one PDB named ORCLDB) SQL> ALTER SESSION SET CONTAINER = ORCLDB; SQL> SELECT username FROM dba_users WHERE username LIKE '%RDS%';

Resultado esperado para todas las consultas: no rows selected.

Paso 15: Configuración del inicio automático

Compruebe que SPFILE se esté utilizando:

sqlplus / as sysdba SQL> SHOW PARAMETER spfile;

Si la ruta spfile es correcta, no es necesario realizar ninguna acción. En caso contrario, cree una.

SQL> CREATE SPFILE FROM MEMORY;

Reinicie la DB.

SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;

Para multitenencia, abra todas las PDB (deberían abrirse automáticamente si guardó el estado anteriormente):

SQL> SELECT con_id, name, open_mode FROM v$pdbs;

Si las PDB no están abiertas, ábralas manualmente:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

Editar /etc/oratab:

vi /etc/oratab

Cambie la línea para ORCL de N a Y:

ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y

Paso 16: Validación final

Realice una validación exhaustiva de la DB migrada.

ejemplo Para no CDB:
sqlplus / as sysdba -- Verify database role and status SQL> SELECT name, open_mode, log_mode, database_role FROM v$database; -- Check database size SQL> SELECT SUM(bytes)/1024/1024/1024 AS size_gb FROM dba_data_files; -- Verify all objects are valid SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE status = 'INVALID' GROUP BY owner, object_type; -- Verify data files SQL> SELECT name, status FROM v$datafile; -- Test application connectivity SQL> SELECT username, machine, program FROM v$session WHERE username IS NOT NULL;
ejemplo Para multitenencia:
sqlplus / as sysdba -- Verify CDB status SQL> SELECT name, open_mode, log_mode, cdb, database_role FROM v$database; -- Verify all PDBs are open SQL> SELECT con_id, name, open_mode, restricted FROM v$pdbs; -- Check total CDB size SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM cdb_data_files; -- Check size per PDB SQL> SELECT p.name AS pdb_name, ROUND(SUM(d.bytes)/1024/1024/1024, 2) AS size_gb FROM v$pdbs p JOIN cdb_data_files d ON p.con_id = d.con_id GROUP BY p.name,p.con_id ORDER BY p.con_id; -- Verify all objects are valid across all PDBs SQL> SELECT con_id, owner, object_type, COUNT(*) FROM cdb_objects WHERE status = 'INVALID' GROUP BY con_id, owner, object_type; -- Verify PDB services are registered SQL> SELECT name FROM v$services ORDER BY name; Test application connectivity: # Non-CDB sqlplus <app_user>/<password>@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) sqlplus <app_user>/<password>@<EC2_IP>:1521/<PDB_NAME>

Pruebe la conectividad de la aplicación.

# Non-CDB sqlplus <app_user>/<password>@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) sqlplus <app_user>/<password>@<EC2_IP>:1521/<PDB_NAME>

Paso 17: Limpieza de los archivos de copia de seguridad

Tras la validación correcta, elimine los archivos de copia de seguridad y separe el volumen de copia de seguridad si utiliza un volumen de EBS independiente:

rm -rf /u01/app/oracle/backup/*

Si utiliza un volumen de EBS independiente para las copias de seguridad:

# Unmount the volume sudo umount /u01/app/oracle/backup # Detach and delete the EBS volume from AWS Console or CLI aws ec2 detach-volume --volume-id <volume-id> aws ec2 delete-volume --volume-id <volume-id>

Paso 18: Reanudación de la automatización de RDS Custom

Si tiene previsto mantener la instancia de RDS Custom ejecutándose como respaldo durante un período de validación, reanude la automatización:

aws rds modify-db-instance \ --db-instance-identifier my-custom-instance \ --automation-mode full \ --region us-east-1

Solución de problemas comunes

En esta sección, se describen los problemas más comunes que pueden surgir durante la migración, tanto en el caso de los enfoques de duplicación de RMAN como de Oracle Data Guard, y abarca arquitecturas no CDB y multitenencia.

ORA-09925: no se pudo crear el archivo de registro de auditoría.

Causa: el directorio de auditoría especificado en el parámetro audit_file_dest no existe en la instancia de EC2 de destino.

Solución:

Asegúrese de que el directorio de auditoría existe y tiene los permisos adecuados:

mkdir -p /u01/app/oracle/admin/ORCL/adump chown -R oracle:oinstall /u01/app/oracle/admin/ORCL chmod -R 755 /u01/app/oracle/admin/ORCL

ORA-01261: no se puede traducir la cadena de destino db_create_file_dest del parámetro.

Causa: el directorio especificado en el parámetro db_create_file_dest no existe en la instancia de EC2 de destino.

Solución:

Para no CDB:

mkdir -p /u01/app/oracle/oradata/ORCL chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chmod -R 755 /u01/app/oracle/oradata/ORCL

Para multitenencia:

mkdir -p /u01/app/oracle/oradata/ORCL/pdb/datafile chown -R oracle:oinstall /u01/app/oracle/oradata/ORCL chmod -R 755 /u01/app/oracle/oradata/ORCL

ORA-01804: error al inicializar la información de zona horaria

Este error puede producirse al eliminar al usuario RDSADMIN si la fuente de RDS tiene una versión de zona horaria superior a la que está instalada en su $ORACLE_HOME de EC2.

Solución:

  1. Compruebe las versiones de zona horaria:

    SELECT * FROM v$timezone_file; SELECT PROPERTY_NAME, PROPERTY_VALUE FROM database_properties WHERE PROPERTY_NAME LIKE '%DST%';
  2. Como solución alternativa, defina la variable de entorno del archivo de zona horaria para que coincida con la que tiene disponible su $ORACLE_HOME:

    ls $ORACLE_HOME/oracore/zoneinfo/timezlrg_*.dat export ORA_TZFILE=$ORACLE_HOME/oracore/zoneinfo/timezone_40.dat

    Ajuste el número para que coincida con la versión disponible en su instalación.

  3. Vuelva a intentar la eliminación:

    sqlplus / as sysdba SQL> DROP USER RDSADMIN CASCADE;

Problemas de migración entre RU (versiones de actualización diferentes)

Causa: la instancia EC2 de destino tiene una versión de actualización (RU) de Oracle o parches únicos diferentes a los de la instancia RDS Custom de origen, lo que provoca errores de compatibilidad durante o después de la migración.

Errores comunes:
  • Errores internos de ORA-00600 durante la aplicación de rehacer (Data Guard)

  • La DB ORA-39700 debe abrirse con la opción UPGRADE

  • Incoherencias del diccionario después de la migración

  • Objetos no válidos en DBA_REGISTRY o DBA_OBJECTS

Solución:

Práctica recomendada: haga coincidir exactamente las versiones RU y los parches únicos:

  1. Compruebe la versión RU exacta tanto en el origen como en la de destino:

    -- On both source and target SQL> SELECT * FROM v$version; SQL> SELECT patch_id, patch_uid, version, action, status, description FROM dba_registry_sqlpatch ORDER BY action_time DESC;
  2. Compruebe el nivel de parche de $ORACLE_HOME:

    # On both instances $ORACLE_HOME/OPatch/opatch lsinventory
  3. Si las versiones no coinciden, alinéelas antes de la migración aplicando o anulando los parches según sea necesario.

  4. Si debe continuar con las RU que no coinciden, ejecute el parche de datos después de la migración:

    cd $ORACLE_HOME/OPatch ./datapatch -verbose
  5. Compruebe si hay objetos no válidos y repita la compilación:

    SQL> @?/rdbms/admin/utlrp.sql SQL> SELECT owner, object_type, COUNT(*) FROM dba_objects WHERE status = 'INVALID' GROUP BY owner, object_type;

Problemas de conectividad de red

Causa: grupos de seguridad, ACL de red o iptables bloqueando el puerto del oyente de Oracle.

Solución:

  1. Compruebe que los grupos de seguridad permiten el puerto de forma bidireccional.

  2. Compruebe iptables en EC2:

    sudo iptables -L INPUT -n -v
  3. Agregue una regla si es necesario:

    # Insert rule before the REJECT rule (typically position 5) sudo iptables -I INPUT 5 -p tcp --dport 1521 -j ACCEPT # For enhanced security, allow only from specific source IPs sudo iptables -I INPUT 5 -p tcp -s <RDS_Custom_IP> --dport 1521 -j ACCEPT # Save rules permanently sudo service iptables save
  4. Prueba de conectividad:

    telnet <EC2_instance_IP> 1521 tnsping DB_SOURCE tnsping DB_TARGET

Las PDB no se abren después de la migración (solo para multitenencia)

Causa: este es el comportamiento esperado. Tras la duplicación de RMAN o la conmutación a Data Guard, la CDB está abierta pero las PDB permanecen en el estado MOUNTED.

Solución:

Ábralas manualmente:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

Si una PDB específica no se abre, compruebe si hay errores en el registro de alertas:

tail -100 $ORACLE_BASE/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log

Las causas más comunes incluyen la falta de archivos de datos o los problemas con la asignación de rutas.

No se encontraron los archivos de datos de PDB o las rutas no coinciden (solo multitenencia)

Causa: la migración no asignó correctamente todas las rutas de origen, especialmente en el caso de los archivos de datos de PDB basados en OMF.

Solución:

  1. Compruebe qué archivos de datos faltan:

    SQL> SELECT name, status FROM v$datafile WHERE status != 'ONLINE';
  2. Si los archivos se colocaron en el directorio incorrecto, cámbieles el nombre en el archivo de control:

    SQL> ALTER DATABASE RENAME FILE '/wrong/path/datafile.dbf' TO '/correct/path/datafile.dbf';
  3. Para evitarlo, compruebe siempre las rutas del archivo de datos de origen SELECT con_id, name FROM v$datafile ORDER BY con_id; antes de configurar el archivo de parámetros.

Los servicios de PDB no se registran en el oyente (solo para multitenencia)

Causa: el oyente no conoce los servicios de la PDB después de abrirla.

Solución:

  1. Fuerce el registro del servicio:

    SQL> ALTER SYSTEM REGISTER;
  2. Si los servicios siguen sin aparecer, compruebe el parámetro local_listener:

    SQL> SHOW PARAMETER local_listener;

    Asegúrese de que apunta a la dirección correcta del oyente. Si es necesario, actualícelo:

    SQL> ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=<EC2_instance_IP>)(PORT=1521))'; SQL> ALTER SYSTEM REGISTER;
  3. Compruebe con:

    lsnrctl services

Las PDB no se abren automáticamente después de reiniciar la CDB (solo para multitenencia)

Causa: el estado de guardado de la PDB no estaba configurado.

Solución:

Compruebe que el estado de guardado de la PDB esté configurado:

SQL> SELECT con_name, instance_name, state FROM dba_pdb_saved_states;

Si no se devuelve ninguna fila, guarde el estado:

SQL> ALTER PLUGGABLE DATABASE ALL OPEN; SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE;

El transporte de rehacer de Data Guard no funciona

Causa: problemas de conectividad de red, configuración de TNS incorrecta o parámetros FAL no configurados.

Solución:

  1. Compruebe que la espera esté en modo MOUNT:

    SQL> SELECT status FROM v$instance;
  2. Compruebe que fal_server y fal_client estén configurados correctamente en espera:

    SQL> SHOW PARAMETER fal_server SQL> SHOW PARAMETER fal_client
  3. Compruebe la conectividad de la red:

    tnsping ORCL_A # or RDSCDB_A for multitenant
  4. Compruebe el parámetro log_archive_dest_2 en los puntos principales que conducen a la espera (si se configura manualmente sin agente).

El retraso de aplicación de Data Guard aumenta con varias PDB (solo multitenencia)

Causa: en el caso de las CDB con varias PDB, la aplicación de rehacer puede resultar más lenta por el volumen de cambios en todos los contenedores.

Solución:

  1. Compruebe la velocidad de aplicación:

    SQL> SELECT name, value, unit FROM v$dataguard_stats WHERE name IN ('apply rate', 'apply lag');
  2. Considere aumentar el paralelismo para la aplicación de rehacer (requiere licencia de Active Data Guard):

    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE PARALLEL 4 DISCONNECT FROM SESSION;
  3. Compruebe que no haya restricciones de recursos (CPU, E/S) en la instancia de espera.

La copia de seguridad del registro de archivos de RMAN falla con ORA-19625

Causa: la automatización personalizada de RDS ha purgado los registros de archivos más antiguos del disco, pero el archivo de control de RMAN aún contiene registros de estos.

Solución:

  1. Compruebe y limpie las entradas de registro de archivos obsoletas:

    RMAN> CROSSCHECK ARCHIVELOG ALL; RMAN> DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
  2. Vuelva a ejecutar solo la copia de seguridad del registro de archivos:

    RMAN> RUN { SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; BACKUP AS COMPRESSED BACKUPSET FILESPERSET 50 FORMAT '/rdsdbdata/backup/arch_%U' ARCHIVELOG ALL; }

La eliminación de usuarios comunes falla en multitenencia (solo en multitenencia)

Causa: los usuarios comunes (con el prefijo C##) deben eliminarse con la cláusula CONTAINER=ALL.

Solución:

-- For common users SQL> DROP USER C##RDS_DATAGUARD CASCADE CONTAINER=ALL; -- For non-common users in CDB$ROOT SQL> DROP USER RDSADMIN CASCADE;

Compruebe su conexión a CDB$ROOT:

SQL> SHOW CON_NAME;

Tareas posteriores a la migración

Tras una migración satisfactoria, complete estas tareas adicionales para asegurarse de que su DB de Oracle autoadministrada en EC2 esté lista para la producción.

Actualización de las cadenas de conexión de las aplicaciones

Para no CDB:
  • Apunte sus aplicaciones al nuevo punto de conexión de la instancia de EC2.

  • Actualice las cadenas de conexión para utilizar la IP o el nombre de host de la instancia de EC2.

  • Pruebe minuciosamente todas las funciones de la aplicación.

Para multitenencia:
  • Apunte sus aplicaciones a los nombres de servicio de PDB de la nueva instancia de EC2 (por ejemplo, ORCLDB o sus nombres de PDB específicos).

  • Asegúrese de que las aplicaciones se conecten a la PDB correcta, no a la CDB.

  • Actualice las cadenas de conexión para utilizar los nombres de servicio de la PDB.

  • Pruebe todas las funciones de la aplicación para cada PDB.

Ejemplo de cadenas de conexión:

# Non-CDB jdbc:oracle:thin:@<EC2_IP>:1521/ORCL # Multitenant (connect to PDB) jdbc:oracle:thin:@<EC2_IP>:1521/ORCLDB

Configuración de la estrategia de copias de seguridad

Configure una estrategia de copias de seguridad integral para su DB autoadministrada:

Copias de seguridad de RMAN:
  • Configure scripts de copia de seguridad de RMAN automatizados para copias de seguridad completas, incrementales y de registros de archivo.

  • Configure políticas de retención de copias de seguridad en función de sus objetivos de punto de recuperación (RPO).

  • Almacene las copias de seguridad en Amazon S3 para lograr una mayor durabilidad y rentabilidad.

  • Pruebe periódicamente los procedimientos de restauración de copias de seguridad.

AWS Backup:
  • Use AWS Backup para instantáneas de volumen de EBS.

  • Configure programaciones de copias de seguridad y políticas de retención.

  • Habilite copias de seguridad entre regiones para la recuperación ante desastres.

Para multitenencia:
  • Las copias de seguridad de RMAN de la CDB incluyen automáticamente todas las PDB.

  • También puede realizar copias de seguridad de las PDB individuales si es necesario.

  • Tenga en cuenta las programaciones de copia de seguridad específicas de PDB en función de los requisitos empresariales.

Ejemplo de script de copia de seguridad de RMAN:

#!/bin/bash export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH rman target / << EOF run { backup as compressed backupset database plus archivelog; delete noprompt obsolete; } exit; EOF

Configuración de la supervisión

Implemente una supervisión integral para su DB de Oracle alojada en EC2:

Amazon CloudWatch
  • Configure las métricas de CloudWatch para el estado de la instancia de EC2, el uso del disco y las métricas personalizadas de Oracle.

  • Cree alarmas de CloudWatch para umbrales críticos.

  • Utilice CloudWatch Logs para supervisar los registros de alertas de DB.

Oracle Enterprise Manager (OEM):
  • Si está disponible, configure OEM para la supervisión de DB.

  • Configure la supervisión y el diagnóstico del rendimiento.

  • Configure alertas automatizadas para eventos críticos.

Herramientas de terceros:
  • Considere herramientas como Datadog, New Relic o Prometheus para la supervisión de las DB.

  • Realice la integración con su infraestructura de supervisión existente.

Métricas clave que se deben supervisar:
  • Uso del espacio de tabla

  • Espacio de registro de archivos

  • Objetos no válidos

  • Recuento de sesiones

  • Eventos de espera

  • Uso de CPU y memoria

  • Rendimiento de E/S

Para multitenencia:
  • Supervise las métricas tanto de CDB como de PDB.

  • Configure alertas para el uso de los recursos y las cuotas de PDB.

  • Realice un seguimiento de las métricas de rendimiento específicas de PDB.

Configure grupos de seguridad y ACL de red.

Revise y refuerce la seguridad de la instancia de EC2:

Grupos de seguridad:
  • Restrinja el acceso a los puertos de DB únicamente a los servidores de aplicaciones y hosts bastión autorizados.

  • Elimine las reglas excesivamente permisivas que se hayan creado durante la migración.

  • Documente las reglas de los grupos de seguridad y sus usos.

ACL de red:
  • Configure las ACL de red de la VPC para obtener capas de seguridad adicionales.

  • Implemente una estrategia de seguridad de defensa en profundidad.

Acceso de SSH:
  • Limite el acceso de SSH a rangos de IP específicos o use AWS Systems Manager Session Manager.

  • Deshabilite la autenticación por contraseña y utilice únicamente la autenticación basada en claves.

  • Implemente la autenticación multifactor (MFA) para el acceso con privilegios.

Cifrado:
  • Habilite el cifrado en reposo para los volúmenes de EBS.

  • Habilite el cifrado en tránsito para las conexiones de DB mediante Oracle Native Network Encryption o TLS.

  • Rote las claves de cifrado con regularidad.

Implementación de alta disponibilidad

Si su carga de trabajo requiere una alta disponibilidad, considere la posibilidad de implementar:

Oracle Data Guard:
  • Configure una nueva DB en espera en otra instancia de EC2 para la recuperación ante desastres.

  • En el caso de multitenencia, Data Guard protege toda la CDB, incluidas las PDB.

  • La espera puede estar en una zona o región de disponibilidad diferente.

  • Implemente mecanismos de conmutación por error automatizados mediante scripts o herramientas de terceros.

Implementación multi-AZ de AWS:
  • Implemente instancias en espera en zonas de disponibilidad diferentes.

  • Use Amazon Route 53 para la conmutación por error de DNS.

  • Implemente la agrupación de conexiones en el nivel de aplicación con soporte de conmutación por error.

Copia de seguridad y recuperación:
  • Mantenga copias de seguridad periódicas con procedimientos de restauración probados.

  • Documente los objetivos de tiempo de recuperación (RTO) y los objetivos de punto de recuperación (RPO).

  • Realice simulacros de recuperación ante desastres con regularidad.

Realización de pruebas exhaustivas de aplicaciones

Antes de retirar la instancia de RDS Custom:

Pruebas funcionales:
  • Compruebe que todas las características de la aplicación funcionan correctamente.

  • Pruebe todas las funciones que dependen de la DB.

  • Valide la integridad y la coherencia de los datos.

Pruebas de rendimiento:
  • Compare las métricas de rendimiento con la línea base de RDS Custom.

  • Identifique y aborde cualquier regresión de rendimiento.

  • Optimice las consultas y los índices según sea necesario.

Prueba de carga:
  • Pruebe la DB en los picos de carga previstos.

  • Compruebe que la utilización de los recursos se mantenga dentro de los límites aceptables.

  • Identifique y aborde los cuellos de botella.

Pruebas de conmutación por error (si HA está configurada):
  • Pruebe escenarios de conmutación por error.

  • Verifique la lógica de reconexión de aplicaciones.

  • Mida el RTO y el RPO reales.

Pruebas de copia de seguridad y restauración:
  • Compruebe que los procedimientos de copia de seguridad y restauración funcionen correctamente.

  • Pruebe la recuperación en un momento dado.

  • Valide la integridad de la copia de seguridad.

Para multitenencia:
  • Pruebe cada PDB de forma independiente.

  • Verifique el aislamiento de la PDB y la asignación de recursos.

  • Pruebe las operaciones específicas de la PDB (clonar, desconectar/conectar, etc.).

Retirada de una instancia de RDS Custom

Tras un período de validación correcto (normalmente de 1 a 2 semanas):

  1. Copia de seguridad final: realice una copia de seguridad final de la instancia de RDS Custom para archivarla.

    # Create final snapshot aws rds create-db-snapshot \ --db-instance-identifier my-custom-instance \ --db-snapshot-identifier my-custom-instance-final-snapshot \ --region us-east-1
  2. Documente la migración: actualice los manuales de procedimiento y la documentación con la nueva configuración de EC2.

  3. Elimine la instancia de RDS Custom: utilice la consola de AWS o la CLI para eliminar la instancia.

    # Delete RDS Custom instance without final snapshot (if already created above) aws rds delete-db-instance \ --db-instance-identifier my-custom-instance \ --skip-final-snapshot \ --region us-east-1 # Or create a final snapshot before deletion aws rds delete-db-instance \ --db-instance-identifier my-custom-instance \ --final-db-snapshot-identifier my-custom-instance-final-snapshot \ --region us-east-1
  4. Limpie los recursos: elimine las instantáneas, los grupos de parámetros y los grupos de opciones asociados si ya no son necesarios.

  5. Actualice la documentación: asegúrese de que toda la documentación operativa refleje la nueva arquitectura basada en EC2.

Comparación: duplicación activa de RMAN frente a Oracle Data Guard

En la tabla siguiente se resumen las diferencias principales entre las dos opciones de migración:

Aspecto

Duplicación activa de RMAN

Oracle Data Guard

Disponibilidad de DB de origen

En línea durante toda la duplicación En línea durante todo el proceso

Tiempo de inactividad

Minutos (solo para la transición final) Segundos a minutos (conmutación)

Complejidad

Más baja Más alto

Duración de la migración

Operación de duplicación única Configuración inicial + sincronización continua

Sincronización continua

No

Capacidad de opción alternativa

Manual (el origen se mantiene en funcionamiento) Integrada (automática)

Pruebas antes de la transición

Limitadas (prueba después de la duplicación) Es posible realizar pruebas completas (se puede probar en espera)

Ancho de banda de la red

Elevado durante la duplicación Moderado (continuo)

Repercusión en la DB de origen

Mínima (operaciones de lectura) Mínima (reenvío de rehacer)

Lo mejor para

Mayoría de migraciones, transición directa Misión crítica, tiempo de inactividad casi nulo

Soporte de no CDB

Soporte de multitenencia

Sí (CDB completa) Sí (CDB completa)

Estado de PDB posterior a la migración

CDB abierta, PDB MOUNTED CDB abierta, PDB MOUNTED

Requiere RMAN

Sí (para copia de seguridad inicial en un enfoque basado en copia de seguridad)

Requiere Data Guard

No

Nivel de habilidad requerido

Intermedia Avanzado

Proceso de transición

Redirección de aplicaciones a EC2 Comando de conmutación y redirección de aplicaciones

Comparación: migración de no CDB frente a multitenencia

En la siguiente tabla se resumen las diferencias clave entre la migración de DB multitenencia y no CDB:

Aspecto

Migración de no CDB

Migración de multitenencia (CDB con PDB)

Tipo de DB

Instancia única de no CDB (por ejemplo, ORCL) CDB (origen:RDSCDB, destino:ORCL) con CDB$ROOT + PDB$SEED + una o más PDB

Alcance de la migración

DB única CDB completa (todas las PDB se incluyen automáticamente)

Alcance de la duplicación de RMAN

Duplica una única DB Duplica todo la CDB (todos los contenedores)

Alcance de Data Guard

Protege una DB única Protege toda la CDB (todas las PDB se incluyen automáticamente)

Archivo de parámetros

Parámetros estándar iniciales Debe incluir enable_pluggable_database=TRUE

Estado de la DB posterior a la migración

La DB se abre en modo READ WRITE La CDB se abre en modo READ WRITE; las PDB permanecen en el estado MOUNTED

Apertura de PDB

N/A Todas las PDB se deben abrir manualmente con ALTER PLUGGABLE DATABASE ALL OPEN

Apertura automática de PDB al inicio

N/A Se debe configurar el estado de guardado de la PDB o el activador de inicio

Validación

Comprobaciones de base datos única Se debe validar la CDB y cada PDB individualmente

Limpieza específica de RDS

Eliminar usuarios/objetos de DB única Eliminar usuarios comunes de CDB$ROOT (se extiende a PDB); gestionar usuarios C##

Configuración de TNS/oyente

Servicio único de DB Servicio de CDB + servicios de PDB individuales registrados dinámicamente

Cadenas de conexión de aplicaciones

Conexión a DB única Conexión a servicios de PDB individuales (no CDB)

Estrategia de copia de seguridad

Copia de seguridad de DB única Copia de seguridad de CDB completa (incluye todas las PDB) o PDB individuales

Administración de recursos

Administración de recursos a nivel de DB Administración de recursos a nivel de CDB y PDB con Resource Manager

Complejidad

Menor complejidad Mayor complejidad debido a los varios contenedores y rutas de OMF

Prácticas recomendadas y recomendaciones

Esta sección proporciona las mejores prácticas integrales para una migración correcta de RDS Custom para Oracle a EC2.

Planificación previa a la migración

  1. Realice una evaluación exhaustiva:

    Antes de iniciar la migración, realice una evaluación exhaustiva de su entorno:

    • Inventario de DB: documente todas las DB, sus tamaños, arquitecturas (no CDB o multitenencia) y dependencias.

    • Dependencias de aplicaciones: identifique todas las aplicaciones que se conectan a la DB y sus métodos de conexión.

    • Referencias de rendimiento: capture las métricas de rendimiento (CPU, memoria, E/S, red) para compararlas después de la migración.

    • Requisitos de copia de seguridad y recuperación: documente el RPO (objetivo de punto de recuperación) y el RTO (objetivo de tiempo de recuperación).

    • Requisitos de conformidad: identifique cualquier requisito reglamentario o de conformidad que pueda afectar a la migración.

  2. Elija el tipo de instancia de EC2 adecuado:

    Seleccione un tipo de instancia de EC2 en función de las características de su carga de trabajo:

    Tipo de carga de trabajo

    Familia de instancias recomendada

    Características clave

    OLTP de uso general M6i, M6a, M7i Equilibrio entre potencia de computación, memoria y red
    Uso intensivo de memoria R6i, R6a, R7i, X2idn Alta relación entre memoria y CPU
    Uso intensivo de computación C6i, C6a, C7i Alto rendimiento de CPU
    Uso intensivo de E/S I4i, Im4gn Gran capacidad de almacenamiento local en SSD NVMe
    Cargas de trabajo mixtas M5, M5a, M5n Rendimiento equilibrado y rentable

    Directrices de tamaño de instancias:

    • Comience con la misma clase de instancia que su instancia de RDS Custom.

    • Supervise el uso de los recursos durante una migración de prueba.

    • Considera el uso de AWS Compute Optimizer para obtener recomendaciones.

    • Planifique un margen del 20-30 % para el crecimiento y las cargas máximas.

  3. Diseñe su arquitectura de almacenamiento:

    Tipos de volumen de EBS:

    Tipo de volumen

    Caso de uso

    Desempeño

    Costo

    gp3 Uso general, la mayoría de las cargas de trabajo Hasta 16 000 IOPS, 1000 MB/s Bajo
    io2 Block Express Misión crítica, alto rendimiento Hasta 256 000 IOPS, 4000 MB/s Alto
    Io1 Bases de datos de alto rendimiento Hasta 64 000 IOPS, 1000 MB/s Medio-alto
    gp2 Legado de uso general Hasta 16 000 IOPS Bajo

    Recomendaciones de diseño de almacenamiento:

    # Recommended layout for production databases /u01/app/oracle # Oracle software (50-100 GB, gp3) /u01/app/oracle/oradata # Data files (sized for database, gp3 or io2) /u01/app/oracle/arch # Archive logs (separate volume, gp3) /u01/app/oracle/backup # Backups (separate volume, gp3, can be detached post-migration)

    Ventajas de los volúmenes separados:

    • Asignación de IOPS independiente

    • Administración de capacidad más sencillo

    • Estrategias simplificadas de copias de seguridad e instantáneas

    • Mejor aislamiento del rendimiento

  4. Establezca un plan de reversión:

    Tenga siempre una estrategia de reversión:

    • Mantenga la instancia de RDS Custom en ejecución durante el período de validación (se recomiendan de 1 a 2 semanas).

    • Mantenga copias de seguridad periódicas tanto del origen como del destino.

    • Documente los procedimientos de reversión, incluidos los cambios en la cadena de conexión.

    • Pruebe el proceso de reversión en un entorno que no sea de producción.

    • Defina los criterios de reversión (degradación del rendimiento, incoherencia de los datos, errores de aplicación).

Prácticas recomendadas de ejecución de la migración

  1. Cronometrar la migración:

    Elija el periodo de tiempo óptimo:

    • Periodos de poco tráfico: fines de semana, días festivos u horas de menor actividad.

    • Periodos de mantenimiento: si es posible, ajústelos al mantenimiento programado.

    • Evite los períodos de fin de mes/fin de trimestre: estos períodos suelen tener un alto volumen de transacciones.

    • Tenga en cuenta las zonas horarias: para las solicitudes globales, elija una hora que minimice el impacto en todas las regiones.

  2. Plan de comunicación:

    Establezca una comunicación clara.

    • Notificación a las partes interesadas: informe a todas las partes interesadas con al menos 2 semanas de antelación.

    • Equipos de aplicaciones: coordine con los equipos de aplicaciones las actualizaciones de las cadenas de conexión.

    • Actualizaciones de estado: proporcione actualizaciones periódicas durante la migración.

    • Ruta de escalado: defina procedimientos de escalado claros para los problemas.

    • Comunicación posterior a la migración: confirme la finalización satisfactoria y cualquier acción de seguimiento.

  3. Puntos de control de validación:

    Implemente la validación en cada etapa:

    Validación previa a la migración:

    -- Capture object counts SQL> SELECT object_type, COUNT(*) FROM dba_objects GROUP BY object_type ORDER BY object_type; -- Capture tablespace usage SQL> SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024/1024, 2) AS size_gb FROM dba_data_files GROUP BY tablespace_name; -- Capture user counts SQL> SELECT COUNT(*) FROM dba_users; -- For multitenant, capture PDB information SQL> SELECT con_id, name, open_mode FROM v$pdbs;

    Validación posterior a la migración:

    -- Verify object counts match SQL> SELECT object_type, COUNT(*) FROM dba_objects GROUP BY object_type ORDER BY object_type; -- Verify no invalid objects SQL> SELECT owner, object_type, object_name FROM dba_objects WHERE status = 'INVALID'; -- Verify tablespace usage SQL> SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024/1024, 2) AS size_gb FROM dba_data_files GROUP BY tablespace_name; -- Verify database size matches SQL> SELECT SUM(bytes)/1024/1024/1024 AS total_size_gb FROM dba_data_files; -- For multitenant, verify all PDBs are open SQL> SELECT con_id, name, open_mode FROM v$pdbs;
  4. Validación del rendimiento:

    Compare las métricas de rendimiento antes y después de la migración:

    -- Capture AWR snapshots before migration (on RDS Custom) SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT; -- After migration (on EC2), compare metrics SQL> SELECT snap_id, begin_interval_time, end_interval_time FROM dba_hist_snapshot ORDER BY snap_id DESC FETCH FIRST 10 ROWS ONLY; -- Generate AWR report for comparison SQL> @?/rdbms/admin/awrrpt.sql

    Métricas clave para comparar:

    • Sesiones activas promedio

    • Tiempo de DB por transacción

    • Lecturas físicas por segundo

    • Lecturas físicas por segundo

    • Tamaño de rehacer por segundo

    • Llamadas de usuario por segundo

    • Tiempo de análisis por ejecución

Optimizaciones posteriores a la migración

  1. Tras la migración, optimice el rendimiento de la DB:

    1. Ajuste del rendimiento de la DB:

      Recopile estadísticas:

      -- Gather dictionary statistics SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS; -- Gather fixed object statistics SQL> EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS; -- Gather schema statistics SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCHEMA_NAME', cascade=>TRUE); -- For multitenant, gather statistics for each PDB SQL> ALTER SESSION SET CONTAINER = PDB_NAME; SQL> EXEC DBMS_STATS.GATHER_DATABASE_STATS(cascade=>TRUE);

      Optimice los parámetros de memoria:

      -- Enable Automatic Memory Management (if not already enabled) SQL> ALTER SYSTEM SET MEMORY_TARGET = 24G SCOPE=SPFILE; SQL> ALTER SYSTEM SET MEMORY_MAX_TARGET = 28G SCOPE=SPFILE; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP; -- Or use Automatic Shared Memory Management SQL> ALTER SYSTEM SET SGA_TARGET = 16G SCOPE=SPFILE; SQL> ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 8G SCOPE=SPFILE;

      Configure la caché de resultados:

      -- Enable result cache for frequently accessed queries SQL> ALTER SYSTEM SET RESULT_CACHE_MAX_SIZE = 1G; SQL> ALTER SYSTEM SET RESULT_CACHE_MODE = MANUAL;
    2. Optimización del almacenamiento:

      Habilite la compresión:

      -- For tables with infrequent updates ALTER TABLE large_table MOVE COMPRESS FOR OLTP; -- For archive/historical data ALTER TABLE archive_table MOVE COMPRESS FOR ARCHIVE HIGH; -- Rebuild indexes after compression ALTER INDEX index_name REBUILD ONLINE;

      Implemente particiones:

      -- For large tables, consider partitioning -- Example: Range partitioning by date CREATE TABLE sales_partitioned ( sale_id NUMBER, sale_date DATE, amount NUMBER ) PARTITION BY RANGE (sale_date) ( PARTITION sales_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')), PARTITION sales_2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD')), PARTITION sales_2026 VALUES LESS THAN (MAXVALUE) );
    3. Implemente la supervisión y las alertas:

      Métricas personalizadas de CloudWatch:

      Cree un script para publicar las métricas de Oracle en CloudWatch:

      #!/bin/bash # publish_oracle_metrics.sh INSTANCE_ID=$(ec2-metadata --instance-id | cut -d " " -f 2) REGION=$(ec2-metadata --availability-zone | cut -d " " -f 2 | sed 's/[a-z]$//') # Get tablespace usage TABLESPACE_USAGE=$(sqlplus -s / as sysdba << EOF SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF SELECT ROUND(MAX(percent_used), 2) FROM ( SELECT tablespace_name, ROUND((used_space/tablespace_size)*100, 2) AS percent_used FROM dba_tablespace_usage_metrics ); EXIT; EOF ) # Publish to CloudWatch aws cloudwatch put-metric-data \ --region $REGION \ --namespace "Oracle/Database" \ --metric-name "TablespaceUsage" \ --value $TABLESPACE_USAGE \ --unit Percent \ --dimensions InstanceId=$INSTANCE_ID,Database=ORCL # Add more metrics as needed (sessions, wait events, etc.)

      Configure las alarmas de CloudWatch:

      # Create alarm for high tablespace usage aws cloudwatch put-metric-alarm \ --alarm-name oracle-high-tablespace-usage \ --alarm-description "Alert when tablespace usage exceeds 85%" \ --metric-name TablespaceUsage \ --namespace Oracle/Database \ --statistic Maximum \ --period 300 \ --evaluation-periods 2 \ --threshold 85 \ --comparison-operator GreaterThanThreshold \ --alarm-actions arn:aws:sns:region:account-id:topic-name
    4. Endurecimiento de la seguridad:

      Seguridad de base de datos:

      -- Enforce password complexity ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90 PASSWORD_GRACE_TIME 7 PASSWORD_REUSE_TIME 365 PASSWORD_REUSE_MAX 5 FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 1; -- Enable audit ALTER SYSTEM SET AUDIT_TRAIL = DB, EXTENDED SCOPE=SPFILE; SHUTDOWN IMMEDIATE; STARTUP; -- Audit critical operations AUDIT ALL ON SYS.AUD$ BY ACCESS; AUDIT CREATE USER BY ACCESS; AUDIT DROP USER BY ACCESS; AUDIT ALTER USER BY ACCESS; AUDIT CREATE SESSION BY ACCESS WHENEVER NOT SUCCESSFUL;

      Seguridad de la red:

      # Restrict SSH access sudo vi /etc/ssh/sshd_config # Set: PermitRootLogin no # Set: PasswordAuthentication no # Configure firewall sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port port="1521" protocol="tcp" accept' sudo firewall-cmd --reload # Enable Oracle Native Network Encryption # Edit sqlnet.ora SQLNET.ENCRYPTION_SERVER = REQUIRED SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128) SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256, SHA384, SHA512)
  1. Estrategia de copia de seguridad y recuperación:

    Implemente una estrategia de copia de seguridad integral:

    #!/bin/bash # rman_backup.sh - Daily incremental backup script export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export ORACLE_SID=ORCL export PATH=$ORACLE_HOME/bin:$PATH # Backup to local disk rman target / << EOF RUN { ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT '/u01/app/oracle/backup/inc_%U'; BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG; DELETE NOPROMPT OBSOLETE; CROSSCHECK BACKUP; DELETE NOPROMPT EXPIRED BACKUP; } EXIT; EOF # Copy backups to S3 aws s3 sync /u01/app/oracle/backup/ s3://my-oracle-backups/$(date +%Y%m%d)/ \ --storage-class STANDARD_IA \ --exclude "*" \ --include "inc_*" \ --include "arch_*" # Clean up local backups older than 7 days find /u01/app/oracle/backup/ -name "inc_*" -mtime +7 -delete find /u01/app/oracle/backup/ -name "arch_*" -mtime +7 -delete

    Programe copias de seguridad con cron:

    # Edit crontab crontab -e # Add backup schedule # Full backup on Sunday at 2 AM 0 2 * * 0 /home/oracle/scripts/rman_full_backup.sh >> /home/oracle/logs/backup_full.log 2>&1 # Incremental backup Monday-Saturday at 2 AM 0 2 * * 1-6 /home/oracle/scripts/rman_incremental_backup.sh >> /home/oracle/logs/backup_inc.log 2>&1 # Archive log backup every 4 hours 0 */4 * * * /home/oracle/scripts/rman_archivelog_backup.sh >> /home/oracle/logs/backup_arch.log 2>&1

Optimización de costos

1. Tamaño correcto:

Tras la migración, supervise y optimice los costes:

  • Utilice AWS Cost Explorer para analizar los costes de EC2 y EBS.

  • Habilite AWS Compute Optimizer para recomendaciones de tipos de instancia.

  • Revise las métricas de CloudWatch para identificar los recursos infrautilizados.

  • Considere Reserved Instances o Savings Plans para cargas de trabajo predecibles.

2. Optimización del almacenamiento:

  • Implemente políticas de ciclo de vida para las copias de seguridad de S3 (pase a Glacier después de 30 días).

  • Elimine las instantáneas de EBS que no utilice de forma periódica.

  • Utilice gp3 en lugar de gp2 para ahorrar costes con el mismo rendimiento.

  • Separe y elimine los volúmenes de copia de seguridad una vez finalizada la migración.

3. Automation:

  • Automatice el inicio y la parada de las DB que no son de producción fuera del horario laboral.

  • Use AWS Systems Manager para la gestión de parches.

  • Implemente el escalado automático para réplicas de lectura si utiliza Data Guard.

Conclusión

Esta guía prescriptiva ofrecía estrategias de migración detalladas para trasladar las DB Oracle de Amazon RDS Custom para Oracle a DB Oracle autoadministradas en Amazon EC2. Dado que el servicio RDS Custom para Oracle dejará de estar disponible a partir del 31 de marzo de 2027, es importante planificar y ejecutar la migración con suficiente antelación.

Conclusiones clave

Opciones de migración:

  • Duplicación activa de RMAN: ideal para la mayoría de las migraciones, ya que mantiene la DB de origen en línea durante la duplicación y solo requiere un breve período de transición para la redirección de las aplicaciones.

  • Oracle Data Guard: ideal para cargas de trabajo de misión crítica que requieren un tiempo de inactividad prácticamente nulo, ya que ofrece sincronización continua y capacidad de conmutación integrada.

Arquitectura compatible:

  • Ambas opciones de migración admiten arquitecturas no CDB (instancia única tradicional) y multitenencia (CDB con PDB).

  • En el caso de multitenencia, ambos métodos administran automáticamente toda la CDB, incluidas las PDB, en una sola operación.

  • Las PDB requieren una configuración de apertura manual y apertura automática después de la migración.

Factores críticos de éxito:

  • Conectividad y configuración de red adecuadas entre el origen y el destino.

  • Compatibilidad exacta entre versiones (versión principal, versión secundaria, actualización de versiones y parches únicos).

  • Ancho de banda de la red adecuado para la transferencia de datos (RMAN) o el envío de rehacer (Data Guard).

  • Entendiendo que la duplicación activa de RMAN mantiene el origen en línea, solo es necesaria una breve transición.

  • Pruebas y validaciones exhaustivas antes de retirar el origen

  • Tareas integrales posteriores a la migración, incluidas las copias de seguridad, la supervisión y la configuración de la seguridad.

Pasos siguientes:

  1. Evalúe la arquitectura de su DB (no CDB o multitenencia).

  2. Elija la opción de migración adecuada en función de sus requisitos de complejidad y tolerancia de tiempo de inactividad.

  3. Complete todos los pasos previos, incluida la configuración de la instancia de EC2 y la configuración de la red.

  4. Siga los pasos de migración detallados para la opción que elija.

  5. Realice pruebas y validaciones exhaustivas.

  6. Complete las tareas posteriores a la migración para garantizar que el entorno de producción esté listo.

  7. Retire la instancia de RDS Custom tras una validación correcta.

Recursos adicionales

Compatibilidad con

Para obtener ayuda con la migración:

  • Póngase en contacto con AWS Support a través de la consola de administración de AWS.

  • Consulte con el servicio técnico de Oracle si tiene preguntas específicas de DB.

Información de documentación

Última actualización: marzo de 2026

Colaboradores:
  • Sharath Chandra Kampili, arquitecto de soluciones y especialista en DB, Amazon Web Services

  • Ibrahim Emara, especialista en DB, Amazon Web Services

  • Vetrivel Subramani, arquitecto de soluciones y especialista en DB, Amazon Web Services