Em agosto de 2005, o Congresso u. S. passado o Energy Policy Act. Esse ato altera a data de início e a data final do horário de verão (DST). Quando esse ato entra em vigor em 2007, DST começarão três semanas anteriormente e terminará uma semana posterior quando ele tradicionalmente iniciado e finalizada. Especificamente, DST começará às 2: 00 no segundo domingo de março e terminará às 2: 00 no primeiro domingo de novembro.
A tabela a seguir resume as alterações para o horário de verão em 2007.
Recolher esta tabelaExpandir esta tabela
| Data quando o DST anteriormente iniciado | Data quando o DST é iniciado em 2007 | Data quando o DST anteriormente concluído | Data quando o DST termina em 2007 |
|---|
| Primeiro domingo de abril | Segundo domingo de março | Último domingo de outubro | Primeiro domingo de novembro |
| Teria sido 1 º de abril de 2007 | 11 De março de 2007 | Teria sido 28 de outubro de 2007 | 4 De novembro de 2007 |
Este artigo descreve como preparar o Microsoft SQL Server 2005 e Microsoft SQL Server 2000 para que as alterações à hora de verão em 2007.
Ações que você deve executar
Se você tiver o SQL Server instalado em um computador que está configurado para ajustes automáticos do DST e o fuso horário do computador após as alterações à hora de verão no 2007, será necessário executar as seguintes ações:
- Instale a atualização do Windows que é descrita no artigo da Base de dados de Conhecimento da Microsoft 924840. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
924840
(http://support.microsoft.com/kb/924840/
)
Uma versão de teste da atualização de fuso horário globais 2007 para o Windows está disponível
- Se você tiver o SQL Server Notification Services instalado no computador, instale a atualização descrita 931815 de artigo da Base de dados de Conhecimento da Microsoft. Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
931815
(http://support.microsoft.com/kb/931815/
)
atualização de fuso horário de 2007 para o SQL Server 2005 Notification Services e SQL Server 2000 Notification Services
- Não é necessário aplicar quaisquer atualizações específicas para o SQL Server certificar-se que SQL Server funciona corretamente. No entanto, você deve atualizar o sistema operacional. Além disso, você deve atualizar os produtos e aplicativos que interagem com o SQL Server. Esses produtos e aplicativos podem incluir Notification Services, Windows SharePoint Services, Microsoft CRM, etc. Para obter uma lista completa de atualizações que você deve aplicar para outros produtos Microsoft, visite o seguinte site:
Utilização de tempo do SQL Server e relatórios
No SQL Server 2005 e no SQL Server 2000, o mecanismo de banco de dados do SQL Server usa as seguintes duas formas de timer para gerar informações tempo:
- Timer de alta resolução
- Timer de baixa resolução
No timer de alta resolução, a resolução de timer é baseada em instrução a delta entre ler carimbo de hora contador (RDTSC) da CPU. No timer de baixa resolução, a resolução de timer é baseada na função
ObterContagemMarcaEscala na API do Microsoft Windows.
Várias tarefas baseada no cronômetro em segundo plano e componentes críticos do sistema dependem desses temporizadores para seu funcionamento correto. Como desses temporizadores funcionam como medidas relativas de uma data específica, componentes internos e atividades internas não serão afetadas pelas alterações à hora de verão em 2007.
Por exemplo, você pode executar tarefas que envolvem o seguintes atividades baseadas no timer ou componentes baseados no timer:
- Componentes de sistema, como gravador lento, monitor de bloqueio e Agendador monitor
- Tarefas de plano de fundo, como limpeza de fantasma e redução automática
- Recursos baseados em saída de tempo, como bloqueios e registradores de divisão
- Atividades agendadas como trabalhos do SQL Server Agent e planos de manutenção
- Instruções de sistema, como a instrução WAITFOR
O SQL Server também gera informações de tempo que são disponibilizadas para aplicativos e componentes externos. Essas informações de tempo são recuperadas do sistema operacional Windows. Portanto, as informações de tempo são precisas, desde que o sistema operacional retorna o valor tempo correto.
Por exemplo, você pode executar tarefas que envolvem os seguintes componentes externos e aplicativos:
- SQL Server Profiler ou SQL Profiler colunas de eventos, como a coluna de Hora de início , a coluna de Hora de término e a coluna duração para vários eventos
- Informações de tempo que são relatadas em vários logs, como o Errorlog do SQL Server, os logs de eventos e tabelas do sistema
- Funções de sistema, como a função GetDate e a função GetUtcDate
Considere o seguinte cenário. Você criar um rastreamento do SQL Server usando o SQL Server Profiler ou SQL Profiler. Os registros de rastreamento de uma consulta que inicia antes do tempo março de 2007 DST alterar e termina após a alteração de tempo de março de 2007 DST. Nesse cenário, as informações de tempo são precisas e não são afetadas pelas alterações de horário de verão.
A seguir está a saída de exemplo do rastreamento:
EventSequence EventClass TextData StartTime EndTime Duration
156 Sql:StmtStarting Select * From Table1 2007-03-11 01:59:57.187
157 Sql:StmtCompleted Select * From Table1 2007-03-11 01:59:57.187 2007-03-11 03:00:07.187 9987
da mesma forma, a seguir é a saída de exemplo de um rastreamento registra uma consulta durante a alteração de tempo de novembro de 2007 DST:
EventSequence EventClass TextData StartTime EndTime Duration
178 Sql:StmtStarting Select * From Table1 2007-11-04 01:59:54.967
179 Sql:StmtCompleted Select * From Table1 2007-11-04 01:59:54.967 2007-11-04 01:00:05.030 10055
Problemas conhecidos relacionados ao DST SQL Server que não são específicas para as alterações à hora de verão de 2007
Funções de data e hora DateDiff e DateAdd não são ciente do DST
Quando você usa instruções Transact-SQL para executar cálculos de tempo que são baseados em funções fornecido pelo sistema de data e hora, você deve investigar cuidadosamente as instruções. Especificamente, se você tiver gravado DST vezes no código do disco rígido na lógica do aplicativo, as funções de sistema
DateDiff e
DateAdd não são DST ciente.
Por exemplo, um aplicativo executa as instruções a seguir para calcular a diferença de tempo. O cálculo é baseado na hora DST antiga. Observe que, em novo sistema de hora de verão em 2007, 2007-03-11 é a data inicial do DST. No entanto, em sistema de DST antigo, 2007-04-01 seria a data inicial do DST.
DECLARE @starttime datetime
DECLARE @endtime datetime
SELECT @starttime = GetDate() -- returns '2007-03-11 1:59:50.000'
WAITFOR DELAY '00:00:30'
SELECT @endtime = GetDate() ?- returns '2007-03-11 3:00:20.000'
If @starttime < '2007-04-01 3:00:00.000' And
@endtime > '2007-04-01 1:59:59.000'
SELECT (cast((DATEDIFF(s, @starttime, @endtime)) as int) - 3600) AS TimeDiffInSecs
Else
SELECT cast((DATEDIFF(s, @starttime, @endtime)) as int) AS TimeDiffInSecs
Go
ao executar as instruções, você recebe o seguinte resultado:
TimeDiffInSecs
--------------
3,630
como a função
DateDiff do sistema não está ciente do DST, as instruções retornam 3,630 segundos em vez de 30 segundos.
Para corrigir o cálculo de tempo em tais situações, use a função
GetUtcDate em vez da função
GetDate . A função
GetUtcDate retorna a hora UTC atual. A hora UTC atual deriva a hora local atual com a configuração de fuso horário no sistema operacional do computador no qual o SQL Server está sendo executado.
The following are modified statements that work correctly:
/*-------------------------------------------------------
GetDate() GetUtcDate()
datetime 2007-03-11 1:59:50.000 2007-03-11 09:59:50.000
datetime 2007-03-11 3:00:20.000 2007-03-11 10:00:20.000
-------------------------------------------------------*/
DECLARE @starttime datetime
DECLARE @endtime datetime
SELECT @starttime = GetUtcDate() -- returns '2007-03-11 9:59:50.000'
WAITFOR DELAY '00:00:30'
SELECT @endtime = GetUtcDate() ?- returns '2007-03-11 10:00:20.000'
SELECT DATEDIFF (s, @starttime, @endtime) AS TimeDiffInSecs
Go
When you run the statements, you receive the correct result as follows:
TimeDiffInSecs
--------------
30
Efeito da data de término DST em trabalhos agendados do SQL Server Agent
Considere o seguinte cenário. Você tem um trabalho agendado do SQL Server Agent que imprima hora local atual. O trabalho será executado a cada 15 minutos. Quando a alteração DST ocorre em novembro de 2007, o SQL Server Agent controla automaticamente a alteração DST. SQL Server Agent baseia seu controle no sistema operacional e a próxima execução agendada do trabalho é atualizada corretamente.
The following is the sample output of the job:
Job 'Daylight Savings Job 1' : Step 1, 'step 1' : Began Executing 2007-03-11 01:30:00
CurrentTime 2007-03-11 01:30:00.343
Job 'Daylight Savings Job 1' : Step 1, 'step 1' : Began Executing 2007-03-11 01:45:00
CurrentTime 2007-03-11 01:45:00.343
Job 'Daylight Savings Job 1' : Step 1, 'step 1' : Began Executing 2007-03-11 03:00:00
CurrentTime 2007-03-11 03:00:00.357
Job 'Daylight Savings Job 1' : Step 1, 'step 1' : Began Executing 2007-03-11 03:15:00
CurrentTime 2007-03-11 03:15:00.357
In this example, there is a one-hour gap between the run of the job at 2007-03-11 02:00:00 and the run of the job at 2007-03-11 03:00:00 as expected.
No entanto, há um problema conhecido no qual os trabalhos agendados do SQL Server Agent não é possível executar para uma hora durante o período quando ocorre a alteração de novembro de 2007 DST. Depois que o relógio é alterado de 2: 00 para 1: 00 em 4 de novembro de 2007, trabalhos do SQL Server Agent poderiam ignorar a próxima hora e espere até 2: 00 para iniciar a próxima execução. Esse é um problema conhecido. Esse problema ocorreu mesmo sob as convenções de DST pré-2007. Esse problema não resulta das alterações à hora de verão em 2007.
The following is the sample output of the job:
Job 'Daylight Savings Job 1' : Step 1, 'step 1' : Began Executing 2007-11-04 01:30:00
CurrentTime 2007-11-04 01:30:00.343
Job 'Daylight Savings Job 1' : Step 1, 'step 1' : Began Executing 2007-11-04 01:45:00
CurrentTime 2007-11-04 01:45:00.343
one hour plus 15 minutes gap here */
Job 'Daylight Savings Job 1' : Step 1, 'step 1' : Began Executing 2007-11-04 02:00:00
CurrentTime 2007-11-04 02:00:00.357
Job 'Daylight Savings Job 1' : Step 1, 'step 1' : Began Executing 2007-11-04 02:15:00
CurrentTime 2007-11-04 02:15:00.357
Notice that in the sample output of the job, there is a one-hour-and-15-minute gap between the run of the job at 2007-11-04 01:45:00 and the run of the job at 2007-11-04 02:00:00. Esse comportamento pode afetar os trabalhos de agente de replicação, os trabalhos de backup, trabalhos de envio de log e outros trabalhos agendados no SQL Server.