Atualização automática do arquivo de fuso horário do Oracle - Amazon Relational Database Service

Atualização automática do arquivo de fuso horário do Oracle

Com a opção TIMEZONE_FILE_AUTOUPGRADE, é possível atualizar o arquivo de fuso horário atual para a versão mais recente na instância de banco de dados do RDS para Oracle.

Visão geral dos arquivos de fuso horário da Oracle

Um arquivo de fuso horário do Oracle Database armazena as seguintes informações:

  • Distância em relação ao Tempo Universal Coordenado (UTC)

  • Horários de transição para horário de verão (DST)

  • Abreviações para horário padrão e DST

O Oracle Database fornece várias versões de arquivos de fuso horário. Ao criar um banco de dados Oracle em um ambiente local, você escolhe a versão do arquivo de fuso horário. Para ter mais informações, consulte Choosing a Time Zone File (Escolher um arquivo de fuso horário) no Oracle Database Globalization Support Guide (Guia de suporte à globalização de bancos de dados da Oracle).

Se as regras mudarem para DST, a Oracle publicará novos arquivos de fuso horário. A Oracle lança esses novos arquivos de fuso horário independentemente do cronograma de atualizações de versão (RUs) e revisões de atualização de versões (RURs) trimestrais. Os arquivos de fuso horário residem no host do banco de dados no diretório $ORACLE_HOME/oracore/zoneinfo/. Os nomes de arquivo de fuso horário usam o formato DStvversão, como em DSTv35.

Como o arquivo de fuso horário afeta a transferência de dados

No Oracle Database, o tipo de dados TIMESTAMP WITH TIME ZONE armazena carimbo de data/hora e dados de fuso horário. Dados com o tipo de dados TIMESTAMP WITH TIME ZONE usam as regras na versão do arquivo de fuso horário associado. Assim, os dados TIMESTAMP WITH TIME ZONE existentes são afetados ao atualizar o arquivo de fuso horário.

Podem ocorrer problemas quando você transfere dados entre bancos de dados que usam versões diferentes do arquivo de fuso horário. Por exemplo, se você importar dados de um banco de dados de origem com uma versão de arquivo de fuso horário mais recente do que o do banco de dados de destino, o banco de dados emitirá o erro ORA-39405. Anteriormente, era necessário contornar esse erro usando uma das seguintes técnicas:

  • Crie uma instância de banco de dados do RDS para Oracle com o arquivo de fuso horário desejado, exporte dados do banco de dados de origem e importe-os para o novo banco de dados.

  • Use o AWS DMS ou replicação lógica para migrar seus dados.

Atualizações automáticas usando a opção TIMEZONE_FILE_AUTOUPGRADE

Quando o grupo de opções anexado à instância de banco de dados do RDS para Oracle inclui a opção TIMEZONE_FILE_AUTOUPGRADE, o RDS atualiza os arquivos de fuso horário automaticamente. Ao garantir que os bancos de dados Oracle usem a mesma versão de arquivo de fuso horário, você evita técnicas manuais demoradas ao mover dados entre ambientes diferentes. A opção TIMEZONE_FILE_AUTOUPGRADE é compatível com bancos de dados de contêiner (CDBs) e não CDBs.

Ao adicionar a opção TIMEZONE_FILE_AUTOUPGRADE ao seu grupo de opções, você pode escolher se deseja adicionar a opção imediatamente ou durante a janela de manutenção. Depois que a instância de banco de dados usa a nova opção, o RDS confere se pode instalar um arquivo DSTvversion mais recente. A versão de destino do DSTv depende do seguinte:

  • A versão de mecanismo secundária que sua instância de banco de dados está em execução atualmente

  • A versão secundária do mecanismo para a qual você deseja atualizar sua instância de banco de dados

Por exemplo, suponhamos que a versão atual do arquivo de fuso horário seja DSTv33. Ao aplicar a atualização ao grupo de opções, o RDS poderá determinar se DSTv34 está disponível atualmente no sistema de arquivos da instância de banco de dados. O RDS então atualizará o arquivo de fuso horário para DSTv34 automaticamente.

Para encontrar as versões de DST disponíveis nas atualizações da versão compatível do RDS, confira os patches em Notas de versão do Amazon Relational Database Service (Amazon RDS) para Oracle. Por exemplo, a versão 19.0.0.0.ru-2022-10.rur-2022-10.r1 lista o patch 34533061: RDBMS – DSTV39 UPDATE – TZDATA2022C.

Estratégias para atualizar seu arquivo de fuso horário

Atualizar o mecanismo de banco de dados e adicionar a opção TIMEZONE_FILE_AUTOUPGRADE a um grupo de opções são operações separadas. Adicionar a opção TIMEZONE_FILE_AUTOUPGRADE iniciará a atualização do arquivo de fuso horário se um mais recente estiver disponível. É necessário executar os seguintes comandos (somente as opções relevantes são mostradas) imediatamente ou na próxima janela de manutenção:

  • Atualize o mecanismo de banco de dados usando somente o seguinte comando da CLI do RDS:

    modify-db-instance --engine-version name ...
  • Adicione a opção TIMEZONE_FILE_AUTOUPGRADE somente usando o seguinte comando da CLI:

    add-option-to-option-group --option-group-name name --options OptionName=TIMEZONE_FILE_AUTOUPGRADE ...
  • Atualize o mecanismo de banco de dados e adicione um novo grupo de opções à instância usando o seguinte comando da CLI:

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

A estratégia de atualização depende de atualizar o banco de dados e arquivo de fuso horário juntos ou realizar apenas uma dessas operações. Lembre-se de que, se você atualizar o grupo de opções e, depois, atualizar o mecanismo de banco de dados em operações de API separadas, é possível que uma atualização do arquivo de fuso horário esteja em andamento ao atualizar o mecanismo de banco de dados.

Para os exemplos nesta seção, suponha o seguinte:

  • Você ainda não adicionou TIMEZONE_FILE_AUTOUPGRADE ao grupo de opções atualmente associado à instância de banco de dados.

  • Sua instância de banco de dados usa a versão de banco de dados 19.0.0.0.ru-2019-07.rur-2019-07.r1 e o arquivo de fuso horário DSTv33.

  • O sistema de arquivos da sua instância de banco de dados inclui o arquivo DStv34.

  • A atualização de versão 19.0.0.0.ru-2022-10.rur-2022-10.r1 inclui DSTv35.

Para atualizar o arquivo de fuso horário, você pode usar as seguintes estratégias.

Atualizar o arquivo de fuso horário sem atualizar o mecanismo

Nesse cenário, seu banco de dados está usando o DSTv33, mas o DSTv34 está disponível no sistema de arquivos de sua instância de banco de dados. Você deseja atualizar o arquivo de fuso horário usado por sua instância de banco de dados de DSTv33 para DSTv34, mas não deseja atualizar seu mecanismo para uma nova versão secundária, que inclua DSTv35.

Em um comando add-option-to-option-group, adicione TIMEZONE_FILE_AUTOUPGRADE ao grupo de opções usado pela instância de banco de dados. Especifique se deseja adicionar a opção imediatamente ou adiá-la para a janela de manutenção. Depois de aplicar a opção TIMEZONE_FILE_AUTOUPGRADE, o RDS faz o seguinte:

  1. Confere se há uma nova versão do DST.

  2. Determina se o DSTv34 está disponível no sistema de arquivos.

  3. Atualiza o arquivo de fuso horário imediatamente.

Atualizar o arquivo de fuso horário e a versão do mecanismo de banco de dados

Nesse cenário, seu banco de dados está usando o DSTv33, mas o DSTv34 está disponível no sistema de arquivos de sua instância de banco de dados. Você deseja atualizar seu mecanismo de banco de dados para a versão secundária 19.0.0.0.ru-2022-10.rur-2022-10.r1, que inclui DSTv35 e atualizar o arquivo de fuso horário para DSTv35 durante a atualização do mecanismo. Portanto, seu objetivo é ignorar o DSTv34 e atualizar os arquivos de fuso horário diretamente para DSTv35.

Para atualizar o mecanismo e o arquivo de fuso horário juntos, execute modify-db-instance com as opções --option-group-name e --engine-version. É possível executar o comando imediatamente ou adiá-lo para a janela de manutenção. In --option-group-name, especifique um grupo de opções que inclua a opção TIMEZONE_FILE_AUTOUPGRADE. Por exemplo:

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

O RDS começa a atualizar o mecanismo para 19.0.0.0.ru-2022-10.rur-2022-10.r1. Depois que a opção TIMEZONE_FILE_AUTOUPGRADE é aplicada, o RDS confere se há uma nova versão do DST, percebe que o DSTv35 está disponível em 19.0.0.0.ru-2022-10.rur-2022-10.r1 e inicia imediatamente a atualização para DSTv35.

Para atualizar o mecanismo imediatamente e, depois, atualizar o arquivo de fuso horário, execute as operações na sequência:

  1. Atualize o mecanismo de banco de dados usando o seguinte comando da CLI:

    aws rds modify-db-instance \ --db-instance-identifier my-instance \ --engine-version new-version \ --apply-immediately
  2. Adicione a opção TIMEZONE_FILE_AUTOUPGRADE ao grupo de opções anexado à instância usando o seguinte comando da CLI:

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

Atualizar a versão do mecanismo de banco de dados sem atualizar o arquivo de fuso horário

Nesse cenário, seu banco de dados está usando o DSTv33, mas o DSTv34 está disponível no sistema de arquivos de sua instância de banco de dados. Você deseja atualizar seu mecanismo de banco de dados para a versão 19.0.0.0.ru-2022-10.rur-2022-10.r1, que inclui o DSTv35, mas reter o arquivo de fuso horário DSTv33. Você pode fazer isso pelas seguintes razões:

  • Seus dados não usam o tipo de dados TIMESTAMP WITH TIME ZONE.

  • Seus dados usam o tipo de dados TIMESTAMP WITH TIME ZONE, mas eles não são afetados pelas alterações de fuso horário.

  • Você deseja adiar a atualização do arquivo de fuso horário porque não pode tolerar o tempo de inatividade extra.

Sua estratégia depende de qual das seguintes possibilidades é verdadeira:

  • Sua instância de banco de dados não está associada a um grupo de opções que inclui TIMEZONE_FILE_AUTOUPGRADE. No comando modify-db-instance, não especifique um novo grupo de opções para que o RDS não atualize o arquivo de fuso horário.

  • A instância de banco de dados está atualmente associada a um grupo de opções que inclui TIMEZONE_FILE_AUTOUPGRADE. Em m um único comando modify-db-instance, associe a instância de banco de dados a um grupo de opções que não inclua TIMEZONE_FILE_AUTOUPGRADE e, depois, atualize o mecanismo de banco de dados para 19.0.0.0.ru-2022-10.rur-2022-10.r1.

Tempo de inatividade durante a atualização do arquivo de fuso horário

Quando o RDS atualiza o arquivo de fuso horário, os dados existentes que utilizam TIMESTAMP WITH TIME ZONE podem mudar. Nesse caso, sua consideração principal é o tempo de inatividade.

Atenção

Se você adicionar a opção TIMEZONE_FILE_AUTOUPGRADE, a atualização do mecanismo poderá exigir um tempo de inatividade prolongado. A atualização de dados de fuso horário para um banco de dados grande pode levar horas ou até dias.

A duração da atualização do arquivo de fuso horário depende de fatores como os seguintes:

  • A quantidade de dados TIMESTAMP WITH TIME ZONE em seu banco de dados

  • A configuração da instância de banco de dados

  • Classe da instância de banco de dados

  • A configuração do armazenamento

  • A configuração do banco de dados:

  • As configurações de parâmetros do banco de dados

Um período de inatividade adicional pode ocorrer quando você:

  • Adiciona a opção ao grupo de opções quando a instância de banco de dados usa um arquivo de fuso horário desatualizado

  • Atualiza o mecanismo de banco de dados Oracle quando a nova versão do mecanismo contém uma nova versão do arquivo de fuso horário

nota

Durante a atualização do arquivo de fuso horário, o RDS for Oracle chama PURGE DBA_RECYCLEBIN.

Preparação para atualizar o arquivo de fuso horário

Uma atualização de arquivo de fuso horário tem duas fases separadas: preparar e atualizar. Embora não seja necessário, recomendamos enfaticamente que você execute a etapa de preparação. Nessa etapa, você descobre quais dados serão afetados pela execução do procedimento DBMS_DST.FIND_AFFECTED_TABLES de PL/SQL. Para ter mais informações sobre a janela de preparação, consulte Upgrading the Time Zone File and Timestamp with Time Zone Data (Atualização do arquivo de fuso horário e o carimbo de data/hora com os dados de fuso horário) na documentação do Oracle Database.

Para preparar a atualização do arquivo de fuso horário
  1. Conecte ao banco de dados Oracle usando um cliente SQL.

  2. Determine a versão atual do arquivo de fuso horário usada.

    SELECT * FROM V$TIMEZONE_FILE;
  3. Determine a versão mais recente do arquivo de fuso horário disponível na instância de banco de dados Essa etapa só é aplicável se você usa o Oracle Database 12c Versão 2 (12.2) ou superior.

    SELECT DBMS_DST.GET_LATEST_TIMEZONE_VERSION FROM DUAL;
  4. Determine o tamanho total das tabelas que têm colunas do tipo TIMESTAMP WITH LOCAL TIME ZONE ou 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 os nomes e tamanhos dos segmentos que têm colunas do tipo TIMESTAMP WITH LOCAL TIME ZONE ou 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. Execute a etapa de preparação.

    • O procedimento DBMS_DST.CREATE_AFFECTED_TABLE cria uma tabela para armazenar quaisquer dados afetados. Passe o nome desta tabela ao procedimento DBMS_DST.FIND_AFFECTED_TABLES. Para ter mais informações, consulte CREATE_AFFECTED_TABLE Procedure (Procedimento CREATE_AFECTED_TABLE) na documentação do Oracle Database.

    • O procedimento CREATE_ERROR_TABLE cria uma tabela para registrar erros. Para ter mais informações, consulte CREATE_ERROR_TABLE Procedure (Procedimento ERROR_TABLE) na documentação do Oracle Database.

    O exemplo a seguir cria os dados afetados e as tabelas de erro e localiza todas as tabelas de afetados.

    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 as tabelas de afetados e de erro.

    SELECT * FROM my_affected_table; SELECT * FROM my_error_table;

Adição da opção de atualização automática do arquivo de fuso horário

Quando você adiciona a opção a um grupo de opções, o grupo de opções está em um dos seguintes estados:

  • Um grupo de opções existente está atualmente anexado a pelo menos uma instância de banco de dados. Quando você adiciona a opção, todas as instâncias de banco de dados que usam esse grupo de opções são reiniciadas automaticamente. Isso causa uma breve interrupção.

  • Um grupo de opções existente não está anexado a nenhuma instância de banco de dados. Você planeja adicionar a opção, depois associar o grupo de opções existente às instâncias de banco de dados existentes ou a uma nova instância de banco de dados.

  • Você cria um grupo de opções e adiciona a opção. Você planeja adicionar o novo grupo de opções às instâncias de banco de dados existentes ou a uma nova instância de banco de dados.

Console

Para adicionar a opção de atualização automática do arquivo de fuso horário a uma instância de banco de dados
  1. Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  2. No painel de navegação, escolha Option groups (Grupos de opções).

  3. Determine o grupo de opções que você deseja usar. Você pode criar um novo grupo de opções ou usar um existente. Se você quiser usar um grupo de opções existente, vá para a próxima etapa. Caso contrário, crie um grupo de opções de banco de dados personalizado com as seguintes configurações:

    1. Em Engine (Mecanismo), escolha a edição do Oracle Database para sua instância de banco de dados.

    2. Para Major engine version (Versão do mecanismo principal), escolha a versão da sua instância de banco de dados.

    Para ter mais informações, consulte Criar um grupo de opções.

  4. Selecione o grupo de opções que você deseja modificar e escolha Add Option (Adicionar opção).

  5. Na janela Add option (Adicionar opção), faça o seguinte:

    1. Escolha TIMEZONE_FILE_AUTOUPGRADE.

    2. Para habilitar a opção em todas as instâncias de banco de dados associadas assim que você a adicionar, em Apply Immediately (Aplicar imediatamente), escolha Yes (Sim). Se você escolher No (Não) (o padrão), a opção será habilitada para cada instância de banco de dados associada durante sua próxima janela de manutenção.

  6. Quando estiver satisfeito com as configurações, escolha Add Option (Adicionar opção).

AWS CLI

O exemplo a seguir usa o comando da AWS CLI add-option-to-option-group para adicionar a opção TIMEZONE_FILE_AUTOUPGRADE a um grupo de opções chamado myoptiongroup.

Para Linux, macOS ou Unix:

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

Para Windows:

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

Verificação dos dados após a atualização do arquivo de fuso horário

Recomendamos verificar seus dados após atualizar o arquivo de fuso horário. Durante a etapa de preparação, o RDS for Oracle cria automaticamente as seguintes tabelas:

  • rdsadmin.rds_dst_affected_tables: lista as tabelas que contêm dados afetados pela atualização

  • rdsadmin.rds_dst_error_table: lista os erros gerados durante a atualização

Essas tabelas são independentes de todas as tabelas criadas na janela de preparação. Para ver os resultados da atualização, consulte as tabelas conforme mostrado a seguir.

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

Para ter mais informações sobre o esquema das tabelas de dados afetados e de erros, consulte FIND_AFFECTED_TABLES Procedure (Processo FIND_AFECTED_TABLES) na documentação do Oracle.