Ağustos 2005'te, enerji ilkesi işlemi U'ya S. Kongre geçirildi. Bu işlemi, başlangıç tarihi hem de gün ışığından yararlanma saati (DST) bitiş tarihini değiştirir. Bu eylemi 2007'de yürürlüğe gittiğinde, DST üç hafta önce başlar ve daha yeni, Geleneksel olarak başladığında ve sona erdirilmiş bir hafta sonlandırılacak. Özellikle, DST Mart'ın saat 2: 00'te, ikinci Pazar günü başlar ve 2: 00'da bulunan ilk Pazar günü Kasım saat sonlandırılacak.
Aşağıdaki tabloda, 2007 gün ışığından yararlanma saati değişiklikleri özetler.
Bu tabloyu kapaBu tabloyu aç
| DST önceden başladığında tarihi | DST 2007 başlatıldığında tarihi | Ne zaman DST önceden bitiş tarihi | Tarih, DST 2007'de sona erdirir |
|---|
| Nisan ayının ilk Pazar günü saat | Mart'ın ikinci Pazarı saat | Ekim'in son Pazarı saat | Kasım'ın ilk Pazarı saat |
| 1 Nisan 2007 olacaktı | 11 Mart 2007'in açıklaması | 28 Ekim 2007 olacaktı | 4 Kasım 2007'in açıklaması |
Bu makalede, 2007 DST değişiklikleri için Microsoft SQL Server 2005 ve Microsoft SQL Server 2000 hazırlıklı olma anlatılır.
Gerçekleştirmeniz gereken eylemleri
Otomatik DST düzeltmeleri için yapılandırılmış bir bilgisayarda SQL Server yüklü ve bu bilgisayarın saat dilimi değişiklikleri için DST 2007'de aşağıdaki aşağıdaki eylemleri gerçekleştirmeniz gerekir:
- Açıklanan Windows güncelleştirmesi, Microsoft Knowledge Base makalesinde 924840 yükleyin. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
924840
(http://support.microsoft.com/kb/924840/
)
Bir sınama sürümü Windows 2007 genel saat dilimi güncelleştirmesi kullanılabilir
- SQL Server Bildirim Hizmetleri varsa, 931815 Microsoft Knowledge Base makalesinde açıklanan güncelleştirmeyi yükleyin. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
931815
(http://support.microsoft.com/kb/931815/
)
SQL Server 2005 Notification Services ve SQL Server 2000 Notification Services 2007 saat dilimi güncelleştirmesi
- SQL Server, SQL Server düzgün çalıştığından emin olmak belirli güncelleştirmeleri uygulamak zorunda değildir. Ancak, işletim sistemi güncelleştirmelisiniz. Ayrıca, SQL Server ile ürün ve etkileşimli uygulamalar güncelleştirmelisiniz. Bu ürün ve uygulamaları Notification Services, Windows SharePoint Services, Microsoft CRM içerir ve benzeri. Diğer Microsoft ürünleri için uygulamalısınız güncelleştirmeleri tam bir listesi için aşağıdaki Microsoft Web sitesini ziyaret edin:
SQL Server zaman kullanım ve raporlama
SQL Server 2005 ve SQL Server 2000'de, SQL Server veritabanı altyapısı zaman bilgileri oluşturmak için aşağıdaki iki süreölçer biçimleri kullanır:
- Yüksek çözünürlüklü süreölçeri
- Düşük çözünürlüklü süreölçeri
Yüksek çözünürlüklü süre ölçeri Süreölçer çözünürlüğünü okuma zaman damgası sayacı (RDTSC) CPU yönerge dayanır. Düşük çözünürlüklü süre ölçeri Süreölçer çözünürlüğünü Microsoft Windows apı'daki
GetTickCount işlevini temel alır.
Çeşitli süreölçer tabanlı arka plan görevlerini ve önemli sistem bileşenleri doğru çalışması için bu süreölçer yararlanır. Bu süreölçer, belirli bir zamandan göreli ölçüler olarak çalışmak için iç bileşendir ve iç aktiviteleri olarak DST değişiklikleri 2007'de etkilenmeyecektir.
Örneğin, aşağıdaki süreölçer tabanlı aktiviteleri veya süreölçer tabanlı bileşenler görevleri gerçekleştirin:
- Yavaş yazar ve kilit izleyicisi Çizelgeleyici monitör gibi sistem bileşenleri
- Hayalet temizleme ve Otomatik küçülme gibi arka plan görevleri
- Zamanlı out tabanlı kaynak kilitlerini ve kilitler
- Zamanlanmış Aktiviteler gibi SQL Server Agent işler ve bakım planları
- WAITFOR deyimi gibi sistem ifadeleri
SQL Server, harici bileşenler ve uygulamalar için kullanılabilir zaman bilgileri de oluşturur. Bu zaman bilgilerini, Windows işletim sisteminden alınır. Bu nedenle, işletim sisteminin doğru bir zaman değeri döndürür sürece zaman bilgilerini doğru durumundadır.
Örneğin, aşağıdaki dış bileşenleri ve uygulamaları içeren görevleri gerçekleştirin:
- SQL Server Profiler'ı veya SQL Profiler olay sütunları Ba?lang?ç Saati sütunu, Bitiş saati sütunu ve çeşitli olaylar için <a2>süre</a2> sütun
- SQL Server Errorlog, olay günlükleri ve sistem tabloları gibi çeşitli günlüklerdeki bildirdi zaman bilgisi
- Sistem işlevlerinin GetDate işlevi ve GetUtcDate işlevi
Şu senaryoyu inceleyin. SQL Server Profiler'ı veya SQL Profiler kullanarak, bir SQL Server izleme oluşturun. Izleme kayıtları Mart 2007 DST süre önce başlayan bir sorguyu değiştirin ve Mart 2007 DST zaman değişiklikten sonra tamamlanır. Bu senaryoda, zaman bilgileri doğru olduğunu ve DST değişikliklerinden etkilenmez.
Izleme çıkışını örnek aşağıdadır:
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
benzer şekilde, sorguda Kasým 2007 DST saat değişikliği sırasında kaydeden bir izleme çıkışını örnek aşağıdadır:
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
DST ile ilgili bilinen SQL Server 2007'de belirli DST değişiklikleri için olan sorunları
Tarih ve saat işlevleri DateDiff ve DateAdd DST farkında değildir.
Sistem tarafından sağlanan bir tarih ve saat fonksiyonlarının göre saat hesaplamaları gerçekleştirmek için Transact-SQL deyimlerini kullanırken, ifadeleri dikkatle inceleyin gerekir. DST zamanları, uygulama mantığı, sabit kod yazdınız, özellikle
DateDiff ve
DateAdd sistem işlevlerinin DST farkında değildir.
Örneğin, bir uygulamayı zaman farkını hesaplamak için aşağıdaki ifadeleri çalışır. Hesaplama, eski DST saatini temel alır. Yeni DST Sistem altında 2007'de, DST başlangıç tarihini 2007-03-11 olduğuna dikkat edin. Ancak, eski DST sisteminde 2007-04-01 DST başlangıç tarihi olacaktır.
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
Ifadeleri çalıştırdığınızda, aşağıdaki sonucu alırsınız:
TimeDiffInSecs
--------------
3,630
DateDiff sistem işlevi, DST farkında değildir için ifadeleri 3,630 saniye 30 saniye yerine geri dönün.
Zaman hesaplama gibi senaryolarda düzeltmek için <a0></a0>,
GetDate işlevi yerine
GetUtcDate işlevini kullanın.
GetUtcDate işlevi geçerli UTC saati döndürür. Geçerli yerel saat ile birlikte SQL Server'ın çalıştığı bilgisayarın işletim sisteminde saat dilimi ayarını geçerli UTC zamanını türetilir.
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
DST bitiş tarihi zamanlanmış bir SQL Server Agent işleri üzerindeki etkisi
Şu senaryoyu inceleyin. Geçerli yerel saat yazdıran zamanlanmış bir SQL Server Agent iş var. Iş, 15 dakikada bir çalışır. DST değişikliği Kasým 2007'de ortaya çıktığında, SQL Server Agent, DST değişikliği otomatik olarak izler. SQL Server Agent işletim sisteminde, izleme ayarlar ve sonraki zamanlanan çalışma işin doğru biçimde güncelleştirilir.
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.
Ancak, bir saat Kasým 2007 DST değişikliği oluştuğunda bir dönem için zamanlanmış bir SQL Server Agent işleri çalıştırılamıyor bilinen bir sorun var. Saat, 1: 00'da bulunan 4 Kasım 2007 için geri 2: 00'da değiştirildikten sonra SQL Server Agent işleri sonraki saat atlayın ve saat 2: 00'sonraki başlatmak için DE çalıştırıncaya kadar bekleyin. Bu bilinen bir sorundur. Bu sorun, hatta öncesi 2007 DST kuralları altında oluştu. Bu sorun değişiklikleri 2007 DST için yol açmaz.
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. Bu davranış, çoğaltma aracısının işler, yedekleme işlerini, günlük sevkiyat işler ve diğer zamanlanmış işleri SQL Server'da etkileyebilir.