Actualización automática del archivo de zona horaria de Oracle - Amazon Relational Database Service

Actualización automática del archivo de zona horaria de Oracle

Con la opción TIMEZONE_FILE_AUTOUPGRADE, puede actualizar el archivo de zona horaria actual a la versión más reciente de su instancia de base de datos de RDS for Oracle.

Información general sobre los archivos de zona horaria de Oracle

Un archivo de zona horaria de Oracle Database almacena la siguiente información:

  • Desfase con respecto a la hora universal coordinada (UTC)

  • Horas de transición para el horario de verano (DST)

  • Abreviaturas de hora estándar y DST

Oracle Database proporciona varias versiones de los archivos de zonas horarias. Cuando se crea una base de datos Oracle en un entorno local, se elige la versión del archivo de zona horaria. Para obtener más información, consulte Choosing a Time Zone File (Selección de un archivo de zona horaria) en la Oracle Database Globalization Support Guide (Guía de soporte de globalización de Oracle Database).

Si las reglas cambian en lo referente al DST, Oracle publica nuevos archivos de zona horaria. Oracle publica estos nuevos archivos de zona horaria con independencia del calendario de actualizaciones de versiones (RU) y revisiones de actualizaciones de versiones (RUR). Los archivos de zona horaria residen en el host de la base de datos en el directorio $ORACLE_HOME/oracore/zoneinfo/. Los nombres de archivo de zona horaria utilizan el formato DSTv version, como en DSTv35.

Cómo afecta el archivo de zona horaria a la transferencia de datos

En Oracle Database, el tipo de datos TIMESTAMP WITH TIME ZONE almacena datos de marca temporal y zona horaria. Datos con el tipo de datos TIMESTAMP WITH TIME ZONE utiliza las reglas de la versión del archivo de zona horaria asociada. Por lo tanto, cuando se actualiza el archivo de zona horaria, eso afecta a los datos TIMESTAMP WITH TIME ZONE existentes.

Se pueden producir problemas al transferir datos entre bases de datos que utilizan diferentes versiones del archivo de zona horaria. Por ejemplo, si importa datos de una base de datos de origen con una versión de archivo de zona horaria más alta que la base de datos de destino, la base de datos devuelve el error ORA-39405. Anteriormente, tenía que evitar el error utilizando cualquiera de las siguientes técnicas:

  • Crear una instancia de RDS para Oracle DB con el archivo de zona horaria deseado, exportar datos de la base de datos de origen y, a continuación, importarlos a la nueva base de datos.

  • Usar AWS DMS o replicación lógica para migrar los datos.

Actualizaciones automáticas mediante la opción TIMEZONE_FILE_AUTOUPGRADE

Cuando el grupo de opciones adjunto a su instancia de base de datos de RDS para Oracle incluye la opción TIMEZONE_FILE_AUTOUPGRADE, RDS actualiza los archivos de zona horaria de manera automática. Al garantizar que las bases de datos de Oracle utilicen la misma versión del archivo de zona horaria, evita tener que recurrir a técnicas manuales que consumen mucho tiempo para mover datos entre diferentes entornos. Tanto las bases de datos de contenedores (CDB) como las que no lo son admiten la opción TIMEZONE_FILE_AUTOUPGRADE.

Al añadir la opción TIMEZONE_FILE_AUTOUPGRADE al grupo de opciones, puede elegir si desea añadir la opción inmediatamente o durante el período de mantenimiento. Una vez que la instancia de base de datos aplique la nueva opción, RDS comprueba si puede instalar un archivo de versión DSTv más reciente. La versión de DStv de destino depende de lo siguiente:

  • La versión secundaria del motor que su instancia de base de datos está ejecutando actualmente

  • La versión secundaria del motor a la que desea actualizar la instancia de base de datos

Por ejemplo, la versión actual del archivo de zona horaria podría ser DSTv33. Cuando RDS aplique la actualización al grupo de opciones, podría determinar que DSTv34 ya está disponible en su sistema de archivos de la instancia de base de datos. RDS actualizará entonces su archivo de zona horaria a DSTv34 de manera automática.

Para buscar las versiones de DST disponibles en las actualizaciones de las versiones de RDS compatibles, consulte las revisiones en Release notes for Amazon Relational Database Service (Amazon RDS) for Oracle (Notas de versión de Amazon Relational Database Service [Amazon RDS] para Oracle). Por ejemplo, la versión 19.0.0.0.ru-2022-10.rur-2022-10.r1 incluye la revisión 34533061: RDBMS - DSTV39 UPDATE - TZDATA2022C.

Estrategias para actualizar el archivo de zona horaria

La actualización del motor de base de datos y la adición de la opción TIMEZONE_FILE_AUTOUPGRADE a un grupo de opciones son operaciones independientes. Al agregar la opción TIMEZONE_FILE_AUTOUPGRADE, se inicia la actualización del archivo de zona horaria si hay uno más actual disponible. Ejecute los siguientes comandos (solo se muestran las opciones relevantes) inmediatamente o en el siguiente período de mantenimiento:

  • Actualice el motor de base de datos únicamente mediante el siguiente comando de la CLI de RDS:

    modify-db-instance --engine-version name ...
  • Para ello, agregue la opción TIMEZONE_FILE_AUTOUPGRADE únicamente mediante el siguiente comando de la CLI:

    add-option-to-option-group --option-group-name name --options OptionName=TIMEZONE_FILE_AUTOUPGRADE ...
  • Actualice el motor de base de datos y agregue un nuevo grupo de opciones a la instancia mediante el siguiente comando de la CLI:

    modify-db-instance --engine-version name --option-group-name name ...

La estrategia de actualización depende de si desea actualizar la base de datos y el archivo de zona horaria de manera conjunta o realizar solo una de estas operaciones. Tenga en cuenta que si actualiza el grupo de opciones y, a continuación, el motor de base de datos en operaciones de API independientes, es posible que se esté realizando una actualización del archivo de zona horaria cuando actualice el motor de base de datos.

Los ejemplos de esta sección suponen lo siguiente:

  • Aún no ha agregado TIMEZONE_FILE_AUTOUPGRADE al grupo de opciones asociado actualmente a su instancia de base de datos.

  • Su instancia de base de datos utiliza la versión de base de datos 19.0.0.0.ru-2019-07.rur-2019-07.r1 y el archivo de zona horaria DSTv33.

  • Su sistema de archivos de instancia de base de datos incluye el archivo DSTv34.

  • La actualización de la versión 19.0.0.0.ru-2022-10.rur-2022-10.r1 incluye DSTv35.

Para actualizar el archivo de zona horaria, utilice las siguientes estrategias.

Actualice el archivo de zona horaria sin actualizar el motor

En este escenario, la base de datos utiliza DSTv33, pero el sistema de archivos de instancias de base de datos dispone de DSTv34. Desea actualizar el archivo de zona horaria que utiliza la instancia de base de datos de DSTv33 a DSTv34, pero no desea actualizar el motor a una versión nueva secundaria, que incluye DSTv35.

En un comando add-option-to-option-group, agregue TIMEZONE_FILE_AUTOUPGRADE al grupo de opciones que utiliza su instancia de base de datos. Especifique si desea añadir la opción inmediatamente o aplazarlo hasta el período de mantenimiento. Tras aplicar la opción TIMEZONE_FILE_AUTOUPGRADE, RDS hace lo siguiente:

  1. Comprueba si hay una nueva versión de DST.

  2. Determina que el DSTv34 está disponible en el sistema de archivos.

  3. Actualiza el archivo de zona horaria inmediatamente.

Actualice el archivo de zona horaria y la versión del motor de base de datos

En este escenario, la base de datos utiliza DSTv33, pero el sistema de archivos de instancias de base de datos dispone de DSTv34. Desea actualizar su motor de base de datos a la versión secundaria 19.0.0.0.ru-2022-10.rur-2022-10.r1, que incluye DSTv35, y actualizar su archivo de zona horaria a DSTv35 durante la actualización del motor. Por lo tanto, su objetivo es omitir DSTv34 y actualizar sus archivos de zona horaria directamente a DSTv35.

Para actualizar el motor y el archivo de zona horaria al mismo tiempo, ejecute modify-db-instance con las opciones --option-group-name y --engine-version. Puede ejecutar el comando inmediatamente o aplazarlo hasta el período de mantenimiento. In --option-group-name, especifique un grupo de opciones que incluya la opción TIMEZONE_FILE_AUTOUPGRADE. Por ejemplo:

aws rds modify-db-instance --db-instance-identifier my-instance \ --engine-version new-version \ ----option-group-name og-with-timezone-file-autoupgrade \ --apply-immediately

RDS comienza a actualizar su motor a 19.0.0.0.ru-2022-10.rur-2022-10.r1. Una vez aplicada la opción TIMEZONE_FILE_AUTOUPGRADE, RDS comprueba si hay una nueva versión de DST, ve que DSTv35 está disponible en 19.0.0.0.ru-2022-10.rur-2022-10.r1 e inicia inmediatamente la actualización a DSTv35.

Para actualizar el motor inmediatamente y, a continuación, actualizar el archivo de zona horaria, lleve a cabo las siguientes operaciones en esta secuencia:

  1. Actualice el motor de base de datos únicamente mediante el siguiente comando de la CLI:

    aws rds modify-db-instance \ --db-instance-identifier my-instance \ --engine-version new-version \ --apply-immediately
  2. Agregue la opción TIMEZONE_FILE_AUTOUPGRADE al grupo de opciones adjunto a su instancia mediante el siguiente comando de la CLI:

    aws rds add-option-to-option-group \ --option-group-name og-in-use-by-your-instance \ --options OptionName=TIMEZONE_FILE_AUTOUPGRADE \ --apply-immediately

Actualice la versión del motor de base de datos sin actualizar el archivo de zona horaria.

En este escenario, la base de datos utiliza DSTv33, pero el sistema de archivos de instancias de base de datos dispone de DSTv34. Desea actualizar su motor de base de datos a la versión 19.0.0.0.ru-2022-10.rur-2022-10.r1, que incluye DSTv35, pero retener el archivo de zona horaria DSTv33. Puede elegir esta estrategia por las razones siguientes:

  • Sus datos no utilizan el tipo de datos TIMESTAMP WITH TIME ZONE.

  • Sus datos utilizan el tipo de datos TIMESTAMP WITH TIME ZONE, pero los datos no se ven afectados por los cambios de zona horaria.

  • Desea posponer la actualización del archivo de zona horaria porque no puede tolerar el tiempo de inactividad adicional.

La estrategia depende de cuál de las siguientes posibilidades se dé:

  • Su instancia de base de datos no está asociada a un grupo de opciones que incluya TIMEZONE_FILE_AUTOUPGRADE. En su comando modify-db-instance, no especifique un nuevo grupo de opciones para que RDS no actualice el archivo de zona horaria.

  • Su instancia de base de datos está asociada actualmente a un grupo de opciones que incluye TIMEZONE_FILE_AUTOUPGRADE. Dentro de un único comando modify-db-instance, asocie su instancia de base de datos a un grupo de opciones que no incluya TIMEZONE_FILE_AUTOUPGRADE y, a continuación, actualice su motor de base de datos a 19.0.0.0.ru-2022-10.rur-2022-10.r1.

Tiempo de inactividad durante la actualización del archivo de zona horaria

Cuando RDS actualiza el archivo de zona horaria, los datos que utiliza TIMESTAMP WITH TIME ZONE podrían cambiar. En este caso, su principal preocupación es el tiempo de inactividad.

aviso

Si añade la opción TIMEZONE_FILE_AUTOUPGRADE, la actualización del motor podría haber prolongado el tiempo de inactividad. La actualización de datos de zona horaria para una base de datos grande puede tardar horas o incluso días.

La duración de la actualización del archivo de zona horaria depende de factores como los siguientes:

  • La cantidad de datos de TIMESTAMP WITH TIME ZONE de la base de datos

  • La configuración de la instancia de la base de datos

  • La clase de instancia de base de datos

  • La configuración de almacenamiento

  • La configuración de las bases de datos

  • La configuración de parámetros de base de datos

Se puede producir un tiempo de inactividad adicional cuando hace lo siguiente:

  • Añada la opción al grupo de opciones si la instancia de base de datos utiliza un archivo de zona horaria obsoleto

  • Actualice el motor de base de datos Oracle cuando la nueva versión del motor contiene una nueva versión del archivo de zona horaria

nota

Durante la actualización del archivo de zona horaria, RDS para Oracle llama a PURGE DBA_RECYCLEBIN.

Preparación para actualizar el archivo de zona horaria

Una actualización de archivos de zona horaria tiene dos fases separadas: preparación y actualización. Si bien no es necesario, recomendamos encarecidamente que realice el paso de preparación. En este paso, descubrirá qué datos se verán afectados al ejecutar el procedimiento PL/SQL DBMS_DST.FIND_AFFECTED_TABLES. Para obtener más información sobre la ventana de preparación, consulte Actualización del archivo de zona horaria y la marca de hora con datos de zona horaria en la Documentación de la base de datos de Oracle.

Para preparar la actualización del archivo de zona horaria
  1. Conecte el cliente SQL a la base de datos de Oracle utilizando el cliente SQL.

  2. Determine la versión actual del archivo de zona horaria utilizada.

    SELECT * FROM V$TIMEZONE_FILE;
  3. Determine la última versión del archivo de zona horaria disponible en su instancia de base de datos.

    SELECT DBMS_DST.GET_LATEST_TIMEZONE_VERSION FROM DUAL;
  4. Determine el tamaño total de las tablas que tienen columnas de tipo TIMESTAMP WITH LOCAL TIME ZONE o TIMESTAMP WITH TIME ZONE.

    SELECT SUM(BYTES)/1024/1024/1024 "Total_size_w_TSTZ_columns_GB" FROM DBA_SEGMENTS WHERE SEGMENT_TYPE LIKE 'TABLE%' AND (OWNER, SEGMENT_NAME) IN (SELECT OWNER, TABLE_NAME FROM DBA_TAB_COLUMNS WHERE DATA_TYPE LIKE 'TIMESTAMP%TIME ZONE');
  5. Determine los nombres y tamaños de los segmentos que tienen columnas de tipo TIMESTAMP WITH LOCAL TIME ZONE o TIMESTAMP WITH TIME ZONE.

    SELECT OWNER, SEGMENT_NAME, SUM(BYTES)/1024/1024/1024 "SEGMENT_SIZE_W_TSTZ_COLUMNS_GB" FROM DBA_SEGMENTS WHERE SEGMENT_TYPE LIKE 'TABLE%' AND (OWNER, SEGMENT_NAME) IN (SELECT OWNER, TABLE_NAME FROM DBA_TAB_COLUMNS WHERE DATA_TYPE LIKE 'TIMESTAMP%TIME ZONE') GROUP BY OWNER, SEGMENT_NAME;
  6. Ejecute el paso de preparación.

    • El procedimiento DBMS_DST.CREATE_AFFECTED_TABLE crea una tabla para almacenar cualquier dato afectado. Se pasa el nombre de esta tabla al procedimiento DBMS_DST.FIND_AFFECTED_TABLES. Para obtener más información, consulte el Procedimiento CREATE_AFFECTED_TABLE en la Documentación de la base de datos de Oracle.

    • Este procedimiento CREATE_ERROR_TABLE crea una tabla para registrar errores. Para obtener más información, consulte el Procedimiento CREATE_ERROR_TABLE en la Documentación de la base de datos de Oracle.

    En el siguiente ejemplo se crean los datos afectados y las tablas de errores, y se buscan todas las tablas afectadas.

    EXEC DBMS_DST.CREATE_ERROR_TABLE('my_error_table') EXEC DBMS_DST.CREATE_AFFECTED_TABLE('my_affected_table') EXEC DBMS_DST.BEGIN_PREPARE(new_version); EXEC DBMS_DST.FIND_AFFECTED_TABLES('my_affected_table', TRUE, 'my_error_table'); EXEC DBMS_DST.END_PREPARE; SELECT * FROM my_affected_table; SELECT * FROM my_error_table;
  7. Consulte las tablas afectadas y de error.

    SELECT * FROM my_affected_table; SELECT * FROM my_error_table;

Adición de la opción de actualización automática del archivo de zona horaria

Al añadir la opción a un grupo de opciones, este se encuentra en uno de los siguientes estados:

  • Actualmente hay un grupo de opciones asociado al menos a una instancia de base de datos. Al añadir la opción, todas las instancias de base de datos que utilizan este grupo de opciones se reinician automáticamente. Esto provoca una breve interrupción.

  • No hay ningún grupo de opciones asociado a ninguna instancia de base de datos. Tiene previsto añadir la opción y, a continuación, asociar el grupo de opciones existente a las instancias de base de datos existentes o a una instancia de base de datos nueva.

  • Crea un nuevo grupo de opciones y luego añade la opción. Tiene previsto asociar el nuevo grupo de opciones a instancias de base de datos ya existentes o a una nueva.

Consola

Para agregar la opción de actualización del archivo de zona horaria a una instancia de base de datos
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/.

  2. En el panel de navegación, elija Option groups (Grupos de opciones).

  3. Determine el grupo de opciones que desea utilizar. Puede crear un grupo de opciones o utilizar uno existente. Si desea utilizar un grupo de opciones existente, vaya al siguiente paso. De lo contrario, cree un grupo de opciones de base de datos personalizado con las siguientes opciones:

    1. En Engine (Motor), elija la edición de Oracle Database que corresponda a la instancia de base de datos.

    2. En Major engine version (Versión principal del motor), elija la versión de su instancia de base de datos.

    Para obtener más información, consulte Creación de un grupo de opciones.

  4. Elija el grupo de opciones que desea modificar y, a continuación, elija Add option (Agregar opción).

  5. En la ventana Add option (Añadir opción), haga lo siguiente:

    1. Elija TIMEZONE_FILE_AUTOUPGRADE.

    2. Para habilitar la opción en todas las instancias de base de datos asociadas en cuanto la agregue, en Apply Immediately, elija Yes. Si elige No (valor predeterminado), la opción se habilita para cada instancia de base de datos asociada durante su siguiente período de mantenimiento.

  6. Cuando los ajustes sean los deseados, elija Add Option (Agregar opción).

AWS CLI

En el ejemplo siguiente se usa el comando de la AWS CLI add-option-to-option-group para añadir la opción TIMEZONE_FILE_AUTOUPGRADE a un grupo de opciones llamado myoptiongroup.

Para Linux, macOS o Unix:

aws rds add-option-to-option-group \ --option-group-name "myoptiongroup" \ --options "OptionName=TIMEZONE_FILE_AUTOUPGRADE" \ --apply-immediately

En Windows:

aws rds add-option-to-option-group ^ --option-group-name "myoptiongroup" ^ --options "OptionName=TIMEZONE_FILE_AUTOUPGRADE" ^ --apply-immediately

Verificación de los datos después de la actualización del archivo de zona horaria

Le recomendamos que verifique los datos después de actualizar el archivo de zona horaria. Durante el paso de preparación, RDS para Oracle crea automáticamente las siguientes tablas:

  • rdsadmin.rds_dst_affected_tables: enumera las tablas que contienen datos afectados por la actualización

  • rdsadmin.rds_dst_error_table: muestra los errores generados durante la actualización

Estas tablas son independientes de las tablas que se crean en la ventana de preparación. Para ver los resultados de la actualización, consulte las tablas de la siguiente manera.

SELECT * FROM rdsadmin.rds_dst_affected_tables; SELECT * FROM rdsadmin.rds_dst_error_table;

Para obtener más información sobre el esquema de los datos afectados y las tablas de errores, consulte el Procedimiento FIND_AFFECTED_TABLES en la documentación de Oracle.