Gestión de la zona horaria

El campo Zona horaria de la consola y la API permite iniciar recursos del sistema de base de datos con una zona horaria que no sea UTC (valor por defecto).

La zona horaria que especifique al crear el sistema de base de datos se aplica al host y a Oracle Grid Infrastructure (si el sistema tiene Grid Infrastructure) y controla la zona horaria de los archivos log de base de datos. La zona horaria de la base de datos en sí no se ve afectada. Sin embargo, la zona horaria de la base de datos solo afecta al tipo de dato timestamp. Puede cambiar manualmente la zona horaria de la base de datos, pero Oracle recomienda mantenerla como UTC (valor por defecto) para evitar la conversión de datos y mejorar el rendimiento cuando se transfieran datos entre bases de datos. Esta configuración es especialmente importante para las bases de datos distribuidas, la replicación y las operaciones de importación y exportación.

Aunque UTC es la zona horaria recomendada que se debe utilizar, tener una zona horaria común para los clientes de la base de datos y los hosts de aplicación puede simplificar la gestión y la solución de problemas para el administrador de la base de datos.

Note:

Las zonas horarias se utilizan principalmente con fines de visualización o para manejar la entrada del usuario. El cambio de zona horaria no cambia la hora del reloj del sistema.

Opciones de zona horaria

Tanto si utiliza la consola como la API, las opciones de zona horaria que puede seleccionar se representan en el formato de la región especificada, por ejemplo, America/Los_Angeles. La consola permite seleccionar UTC, la zona horaria detectada en el navegador (si este soporta la detección de zona horaria) o una zona horaria alternativa.

Para especificar una zona horaria alternativa (la opción Seleccionar otra zona horaria), primero debe seleccionar un valor en el campo Región o país para limitar la lista de zonas horarias entre las que elegir en el campo Zona horaria. En el ejemplo America/Los_Angeles, America es la región horaria y Los_Angeles es la zona horaria. Las opciones que aparecen en estos dos campos se corresponden aproximadamente con las zonas horarias soportadas en la clase Java.util.TimeZone y en el sistema operativo Linux. Si no aparece la zona horaria que busca, intente seleccionar "Varios" en el campo Región y país.

Sugerencia:

Si utiliza la API y desea ver una lista de las zonas horarias soportadas, puede examinar las opciones de zona horaria de la consola. Estas opciones aparecen en la página Crear sistema de base de datos cuando muestra opciones avanzadas después de seleccionar una unidad del sistema de base de datos.

Visualización de la zona horaria actual

Realice los siguientes pasos para ver la información de zona horaria.

  1. Conéctese al host como usuario grid.

    Por ejemplo:
    [opc@rc ~]$ sudo su - grid
  2. Utilice el siguiente comando para ver la zona horaria.
    timedatectl
    Por ejemplo:
    [grid@rc ~]$ timedatectl 
            Local time: Thu 2023-03-16 08:00:25 UTC 
        Universal time: Thu 2023-03-16 08:00:25 UTC 
              RTC time: Thu 2023-03-16 08:00:21 
             Time zone: UTC (UTC, +0000) 
           NTP enabled: yes 
      NTP synchronized: no 
       RTC in local TZ: no 
            DST active: n/a

    Observe que el sistema está actualmente en la zona horaria UTC.

  3. Conéctese a la base de datos.

    Por ejemplo:
    [grid@rc ~]$ sqlplus / as sysdba 
    
    SQL*Plus: Release 21.0.0.0.0 - Production on Thu Mar 16 08:00:33 2023 
    Version 21.9.0.0.0 
    
    Copyright (c) 1982, 2022, Oracle.  All rights reserved. 
    
    Connected to:
    Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 -Production 
    Version 21.9.0.0.0
  4. Puede ver la hora actual de la base de datos mediante el siguiente comando.
    sysdate
    Por ejemplo:
    SQL> select to_char(sysdate,'DD-MON-YYYY HH24:MI:SS') from dual; 
    
    TO_CHAR(SYSDATE,'DD-
    --------------------
    16-MAR-2023 08:00:40
  5. Salga.

Cambio de la zona horaria del sistema de base de datos

Realice los siguientes pasos para definir la zona horaria del sistema de base de datos.

  1. Conéctese al host como usuario root.

    Por ejemplo:
    [opc@rc ~]$ sudo su -
  2. Identifique el valor de zona horaria (TZ) correcto que se va a definir mediante el siguiente comando. Por ejemplo, si desea identificar el valor de TZ correcto para la zona horaria oriental de EE. UU. (EST/EDT), puede utilizar el comando tzselect y seleccionar Americas/United States/Eastern.
    tzselect
    Por ejemplo:
    [root@rc ~]# tzselect 
    Please identify a location so that time zone rules can be set correctly. 
    Please select a continent or ocean. 
     1) Africa 
     2) Americas 
     3) Antarctica 
     4) Arctic Ocean 
     5) Asia 
     6) Atlantic Ocean 
     7) Australia 
     8) Europe 
     9) Indian Ocean 
    10) Pacific Ocean 
    11) none - I want to specify the time zone using the Posix TZ format. 
    #? 2 
    Please select a country. 
     1) Anguilla              19) Dominican Republic    37) Peru 
     2) Antigua & Barbuda     20) Ecuador               38) Puerto Rico 
     3) Argentina             21) El Salvador           39) St Barthelemy 
     4) Aruba                 22) French Guiana         40) St Kitts & Nevis 
     5) Bahamas               23) Greenland             41) St Lucia 
     6) Barbados              24) Grenada               42) St Maarten (Dutch) 
     7) Belize                25) Guadeloupe            43) St Martin (French) 
     8) Bolivia               26) Guatemala             44) St Pierre & Miquelon 
     9) Brazil                27) Guyana                45) St Vincent 
    10) Canada                28) Haiti                 46) Suriname 
    11) Caribbean NL          29) Honduras              47) Trinidad & Tobago 
    12) Cayman Islands        30) Jamaica               48) Turks & Caicos Is 
    13) Chile                 31) Martinique            49) United States 
    14) Colombia              32) Mexico                50) Uruguay 
    15) Costa Rica            33) Montserrat            51) Venezuela 
    16) Cuba                  34) Nicaragua             52) Virgin Islands (UK) 
    17) Curaçao               35) Panama                53) Virgin Islands (US) 
    18) Dominica              36) Paraguay 
    #? 49 
    Please select one of the following time zone regions.
     1) Eastern (most areas)              16) Central - ND (Morton rural) 
     2) Eastern - MI (most areas)         17) Central - ND (Mercer) 
     3) Eastern - KY (Louisville area)    18) Mountain (most areas) 
     4) Eastern - KY (Wayne)              19) Mountain - ID (south); OR (east) 
     5) Eastern - IN (most areas)         20) MST - Arizona (except Navajo) 
     6) Eastern - IN (Da, Du, K, Mn)      21) Pacific 
     7) Eastern - IN (Pulaski)            22) Alaska (most areas) 
     8) Eastern - IN (Crawford)           23) Alaska - Juneau area 
     9) Eastern - IN (Pike)               24) Alaska - Sitka area 
    10) Eastern - IN (Switzerland)        25) Alaska - Annette Island 
    11) Central (most areas)              26) Alaska - Yakutat 
    12) Central - IN (Perry)              27) Alaska (west) 
    13) Central - IN (Starke)             28) Aleutian Islands 
    14) Central - MI (Wisconsin border)   29) Hawaii 
    15) Central - ND (Oliver) 
    #? 1 
    The following information has been given:
            United States 
            Eastern (most areas) 
    Therefore TZ='America/New_York' will be used. 
        Local time is now:    Thu Mar 16 04:01:39 EDT 2023. 
    Universal Time is now:    Thu Mar 16 08:01:39 UTC 2023. 
    Is the above information OK? 
    1) Yes 
    2) No 
    #? 1 
    You can make this change permanent for yourself by appending the line 
            TZ='America/New_York'; export TZ 
    to the file '.profile' in your home directory; then log out and log in again. 
    Here is that TZ value again, this time on standard output so that you 
    can use the /bin/tzselect command in shell scripts: 
            America/New_York
    [root@rc ~]#

    Con el comando tzselect, hemos identificado el valor de TZ como America/New_York para la zona horaria EDT.

  3. Actualice el siguiente comando para definir la nueva zona horaria.
    timedatectl set-timezone <new_time_zone>
    Por ejemplo:
    [root@rc ~]# timedatectl set-timezone America/New_York
  4. Verifique si la zona horaria se ha actualizado mediante el siguiente comando.
    timedatectl
    Por ejemplo:
    [root@rc ~]# timedatectl 
             Local time: Thu 2023-03-16 04:02:15 EDT 
         Universal time: Thu 2023-03-16 08:02:15 UTC 
               RTC time: Thu 2023-03-16 08:02:10 
              Time zone: America/New_York (EDT, -0400) 
            NTP enabled: yes 
       NTP synchronized: no 
        RTC in local TZ: no 
             DST active: yes 
        Last DST change: DST began at 
                         Sun 2023-03-12 01:59:59 EST 
                         Sun 2023-03-12 03:00:00 EDT 
        Next DST change: DST ends (the clock jumps one hour backwards) at 
                         Sun 2023-11-05 01:59:59 EDT 
                         Sun 2023-11-05 01:00:00 EST

    Observe que el sistema ahora está en la zona horaria America/New_York (EDT).

  5. Salga.

Cambio de zona horaria del host en sistemas de base de datos que utilizan Grid Infrastructure

La zona horaria de Oracle Grid Infrastructure determina la zona horaria de los archivos log de base de datos.

Realice los siguientes pasos para actualizar la información de zona horaria del host de los sistemas de base de datos que utilizan la infraestructura de grid para la gestión de almacenamiento.

Note:

  • Los pasos del 1 al 10 se deben realizar en todos los nodos de un cluster de RAC.
  • Los pasos del 11 al 15 se pueden realizar en cualquier nodo de un cluster de RAC.
  • Este procedimiento no se aplica a los sistemas de base de datos con aprovisionamiento rápido que utilizan Logical Volume Manager en lugar de Grid Infrastructure para la gestión de almacenamiento.
  1. Conéctese al host como el usuario grid.

    Por ejemplo:
    [opc@rc ~]$ sudo su - grid
  2. Identifique el valor de zona horaria (TZ) correcto que se va a definir mediante el siguiente comando. Por ejemplo, si desea identificar el valor de TZ correcto para la zona horaria del Pacífico de EE. UU. (PST/PDT), puede utilizar el comando tzselect y seleccionar Americas/United States/Eastern.
    tzselect
    Por ejemplo:
    [grid@rc ~]$ tzselect 
    Please identify a location so that time zone rules can be set correctly. 
    Please select a continent or ocean. 
     1) Africa 
     2) Americas 
     3) Antarctica 
     4) Arctic Ocean 
     5) Asia 
     6) Atlantic Ocean 
     7) Australia 
     8) Europe 
     9) Indian Ocean 
    10) Pacific Ocean 
    11) none - I want to specify the time zone using the Posix TZ format. 
    #? 2 
    Please select a country. 
     1) Anguilla              19) Dominican Republic    37) Peru 
     2) Antigua & Barbuda     20) Ecuador               38) Puerto Rico 
     3) Argentina             21) El Salvador           39) St Barthelemy 
     4) Aruba                 22) French Guiana         40) St Kitts & Nevis 
     5) Bahamas               23) Greenland             41) St Lucia 
     6) Barbados              24) Grenada               42) St Maarten (Dutch) 
     7) Belize                25) Guadeloupe            43) St Martin (French) 
     8) Bolivia               26) Guatemala             44) St Pierre & Miquelon 
     9) Brazil                27) Guyana                45) St Vincent 
    10) Canada                28) Haiti                 46) Suriname 
    11) Caribbean NL          29) Honduras              47) Trinidad & Tobago 
    12) Cayman Islands        30) Jamaica               48) Turks & Caicos Is 
    13) Chile                 31) Martinique            49) United States 
    14) Colombia              32) Mexico                50) Uruguay 
    15) Costa Rica            33) Montserrat            51) Venezuela 
    16) Cuba                  34) Nicaragua             52) Virgin Islands (UK) 
    17) Curaçao               35) Panama                53) Virgin Islands (US) 
    18) Dominica              36) Paraguay 
    #? 49 
    Please select one of the following time zone regions. 
     1) Eastern (most areas)              16) Central - ND (Morton rural) 
     2) Eastern - MI (most areas)         17) Central - ND (Mercer) 
     3) Eastern - KY (Louisville area)    18) Mountain (most areas) 
     4) Eastern - KY (Wayne)              19) Mountain - ID (south); OR (east) 
     5) Eastern - IN (most areas)         20) MST - Arizona (except Navajo) 
     6) Eastern - IN (Da, Du, K, Mn)      21) Pacific 
     7) Eastern - IN (Pulaski)            22) Alaska (most areas) 
     8) Eastern - IN (Crawford)           23) Alaska - Juneau area 
     9) Eastern - IN (Pike)               24) Alaska - Sitka area 
    10) Eastern - IN (Switzerland)        25) Alaska - Annette Island 
    11) Central (most areas)              26) Alaska - Yakutat 
    12) Central - IN (Perry)              27) Alaska (west) 
    13) Central - IN (Starke)             28) Aleutian Islands 
    14) Central - MI (Wisconsin border)   29) Hawaii 
    15) Central - ND (Oliver) 
    #? 21 
    The following information has been given: 
            United States 
            Pacific 
    Therefore TZ='America/Los_Angeles' will be used. 
        Local time is now:    Thu Mar 16 01:08:57 PDT 2023. 
    Universal Time is now:    Thu Mar 16 08:08:57 UTC 2023. 
    Is the above information OK? 
    1) Yes 
    2) No 
    #? 1 
    You can make this change permanent for yourself by appending the line 
            TZ='America/Los_Angeles'; export TZ 
    to the file '.profile' in your home directory; then log out and log in again. 
    Here is that TZ value again, this time on standard output so that you 
    can use the /bin/tzselect command in shell scripts: 
            America/Los_Angeles 
    [grid@rc ~]$

    Con el comando tzselect, hemos identificado el valor de TZ como America/Los_Angeles para la zona horaria PDT.

  3. Ejecute el siguiente comando para obtener el nombre de host.
    hostname
    Por ejemplo:
    [grid@rc ~]$ hostname 
    rc
  4. Ejecute el siguiente comando para obtener el nombre de la base de datos.
    srvctl config database -v
    Por ejemplo:
    [grid@rc ~]$ srvctl config database -v 
    SMDB0316_iad1cx    /u01/app/oracle/product/21.0.0.0/dbhome_1    21.0.0.0.0
  5. Desconéctese como usuario grid y conéctese como usuario root.

    Por ejemplo:
    [grid@rc ~]$ exit 
    logout 
    [opc@rc ~]$ sudo su -
  6. Navegue al siguiente directorio.
    cd $GRID_HOME/crs/install
    Por ejemplo:
    [root@rc ~]# cd /u01/app/21.0.0.0/grid/crs/install/
  7. Edite el contenido de TZ del siguiente archivo. Guarde y cierre el archivo después de editarlo.
    vim s_crsconfig_<hostname>_env.txt
    Por ejemplo:
    [root@rc install]# vim s_crsconfig_rc_env.txt
  8. Verifique si la entrada TZ del archivo está actualizada.
    cat s_crsconfig_<hostname>_env.txt
    Por ejemplo:
    [root@rc install]# cat s_crsconfig_rc_env.txt 
    ######################################################################### 
    #This file can be used to set values for the NLS_LANG and TZ environment 
    #variables and to set resource limits for Oracle Clusterware and 
    #Database processes. 
    #1. The NLS_LANG environment variable determines the language and 
    #   characterset used for messages. For example, a new value can be 
    #   configured by setting NLS_LANG=JAPANESE_JAPAN.UTF8 
    #2. The Time zone setting can be changed by setting the TZ entry to 
    #   the appropriate time zone name. For example, TZ=America/New_York 
    #3. Resource limits for stack size, open files and number of processes 
    #   can be specified by modifying the appropriate entries. 
    # 
    #Do not modify this file except as documented above or under the 
    #direction of Oracle Support Services. 
    ######################################################################### 
    TZ=America/Los_Angeles 
    NLS_LANG=AMERICAN_AMERICA.AL32UTF8 
    CRS_LIMIT_STACK=2048 
    CRS_LIMIT_OPENFILE=65536 
    CRS_LIMIT_NPROC=65536 
    TNS_ADMIN= 
    [root@rc install]#
  9. Defina la nueva zona horaria con el siguiente comando.
    timedatectl set-timezone <new_time_zone>
    Por ejemplo:
    [root@rc install]# timedatectl set-timezone America/Los_Angeles

    Note:

    • Los pasos del 1 al 9 se deben realizar en todos los nodos de un cluster de RAC.
    • Los pasos del 10 al 15 se pueden realizar en cualquier nodo de un cluster de RAC.
  10. Navegue al siguiente directorio.
    cd $GRID_HOME/bin
    Por ejemplo:
    [root@rc install]# cd /u01/app/21.0.0.0/grid/bin/
  11. Cambie el valor de TZ en el nivel de base de datos a la zona horaria deseada mediante el siguiente comando.
    srvctl setenv database -d <database_name> -t "TZ=<new_time_zone>"
    Por ejemplo:
    [root@rc bin]# ./srvctl setenv database -d SMDB0316_iad1cx -t "TZ=America/Los_Angeles"
  12. Verifique el juego de valores de TZ con el siguiente comando.
    srvctl getenv database -d <database_name>
    Por ejemplo:
    [root@rc bin]# ./srvctl getenv database -d SMDB0316_iad1cx 
    SMDB0316_iad1cx: 
    TZ=America/Los_Angeles
  13. Pare la pila de CRS en todos los nodos informáticos.
    crsctl stop cluster
    Por ejemplo:
    [root@rc bin]# ./crsctl stop cluster 
    CRS-2673: Attempting to stop 'ora.crsd' on 'rc' 
    . 
    . 
    . 
    CRS-2673: Attempting to stop 'ora.cssd' on 'rc' 
    CRS-2677: Stop of 'ora.cssd' on 'rc' succeeded 
    [root@rc bin]#
  14. Inicie la pila de CRS en todos los nodos informáticos.
    crsctl start cluster
    Por ejemplo:
    [root@rc bin]# ./crsctl start cluster 
    CRS-2672: Attempting to start 'ora.cssdmonitor' on 'rc' 
    . 
    . 
    . 
    CRS-2672: Attempting to start 'ora.crsd' on 'rc' 
    CRS-2676: Start of 'ora.crsd' on 'rc' succeeded 
    [root@rcbin]#
  15. Verifique si la zona horaria se ha actualizado mediante el siguiente comando.
    timedatectl
    Por ejemplo:
    [root@rc bin]# timedatectl 
             Local time: Thu 2023-03-16 01:19:15 PDT 
         Universal time: Thu 2023-03-16 08:19:15 UTC 
               RTC time: Thu 2023-03-16 08:19:10 
              Time zone: America/Los_Angeles (PDT, -0700) 
            NTP enabled: yes 
       NTP synchronized: no 
        RTC in local TZ: no 
             DST active: yes 
        Last DST change: DST began at 
                         Sun 2023-03-12 01:59:59 PST 
                         Sun 2023-03-12 03:00:00 PDT 
        Next DST change: DST ends (the clock jumps one hour backwards) at 
                         Sun 2023-11-05 01:59:59 PDT 
                         Sun 2023-11-05 01:00:00 PST

    Observe que el sistema está ahora en la zona horaria America/Los_Angeles (PDT).