Olá, pessoal! Estava eu dando uma espionada no tópico de parâmetros do banco de dados na documentação da Oracle e encontrei algo muito interessante e nem tanto difundido entre os profissionais da área. O parâmetro FIXED_DATE é utilizado para “congelar” o tempo do sysdate. Isso mesmo: congelar! Podemos definir um valor constante para o sysdate, utilizando qualquer data. Pode ser um período anterior ou futuro, algo muito útil para efetuar testes.
Vejamos como funciona.
Exemplos
Exibição da data atual, antes da modificação do parametro:
SQL> select to_char(sysdate,'dd/mm/rrrr hh24:mi:ss') as "Data Sysdate", to_char(systimestamp,'dd/mm/rrrr hh24:mi:ss') as "Data Systimestamp" from dual; Data Sysdate Data Systimestamp ------------------- ------------------- 22/09/2013 14:24:02 22/09/2013 14:24:02 Comando para congelar a data: alter system set fixed_date= '2013-08-21 01:00:00';
Exibição da data congelada, após a modificação do parametro:
SQL> select to_char(sysdate,'dd/mm/rrrr hh24:mi:ss') as "Data Sysdate", to_char(systimestamp,'dd/mm/rrrr hh24:mi:ss') as "Data Systimestamp" from dual; Data Sysdate Data Systimestamp ------------------- ------------------- 21/08/2013 01:00:00 22/09/2013 14:24:30 Comando para voltar o sysdate para o seu comportamento normal: alter system set fixed_date=none;
Exibição da data atual normalmente:
SQL> select to_char(sysdate,'dd/mm/rrrr hh24:mi:ss') as "Data Sysdate", to_char(systimestamp,'dd/mm/rrrr hh24:mi:ss') as "Data Systimestamp" from dual; Data Sysdate Data Systimestamp ------------------- ------------------- 22/09/2013 14:25:09 22/09/2013 14:25:09
O escopo do parâmetro é de nível de sistema, ou seja, quando efetuada a alteração, todo o ambiente será afetado. Veja que o systimestamp não é afetado por este parâmetro.
Conclusão
É realmente muito interessante o funcionamento desse parâmetro, que pode ser muito útil para realização de testes. Mas seu uso indiscriminado em um ambiente de produção, por exemplo, pode causar muitos problemas; portanto, tome muito cuidado ao alterar o parâmetro!