Em Agosto de 2005, o Congresso S. r. passado o Energy Policy Act. Este acto altera tanto a data de início e a data de fim da hora de Verão (DST). Quando este acto entra em vigor em 2007, hora de Verão começará três semanas anteriores e terminará uma semana posterior quando tradicionalmente iniciado e terminada. Especificamente, a hora de Verão começará às 2: 00 A.M. do segundo domingo de Março e termina às 2: 00 do primeiro domingo de Novembro.
A tabela seguinte resume as alterações à hora de Verão de 2007.
Reduzir esta tabelaExpandir esta tabela
| Data hora de Verão previamente iniciada | Data hora de Verão é iniciado em 2007 | Data de quando anteriormente fim da hora de Verão | Data quando termina a hora de Verão de 2007 |
|---|
| Primeiro domingo de Abril | Segundo domingo de Março | Último Domingo de Outubro | Primeiro domingo de Novembro |
| Deverá ter sido 1 de Abril de 2007 | 11 De Março de 2007 | Deverá ter sido 28 de Outubro de 2007 | 4 De Novembro de 2007 |
Este artigo explica como preparar o Microsoft SQL Server 2005 e o Microsoft SQL Server 2000 para as alterações à hora de Verão de 2007.
Acções que tem de tomar
Se tiver o SQL Server instalado num computador que está configurado para ajustes automáticos de hora de Verão e o fuso horário do computador segue as alterações à hora de Verão de 2007, tem de tomar as seguintes acções:
- Instale a actualização para o Windows é descrito no artigo de base de dados de conhecimento da Microsoft 924840. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
924840
(http://support.microsoft.com/kb/924840/
)
Está disponível uma versão de teste da actualização de fuso horário globais 2007 para Windows
- Se tiver o SQL Server Notification Services instalado no computador, instale a actualização descrita artigo da base de dados de conhecimento 931815. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
931815
(http://support.microsoft.com/kb/931815/
)
actualização de fuso horário de 2007 para o SQL Server 2005 Notification Services e para o SQL Server 2000 Notification Services
- Não é necessário aplicar todas as actualizações específicas de SQL Server para se certificar de que o SQL Server funciona correctamente. No entanto, terá de actualizar o sistema operativo. Além disso, terá de actualizar os produtos e aplicações que interagem com o SQL Server. Estes produtos e aplicações poderão incluir Notification Services, Windows SharePoint Services, Microsoft CRM e assim sucessivamente. Para obter uma lista completa de actualizações que tem de aplicar para outros produtos da Microsoft, visite o seguinte Web site da Microsoft:
Utilização de tempo do SQL Server e relatórios
No SQL Server 2005 e no SQL Server 2000, o motor de base de dados do SQL Server utiliza as seguintes duas formas de temporizador para gerar informações de hora:
- Temporizador de alta resolução
- Temporizador de baixa resolução
No temporizador de alta resolução, a resolução do temporizador baseia-se a instrução RDTSC (leitura-carimbo contador) da CPU. No temporizador de baixa resolução, a resolução do temporizador baseia-se a função
ObterContagemMarcaEscala da API do Microsoft Windows.
Várias tarefas com o temporizador em segundo plano e componentes críticos do sistema dependem estes temporizadores para o respectivo funcionamento correcto. Uma vez que estes temporizadores funcionarem como medidas relativas a partir de uma hora específica, componentes internos e actividades internas não serão afectadas pelas alterações à hora de Verão de 2007.
Por exemplo, efectuar tarefas que envolvam seguintes actividades com o temporizador de temporizador baseadas em componentes:
- Componentes de sistema, tais como escritor lento, bloqueio monitor e programador monitor
- Tarefas em segundo plano, tais como limpeza fantasma e redução automática
- Baseado em time-out os recursos como bloqueios e latches
- Actividades agendadas, tais como tarefas do SQL Server Agent e planos de manutenção
- Instruções de sistema tais como a instrução WAITFOR
SQL Server também gera informações de hora que são disponibilizadas para componentes externos e aplicações. Estas informações de hora são obtidas o sistema operativo Windows. Por este motivo, as informações de hora estão correctas, desde que o sistema operativo devolve o valor hora correcta.
Por exemplo, efectuar tarefas que envolvem os seguintes componentes externos e aplicações:
- SQL Server Profiler ou SQL Profiler colunas de eventos como a coluna Hora de início , a coluna Hora de fim e a coluna duração para vários eventos
- Informações de hora que são comunicadas nos vários registos como o SQL Server Errorlog, registos de eventos e tabelas de sistema
- Funções de sistema, tais como a função GetDate e a função GetUtcDate
Considere o seguinte cenário. Criar um rastreio de SQL Server utilizando o SQL Server Profiler ou SQL Profiler. Os registos de rastreio uma consulta que é iniciado antes da hora de Março de 2007 relativas à hora de Verão altere e termina após a alteração de hora de Março de 2007 relativas à hora de Verão. Neste cenário, as informações de hora são precisas e não são afectadas pelas alterações relativas à hora de Verão.
Segue-se exemplo de resultado do rastreio:
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
do mesmo modo, segue-se a saída de exemplo de um registo que regista uma consulta durante a alteração de hora de Novembro de 2007 relativas à hora de Verão:
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 com a hora de Verão SQL Server que não são específicas para as alterações da hora de Verão de 2007
Funções de data e hora DifData e SomData deixam de hora de Verão em atenção
Quando utiliza instruções de Transact-SQL para efectuar cálculos de tempo que se baseiam em data fornecidos pelo sistema e funções de tempo, tem de investigar cuidadosamente as instruções. Especificamente, se tiver escrito horas da hora de Verão no disco rígido código in a lógica da aplicação, as funções de sistema
DifData e
SomData não são hora de Verão em consideração.
Por exemplo, uma aplicação executa as seguintes instruções para calcular a diferença de tempo. O cálculo baseia-se a hora da hora de Verão antiga. Repare que em novo sistema de hora de Verão de 2007, 2007-03-11 é a data inicial da hora de Verão. No entanto, no sistema de hora de Verão antigo 2007-04-01 seria a inicial data da hora de Verão.
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
quando executa as instruções, receberá o seguinte resultado:
TimeDiffInSecs
--------------
3,630
uma vez que a função de sistema
DifData não é hora de Verão em atenção, as instruções devolvem 3,630 segundos em vez de 30 segundos.
Para corrigir o cálculo de tempo em tais situações, utilize a função
GetUtcDate em vez da função
GetDate . A função
GetUtcDate devolve a hora UTC actual. A hora UTC actual é derivada da hora local actual em conjunto com a definição de fuso horário no sistema operativo do computador no qual está com o SQL Server.
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 fim da hora de Verão em tarefas agendadas do SQL Server Agent
Considere o seguinte cenário. Tem uma tarefa SQL Server Agent agendada, que imprime horário local actual. A tarefa é executado a cada 15 minutos. Quando a alteração da hora de Verão ocorre em Novembro de 2007, o SQL Server Agent regista automaticamente a alteração da hora de Verão. Agente do SQL Server baseia o controlo no sistema operativo e actualiza correctamente a próxima execução agendada da tarefa.
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, existe um problema conhecido na qual não é possível executar tarefas agendadas do SQL Server Agent para uma hora durante o período a alteração de Novembro de 2007 relativas à hora de Verão ocorre. Depois do relógio é alterado de 2: 00 para 01: 00 em 4 de Novembro de 2007, trabalhos do SQL Server Agent seriam saltar a próxima hora e aguarde até 2: 00 para iniciar a próxima execução. Trata-se um problema conhecido. Este problema ocorreu mesmo sob as convenções relativas à hora de Verão de pré-2007. Este problema não resulta das alterações à hora de Verão de 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. Este comportamento pode afectar as tarefas de agente de replicação, as tarefas de cópia de segurança, tarefas de envio do registo e outras tarefas agendadas no SQL Server.