Gerenciar Fuso Horário

O campo Fuso Horário na Console e na API permite iniciar recursos do Sistema de Banco de Dados com um fuso horário distinto do UTC (o padrão).

O fuso horário que você especifica ao criar o sistema de banco de dados se aplica ao host e ao Oracle Grid Infrastructure (se o sistema tiver o Grid Infrastructure) e controla o fuso horário dos arquivos de log do banco de dados. O fuso horário do próprio banco de dados não é afetado. No entanto, o fuso horário do banco de dados afeta somente o tipo de dados timestamp. Você pode alterar o fuso horário do banco de dados manualmente, mas a Oracle recomenda que você o mantenha como UTC (o padrão) para evitar a conversão de dados e melhorar o desempenho quando os dados forem transferidos entre bancos de dados. Essa configuração é especialmente importante para bancos de dados distribuídos, replicação e operações de exportação e importação.

Embora o UTC seja o fuso horário recomendado para uso, ter um fuso horário comum para seus clientes de banco de dados e hosts de aplicativos pode simplificar o gerenciamento e o diagnóstico e solução de problemas para o administrador do banco de dados.

Observação: os fusos horários são amplamente usados para fins de exibição ou para manipular a entrada do usuário. A alteração do fuso horário não altera o horário no relógio do sistema.

Opções do Fuso Horário

Quer você use a Console ou a API, as opções do fuso horário que você pode selecionar são representadas no formato de região nomeada, por exemplo, America/Los_Angeles. A Console permite que você selecione UTC, o fuso horário detectado no browser (se seu browser oferecer suporte à detecção de fuso horário) ou um fuso horário alternativo.

Para especificar um fuso horário alternativo (a opção Selecionar outro fuso horário), primeiro selecione um valor no campo Região ou país para restringir a lista de fusos horário para seleção no campo Fuso horário. No exemplo America/Los_Angeles, America é a região de tempo e Los_Angeles é o fuso horário. As opções que você vê nesses dois campos se correlacionam aproximadamente com os fusos horários compatíveis na classe Java.util.TimeZone e no sistema operacional Linux. Se você não vir o fuso horário que está procurando, tente selecionar "Diversos" no campo Região e país.

Dica: Se você estiver usando a API e gostaria de ver uma lista de fusos horários suportados, poderá examinar as opções por fuso horário na Console. Essas opções aparecem na página Criar Sistema de Banco de Dados quando você mostra opções avançadas depois de selecionar uma forma do sistema de banco de dados.

Exibir o Fuso Horário Atual

Execute as etapas a seguir para exibir as informações de fuso horário.

  1. Faça log-on no host como usuário da grade.

    Exemplo:

    [opc@rc ~]$ sudo su - grid
  2. Use o comando a seguir para exibir o fuso horário.

    timedatectl

    Exemplo:

    [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 o sistema está atualmente no fuso horário UTC.

  3. Faça log-on no banco de dados.

    Exemplo:

    [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. Você pode exibir o horário do banco de dados atual usando o comando a seguir.

    sysdate

    Exemplo:

    SQL> select to_char(sysdate,'DD-MON-YYYY HH24:MI:SS') from dual;
    
    TO_CHAR(SYSDATE,'DD-
    --------------------
    16-MAR-2023 08:00:40
  5. Encerrar.

Alterar o Fuso Horário do Sistema de Banco de Dados

Execute as etapas a seguir para definir o fuso horário do Sistema de Banco de Dados.

  1. Faça log-in no host como usuário raiz.

    Exemplo:

    [opc@rc ~]$ sudo su -
  2. Identifique o valor de fuso horário (TZ) correto a ser definido usando o comando a seguir. Por exemplo, se você quiser identificar o valor TZ correto para o fuso horário leste dos EUA (EST/EDT), poderá usar o comando tzselect e escolher Américas/Estados Unidos/Leste.

    tzselect

    Exemplo:

    [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 ~]#

    No comando tzselect, identificamos o valor TZ como America/New_York para o fuso horário EDT.

  3. Atualize o comando a seguir para definir o novo fuso horário.

    timedatectl set-timezone <new_time_zone>

    Exemplo:

    [root@rc ~]# timedatectl set-timezone America/New_York
  4. Verifique se o fuso horário foi atualizado usando o comando a seguir.

    timedatectl

    Exemplo:

    [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 o sistema agora está no fuso horário America/New_York (EDT).

  5. Encerrar.

Alterar o Fuso Horário do Host em Sistemas de Banco de Dados que Usam o Grid Infrastructure

O fuso horário do Oracle Grid Infrastructure determina o fuso horário dos arquivos de log do banco de dados.

Execute as etapas a seguir para atualizar as informações de fuso horário do host dos sistemas de banco de dados que usam o Grid Infrastructure para o gerenciamento de armazenamento.

Observação:

  1. Faça log-on no host como usuário grid.

    Exemplo:

    [opc@rc ~]$ sudo su - grid
  2. Identifique o valor de fuso horário (TZ) correto a ser definido usando o comando a seguir. Por exemplo, para identificar o valor TZ correto para o fuso horário do Pacífico EUA (PST/PDT), você pode usar o comando tzselect e escolher Américas/Estados Unidos/Pacífico.

    tzselect

    Exemplo:

    [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 ~]$

    No comando tzselect, identificamos o valor TZ como America/Los_Angeles para o fuso horário PDT.

  3. Execute o comando a seguir para obter o nome do host.

    hostname

    Exemplo:

    [grid@rc ~]$ hostname
    rc
  4. Execute o comando a seguir para obter o nome do banco de dados.

    srvctl config database -v

    Exemplo:

    [grid@rc ~]$ srvctl config database -v
    SMDB0316_iad1cx    /u01/app/oracle/product/21.0.0.0/dbhome_1    21.0.0.0.0
  5. Faça log-out como usuário da grade e acesse como usuário-raiz.

    Exemplo:

    [grid@rc ~]$ exit
    logout
    [opc@rc ~]$ sudo su -
  6. Navegue até o seguinte diretório.

    cd $GRID_HOME/crs/install

    Exemplo:

    [root@rc ~]# cd /u01/app/21.0.0.0/grid/crs/install/
  7. Edite o conteúdo TZ do arquivo a seguir. Salve e feche o arquivo após editá-lo.

    vim s_crsconfig_<hostname>_env.txt

    Exemplo:

    [root@rc install]# vim s_crsconfig_rc_env.txt
  8. Verifique se a entrada TZ no arquivo foi atualizada.

    cat s_crsconfig_<hostname>_env.txt

    Exemplo:

    [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 o novo fuso horário usando o comando a seguir.

    timedatectl set-timezone <new_time_zone>

    Exemplo:

    [root@rc install]# timedatectl set-timezone America/Los_Angeles

    Observação:

    • As etapas de 1 a 9 devem ser executadas em todos os nós de um cluster RAC.
    • As etapas de 10 a 15 podem ser executadas em qualquer nó de um cluster RAC.
  10. Navegue até o seguinte diretório.

    cd $GRID_HOME/bin

    Exemplo:

    [root@rc install]# cd /u01/app/21.0.0.0/grid/bin/
  11. Altere o valor TZ no nível do banco de dados para o fuso horário desejado usando o comando a seguir.

    srvctl setenv database -d <database_name> -t "TZ=<new_time_zone>"

    Exemplo:

    [root@rc bin]# ./srvctl setenv database -d SMDB0316_iad1cx -t "TZ=America/Los_Angeles"
  12. Verifique o conjunto de valores TZ usando o comando a seguir.

    srvctl getenv database -d <database_name>

    Exemplo:

    [root@rc bin]# ./srvctl getenv database -d SMDB0316_iad1cx
    SMDB0316_iad1cx:
    TZ=America/Los_Angeles
  13. Pare a pilha do CRS em todos os nós de computação.

    crsctl stop cluster

    Exemplo:

    [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 a pilha do CRS em todos os nós de computação.

    crsctl start cluster

    Exemplo:

    [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 se o fuso horário foi atualizado usando o comando a seguir.

    timedatectl

    Exemplo:

    [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 o sistema agora está no fuso horário America/Los_Angeles (PDT).