Jak připravit SQL Server 2005 a SQL Server 2000 pro změny letního času v 2007

ÚVOD

U. S. kongresu v srpnu 2005 předán energetickému zákonu. Tento akt se změní datum zahájení a datum ukončení letního času (DST). Když tento akt přejde do efekt v 2007, DST začne dříve tři týdny a bude ukončena jeden týden vyšší než při jeho tradičně spuštění a ukončeno. Konkrétně DST začne v 2:00 na druhou neděli v březnu a skončí na 2:00 na první neděle v listopadu.

Následující tabulka shrnuje změny letního času v roce 2007.
Datum, kdy dříve spuštěn DSTDatum počátku letního času v 2007Pokud dříve DST koncové datumDatum konce letního času v 2007
První neděle v dubnuDruhá neděle v březnuPoslední neděle v říjnu
První neděle v listopadu
1. dubna 2007 bylo11. března 200728. října 2007 bylo4. listopadu 2007
Tento článek popisuje, jak připravit Microsoft SQL Server 2005 a Microsoft SQL Server 2000 pro změny letního času v roce 2007.

Další informace

Akce, které je třeba provést

Pokud je SQL Server nainstalován v počítači, který je nakonfigurován pro automatické úpravy letního času a časového pásma počítače sleduje změny letního času v roce 2007, je nutné provést následující akce:
  • Aktualizace pro systém Windows, která je popsána v článku znalostní báze Microsoft Knowledge Base 924840. Další informace získáte klepnutím na následující číslo článku databáze Microsoft Knowledge Base:

    924840 testovací verze 2007 globální časové pásmo aktualizace pro systém Windows je k dispozici

  • Pokud máte SQL Server Notification Services nainstalované v počítači, nainstalujte aktualizaci, která je popsána v článku znalostní báze Microsoft Knowledge Base 931815. Další informace získáte klepnutím na následující číslo článku databáze Microsoft Knowledge Base:

    931815 aktualizace 2007 časové pásmo pro SQL Server 2005 Notification Services a Notification Services serveru SQL Server 2000

  • Nemusíte použít všechny aktualizace specifické pro SQL Server a ujistěte se, že SQL Server funguje správně. Nicméně je nutné aktualizovat operační systém. Navíc je nutné aktualizovat produkty a aplikace, které spolupracují s SQL Server. Tyto produkty a aplikace mohou zahrnovat oznámení služby, služby Windows SharePoint Services, aplikace Microsoft CRM a podobně. Úplný seznam aktualizací, které je třeba použít pro další produkty společnosti Microsoft naleznete na následujícím webu společnosti Microsoft:

Používání času serveru SQL Server a podávání zpráv

V SQL Server 2005 a SQL Server 2000 databázový stroj SQL Server používá následující dvě formy časovač ke generování informací o času:
  • S vysokým rozlišením časovače
  • S nízkým rozlišením časovače
S vysokým rozlišením časovače je rozlišení časovače podle instrukci pro čtení časové razítko čítačů (RDTSC) procesoru. V tiskárnách s nízkým rozlišením časovače rozlišení časovače je založena na funkci GetTickCount v rozhraní API systému Windows společnosti Microsoft.

Různé úlohy na pozadí založené na časovač a kritické systémové součásti jsou založeny na těchto časovačů pro správnou funkci. Vzhledem k tomu, že těchto časovačů pracovat jako relativní opatření od určitého času, vnitřní součásti a vnitřní činnosti nejsou ovlivněna změny letního času v roce 2007.

Například provádět úkoly, které zahrnují následující činnosti založené na časovač nebo timer součásti:
  • Součásti systému například opožděných Zapisovatel, sledování uzamknout a sledování Plánovač
  • Například opuštěné vyčištění a auto shrink úlohy na pozadí
  • Prostředky založené na úvazek odesílací zámky a zámky
  • Naplánované aktivity, jako je například SQL Server Agent úlohy a plány údržby
  • Příkazy systému například příkazu WAITFOR
SQL Server generuje také informace o čase, který je k dispozici externí součásti a aplikace. Tyto informace čas je získán z operačního systému Windows. Informace o čase je tedy přesné, dokud operační systém vrátí hodnotu správný čas.

Například provádět úkoly, které se týkají následující externí součásti a aplikace:
  • SQL Server Profiler nebo SQL Profiler událostí sloupců například sloupec Začátek , Konec sloupce a sloupce trvání pro různé události
  • Informace o čase, uvedená v různých protokolů, například SQL Server Errorlog, protokoly událostí a systémových tabulek
  • Systémové funkce, například funkce GetDate a GetUtcDate funkce
Zvažte následující scénář. Můžete vytvořit trasování SQL Server pomocí SQL Server Profiler nebo SQL Profiler. Trasovací záznamy dotaz, který spustí před časem března 2007 letního času změnit a dokončí po změně času března 2007 letního času. V tomto scénáři informace o čase je přesné a nejsou ovlivněny změny letního času.
Ukázkový výstup trasování je následující:
EventSequence  EventClass         TextData              StartTime                EndTime                  Duration156            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
Podobně je ukázkový výstup trasování, který zaznamenává dotaz při změně času listopad 2007 letního času:
EventSequence  EventClass         TextData              StartTime                EndTime                  Duration178            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

Problémy známé týkající se letního času serveru SQL Server, které nejsou specifické pro změny letního času v 2007

Funkce pro datum a čas funkce DateDiff a DateAdd nejsou DST vědomi

Použijete-li čas výpočty, které jsou založeny na předpokladu systémové datum a čas funkce jazyka Transact-SQL příkazy, musíte pečlivě prozkoumat příkazy. Konkrétně Pokud napsané časy letního času v pevném kódu v aplikační logiku systémové funkce DateDiff a DateAdd nejsou DST vědomi.

Aplikace můžete například spustit následující příkazy vypočítat časový rozdíl. Výpočet vychází z původní čas letního času. Všimněte si, že v rámci nového systému DST v 2007, 2007-03-11 počáteční datum DST. Však pod starý systém DST 2007-04-01 by počáteční datum DST.
DECLARE @starttime datetimeDECLARE @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

Pokud spustíte příkazy, obdržíte následující výsledek:
TimeDiffInSecs -------------- 
3,630

Vzhledem k tomu, že systémové funkce DateDiff není vědomi DST, příkazy vrátit 3,630 sekund místo 30 sekund.

Chcete-li opravit výpočet času v takových situací, funkci GetUtcDate namísto funkce GetDate . Funkce GetUtcDate vrací aktuální čas UTC. Aktuální čas UTC je odvozen z aktuální místní čas a nastavení časového pásma v operačním systému počítače, ve kterém je spuštěn SQL Server.

Změněné příkazy, které fungují správně, jsou následující:
/*-------------------------------------------------------  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
Pokud spustíte příkazy, zobrazí se správný výsledek takto:
TimeDiffInSecs -------------- 
30

Vliv DST koncové datum na plánované úlohy Agent serveru SQL Server

Zvažte následující scénář. Máte naplánované úlohy SQL Server Agent, která vytiskne aktuální místní čas. Tato úloha spouští každých 15 minut. Když v listopadu 2007 dojde ke změně letního času, Agent serveru SQL Server automaticky sleduje změny letního času. Agent serveru SQL databází sledování operačního systému a další naplánované spuštění úlohy aktualizace správně.

Následuje příklad výstupu projektu:
Job 'Daylight Savings Job 1' : Step 1, 'step 1' : Began Executing 2007-03-11 01:30:00CurrentTime    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

V tomto příkladu je hodinovou mezera mezi spuštění úlohy v 2007-03-11 02:00:00 a spouštění úlohy v 2007-03-11 03:00:00 podle očekávání.

Je však známý problém, ve kterém nelze spustit naplánované úlohy Agent serveru SQL Server na jednu hodinu během období, kdy dojde ke změně listopad 2007 letního času. Po změně zpět od 2:00 hodin do 1:00 ráno v 4. listopadu 2007 úlohy Agent serveru SQL Server by přeskočit další hodinu a počkejte, až 2:00 hodin spustit další spuštění. Jedná se o známý problém. I v rámci konvence DST pre 2007 došlo k tomuto problému. Tento problém nemá za následek změn na DST 2007.

Následuje příklad výstupu projektu:
Job 'Daylight Savings Job 1' : Step 1, 'step 1' : Began Executing 2007-11-04 01:30:00CurrentTime    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

Všimněte si, že v ukázce výstupu projektu, je jeden hodina a-15 minut mezera mezi spuštění úlohy v 2007-11-04 01:45:00 a spouštění úlohy v 2007-11-04 02:00:00. Toto chování může ovlivnit úlohy agenta replikace, zálohovací úlohy, úlohy protokolu expedice a jiné naplánované úlohy v systému SQL Server.
Vlastnosti

ID článku: 931975 - Poslední kontrola: 14. 1. 2017 - Revize: 1

Váš názor