كيفية إعداد SQL Server 2005 و SQL Server 2000 لتغييرات التوقيت الصيفي في 2007

مقدمة

في آب/أغسطس 2005، أصدر الكونغرس الأمريكي قانون سياسة الطاقة. تغيير هذا القانون كل من تاريخ بدء وتاريخ انتهاء التوقيت الصيفي (DST). عندما يذهب هذا القانون حيز التنفيذ في عام 2007، سيبدأ قبل ثلاثة أسابيع التوقيت الصيفي وسينتهي أسبوع واحد لاحقاً عندما تقليديا بدأت وانتهت. على وجه الخصوص، DST سيبدأ في الساعة الثانية صباحا يوم الأحد الثاني في آذار/مارس وتنتهي في 2:00 ص في أول يوم أحد في تشرين الثاني/نوفمبر.

يلخص الجدول التالي التغييرات إلى التوقيت الصيفي في 2007.
عند بدء التوقيت الصيفي قبل التاريختاريخ بدء التوقيت الصيفي في 2007عند انتهاء التوقيت الصيفي قبل التاريختاريخ انتهاء التوقيت الصيفي في 2007
يوم الأحد الأول من شهر أبريليوم الأحد الثاني في آذار/مارسيوم الأحد الماضي في تشرين الأول/أكتوبر
أول يوم أحد في تشرين الثاني/نوفمبر
كان في 1 نيسان/أبريل 200711 آذار/مارس 2007كان 28 تشرين الأول/أكتوبر 20074 تشرين الثاني/نوفمبر 2007
تتناول هذه المقالة كيفية إعداد Microsoft SQL Server 2000 و Microsoft SQL Server 2005 للتوقيت الصيفي في 2007.

مزيد من المعلومات

الإجراءات التي يجب اتخاذها

إذا كان لديك SQL Server مثبتاً على جهاز كمبيوتر الذي تم تكوينه للتعديلات DST التلقائي، والمنطقة الزمنية للكمبيوتر تتبع التغييرات إلى التوقيت الصيفي في عام 2007، يجب اتخاذ الإجراءات التالية:
  • تثبيت التحديث ل Windows الموضح في مقالة "قاعدة معارف Microsoft" 924840. للحصول على مزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

    يتوفر تحديث نسخة تجريبية من 2007 المنطقة الزمنية العمومية ل Windows 924840

  • إذا كان لديك خدمات الإعلام SQL Server مثبتاً على جهاز الكمبيوتر، تثبيت التحديث الموضح في مقالة "قاعدة معارف Microsoft" 931815. للحصول على مزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

    931815 تحديث المنطقة الزمنية 2007 لخدمات الإعلام الخاصة ب SQL Server 2005 وخدمات الإعلام الخاصة ب SQL Server 2000

  • ليس لديك لتطبيق أية تحديثات معينة لخادم SQL للتأكد من أن SQL Server يعمل بشكل صحيح. ومع ذلك، يجب عليك تحديث نظام التشغيل. بالإضافة إلى ذلك، يجب عليك تحديث المنتجات والتطبيقات التي تتفاعل مع SQL Server. قد تتضمن هذه المنتجات وتطبيقات خدمات إعلام Windows SharePoint Services، Microsoft CRM، وهكذا. للحصول على قائمة كاملة من التحديثات التي يجب تطبيقها لمنتجات Microsoft الأخرى، قم بزيارة موقع Microsoft التالي على الويب:

استخدام الوقت SQL Server والإبلاغ

في SQL Server 2005 وفي SQL Server 2000، يستخدم مشغل قاعدة بيانات SQL Server التالية نموذجان لجهاز ضبط الوقت لإنشاء معلومات الوقت:
  • جهاز ضبط الوقت عالية الدقة
  • جهاز ضبط الوقت ذات الدقة المنخفضة
في جهاز ضبط الوقت عالية الدقة، دقة مؤقت يستند إلى تعليمات عداد طابع الوقت القراءة (RDTSC) من وحدة المعالجة المركزية. في جهاز ضبط الوقت ذات الدقة المنخفضة، دقة مؤقت يستند إلى الدالة GetTickCount في Microsoft Windows API.

مهام في الخلفية على أساس مؤقت ومكونات النظام الهامة المختلفة تعتمد على وحدات توقيت هذه لأعمالها على نحو صحيح. أن توقيت هذه تعمل كالمقاييس النسبية في وقت محدد، المكونات الداخلية والأنشطة الداخلية لن تتأثر بالتغييرات إلى التوقيت الصيفي في 2007.

على سبيل المثال، يمكنك تنفيذ المهام التي تشمل الأنشطة التالية على أساس مؤقت أو المكونات المستندة إلى جهاز ضبط الوقت:
  • مكونات النظام مثل الكتابة وتأمين مراقبة جهاز عرض مجدول
  • مهام في الخلفية مثل تنظيف الخفية وتقليص تلقائي
  • الموارد القائمة على المخرجات مرة مثل التأمين والمزاليج
  • الأنشطة المقررة مثل مهام عميل SQL Server وخطط الصيانة
  • بيانات النظام مثل بيان WAITFOR
SQL Server بإنشاء معلومات الوقت التي تم توفيرها للتطبيقات ومكونات خارجية أيضا. يتم استرداد هذه المعلومات في وقت من نظام التشغيل Windows. لذلك، معلومات الوقت دقة ما دام نظام التشغيل بإرجاع قيمة الوقت الصحيح.

على سبيل المثال، يمكنك تنفيذ المهام التي تتضمن المكونات التالية الخارجية والتطبيقات:
  • أعمدة الحدث منشئ ملفات التعريف ل SQL Server أو منشئ ملفات التعريف SQL مثل العمود وقت البدء و وقت الانتهاء العمود العمود المدة لمختلف الأحداث
  • معلومات الوقت التي يتم عرضها في سجلات متعددة مثل SQL Server Errorlog وسجﻻت الأحداث وجداول النظام
  • دالات النظام مثل الدالة GetDate والداله GetUtcDate
اطلع على السيناريو التالي. إنشاء عملية تتبع SQL Server باستخدام منشئ ملفات التعريف ل SQL Server أو SQL منشئ ملفات التعريف. سجلات التتبع تغيير استعلام الذي يبدأ قبل التوقيت الصيفي في آذار/مارس 2007 وتنتهي بعد تغيير وقت مارس 2007 DST. في هذا السيناريو، معلومات وقت دقيق ولا يتأثر بتغييرات التوقيت الصيفي.
المثال التالي هو إخراج العينة للتتبع:
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
وبالمثل، التالي هو إخراج العينة لتتبع يسجل استعلام أثناء تغيير الوقت نوفمبر 2007 DST:
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

إصدار ملقم SQL المعروفة المتعلقة بالتوقيت الصيفي ليست مخصصة للتغييرات إلى التوقيت الصيفي في 2007

DateDiff و DateAdd دالات التاريخ والوقت ليست على علم بالتوقيت الصيفي

عند استخدام عبارات SQL للعمليات لإجراء عمليات حسابية الوقت استناداً إلى دالات الوقت والتاريخ المتوفرة من قبل النظام، يجب أن تحقق بعناية العبارات. وبوجه خاص، إذا تمت كتابة مرات التوقيت الصيفي في التعليمات البرمجية الثابت في منطق التطبيق، وظائف النظام DateDiff و DateAdd غير التوقيت الصيفي على علم.

على سبيل المثال، تشغيل تطبيق العبارات التالية لحساب فرق التوقيت. يستند الحساب وقت DST القديم. لاحظ أن ضمن النظام الجديد للتوقيت الصيفي في 2007، 2007-03-11 هو تاريخ بدء التوقيت الصيفي. ومع ذلك، ضمن نظام التوقيت الصيفي القديم، 2007/04/01 سيكون تاريخ بدء التوقيت الصيفي.
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

عندما تقوم بتشغيل العبارات، تظهر النتيجة التالية:
TimeDiffInSecs -------------- 
3,630

لأن دالة DateDiff النظام ليست على علم بالتوقيت الصيفي، العبارات العودة ثانية 3630 بدلاً من 30 ثانية.

لتصحيح حساب الوقت في مثل هذه الحالات، استخدم الدالة GetUtcDate بدلاً من الدالة GetDate . ترجع الدالة GetUtcDate وقت UTC الحالي. يتم اشتقاق وقت UTC الحالي من التوقيت المحلي الحالي مع إعداد المنطقة الزمنية في نظام تشغيل من جهاز الكمبيوتر الذي يتم تشغيل ملقم SQL.

فيما يلي بعض العبارات المعدلة التي تعمل بشكل صحيح:
/*-------------------------------------------------------  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
عندما تقوم بتشغيل العبارات، تظهر النتيجة الصحيحة كما يلي:
TimeDiffInSecs -------------- 
30

تأثير تاريخ انتهاء التوقيت الصيفي على مهام عميل SQL Server المجدولة

اطلع على السيناريو التالي. لديك مهمة مجدولة عميل SQL Server الذي يطبع التوقيت المحلي الحالي. تعمل المهمة كل 15 دقيقة. عند حدوث تغيير التوقيت الصيفي في تشرين الثاني/نوفمبر 2007، تعقب عميل SQL Server تلقائياً تغيير التوقيت الصيفي. عميل SQL Server قواعد التعقب الخاص به في نظام التشغيل وتحديث التشغيل المجدول التالي لهذه المهمة بشكل صحيح.

المثال التالي هو إخراج العينة للوظيفة:
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

في هذا المثال، هناك فجوة ساعة واحدة بين تشغيل المهمة في 2007/03/11 02:00:00 وتشغيل المهمة في 2007/03/11 03:00:00 كما هو متوقع.

ومع ذلك، هناك مشكلة معروفة حيث لا يمكن تشغيل مهام مجدولة عميل SQL Server لمدة ساعة واحدة أثناء فترة عند حدوث تغيير نوفمبر 2007 التوقيت الصيفي. بعد تغيير الساعة مرة أخرى من الساعة الثانية صباحا إلى الساعة الواحدة صباحا في 4 تشرين الثاني/نوفمبر 2007، قد تخطي ساعة التالية مهام عميل SQL Server والانتظار حتى الساعة الثانية صباحا التالي بدء تشغيل. هذا مشكلة معروفة. حدثت هذه المشكلة حتى في ظل الاتفاقيات التوقيت الصيفي قبل 2007. هذه المشكلة ليس ناجماً عن التغييرات إلى التوقيت الصيفي في 2007.

المثال التالي هو إخراج العينة للوظيفة:
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

لاحظ أن في عينة الإخراج لمهمة، هناك فجوة الساعة-و-15-دقيقة واحدة بين تشغيل المهمة في 2007/11/04، 01:45:00 وتشغيل المهمة في 2007/11/04 02:00:00. قد يؤثر هذا السلوك على مهام عامل النسخ المتماثل لمهام النسخ الاحتياطي، سجل الشحن وظائف ومهام مجدولة في SQL Server.
خصائص

رقم الموضوع: 931975 - آخر مراجعة: 14‏/01‏/2017 - المراجعة: 1

تعليقات