Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

4 maneiras de alterar o fuso horário no Oracle


No Oracle Database, os fusos horários podem ser definidos em vários locais. Abaixo estão quatro maneiras de alterar o fuso horário ao usar o Oracle.

Definir o fuso horário do banco de dados


Você pode definir o fuso horário do banco de dados ao criar o banco de dados. Para fazer isso, use o SET TIME_ZONE cláusula do CREATE DATABASE demonstração.

Exemplo:
CREATE DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';

Nesse caso, usei um nome de região de fuso horário. Consulte Como retornar uma lista de fusos horários válidos no banco de dados Oracle para obter uma lista completa de nomes de regiões válidos em seu sistema.

Como alternativa, você pode usar um deslocamento de fuso horário real:
CREATE DATABASE mySampleDb
...
SET TIME_ZONE='+10:00';

Se você não definir explicitamente o fuso horário ao criar o banco de dados, o padrão será o fuso horário do sistema operacional do servidor.

Você também pode alterar a configuração de fuso horário atual para o banco de dados. Para fazer isso, use o ALTER DATABASE demonstração.

Exemplo:
ALTER DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';

Observe que o fuso horário do banco de dados é relevante apenas para TIMESTAMP WITH LOCAL TIME ZONE colunas. Além disso, a Oracle recomenda que você defina o fuso horário do banco de dados como UTC (0:00) para evitar a conversão de dados e melhorar o desempenho quando os dados são transferidos entre bancos de dados.

Definir o fuso horário da sessão


Você pode definir o fuso horário da sessão independentemente do fuso horário do banco de dados. Quando você retorna TIMESTAMP WITH LOCAL TIME ZONE data, ele é retornado no fuso horário da sessão atual.

O fuso horário da sessão também entra em vigor quando um TIMESTAMP o valor é convertido para o TIMESTAMP WITH TIME ZONE ou TIMESTAMP WITH LOCAL TIME ZONE tipo de dados.

Você pode fazer algumas coisas para definir o fuso horário no nível da sessão.

Tele ORA_SDTZ Variável de ambiente


Você pode definir o fuso horário da sessão com o ORA_SDTZ variável de ambiente. Isso pode ser definido para os seguintes valores:
  • Fuso horário local do sistema operacional ('OS_TZ' )
  • Fuso horário do banco de dados ('DB_TZ' )
  • Deslocamento absoluto do UTC (por exemplo,'-04:00' )
  • Nome da região do fuso horário (por exemplo, 'America/St_Kitts' )

Aqui estão alguns exemplos de configuração dessa variável de ambiente em um ambiente UNIX:
% setenv ORA_SDTZ 'OS_TZ'
% setenv ORA_SDTZ 'DB_TZ'
% setenv ORA_SDTZ 'America/St_Kitts'
% setenv ORA_SDTZ '-04:00'

O valor padrão do ORA_SDTZ variável é 'OD_TZ' . Este valor é usado quando a variável não está definida ou está definida com um valor inválido.

A ALTER SESSION Declaração


Você pode alterar o fuso horário de uma sessão SQL específica com o SET TIME_ZONE cláusula do ALTER SESSION demonstração.

TIME_ZONE pode ser definido para os seguintes valores:
  • Fuso horário local padrão quando a sessão foi iniciada (local )
  • Fuso horário do banco de dados (dbtimezone )
  • Deslocamento absoluto do UTC (por exemplo, '-04:00' )
  • Nome da região do fuso horário (por exemplo, 'Canada/Eastern' )

Aqui está um exemplo de configuração de TIME_ZONE a tais valores:
ALTER SESSION SET TIME_ZONE=local;
ALTER SESSION SET TIME_ZONE=dbtimezone;
ALTER SESSION SET TIME_ZONE='Canada/Eastern';
ALTER SESSION SET TIME_ZONE='-04:00';

Você pode verificar o fuso horário da sua sessão atual com o SESSIONTIMEZONE função.

Exemplo:
SELECT SESSIONTIMEZONE FROM DUAL;

Resultado:
Australia/Brisbane 

No meu caso, o fuso horário da sessão está definido como Austrália/Brisbane.

O AT TIME ZONE Cláusula


Uma expressão de data e hora pode incluir um AT LOCAL cláusula ou um AT TIME ZONE cláusula. Se você incluir um AT LOCAL cláusula, o resultado será retornado no fuso horário da sessão atual. Se você incluir o AT TIME ZONE cláusula, o fuso horário pode ser um dos seguintes:
  • Um deslocamento de fuso horário
  • Um nome de região de fuso horário
  • DBTIMEZONE (esta função retorna o fuso horário do banco de dados)
  • SESSIONTIMEZONE (esta função retorna o fuso horário da sessão atual)
  • Uma expressão que retorna uma string de caracteres com um formato de fuso horário válido.

Exemplo:
SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') 
    AT TIME ZONE '+12:00'
FROM DUAL;

Resultado:
02/JAN/30 04:30:35.000000000 AM +12:00

Neste caso eu usei o FROM_TZ() função para converter um valor de timestamp e um fuso horário em um TIMESTAMP WITH TIME ZONE valor. Eu então usei o AT TIME ZONE cláusula para especificar um fuso horário diferente.

Aqui está o mesmo exemplo, exceto que desta vez eu especifico AT LOCAL :
SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') 
    AT LOCAL
FROM DUAL;

Resultado:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE