2007 年の夏時間から標準時への変更を SQL Server 2005 と SQL Server 2000 を準備する方法

はじめに

2005 年 8 月では、米国連邦議会には、エネルギー政策法が渡されます。この動作は、開始日と夏時間 (DST) の終了日の両方を変更します。この法律は、2007 年に有効になると DST 開始が 3 週間前は従来から起動したときよりも後と終了の 1 週間を終了します。具体的には、DST は 3 月の第 2 日曜日午前 2時 00分に開始され、11 月の第 1 日曜日午前 2時 00分になります。

次の表は、2007 年の夏時間から標準時への変更をまとめたものです。
DST が以前に開始した日付2007 年の DST の開始日DST が以前に終了した日付2007 年の DST 終了日
4 月の第 1 日曜日3 月の第 2 日曜日10 月の最終日曜日
11 月の第 1 日曜日
あった 2007 年 4 月 1 日2007 年 3 月 11 日あった 2007 年 10 月 28 日2007 年 11 月 4 日
この資料では、2007 年の DST の変更を Microsoft SQL Server 2005 と Microsoft SQL Server 2000 を準備する方法について説明します。

詳細

操作を行う必要があります。

夏時間の調整を自動的に構成されているコンピューターにインストールされている SQL Server がある場合は、2007 年の dst 変更に依存、コンピューターのタイム ゾーンは、次の操作を実行する必要があります。
  • マイクロソフト サポート技術情報資料 924840 に記載されている Windows 用の更新プログラムをインストールします。の詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします:

    924840 2007 年グローバル タイム ゾーンのテスト バージョンの Windows の更新が利用可能です

  • SQL Server Notification Services がコンピューターにインストールされている場合は、マイクロソフト サポート技術情報の資料 931815 に記載されている更新プログラムをインストールします。の詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします:

    931815を SQL Server 2005 の Notification Services と SQL Server 2000 Notification Services の 2007 年タイム ゾーン更新します。

  • SQL Server が正常に動作するかどうかを確認するのには SQL Server の特定の更新プログラムを適用する必要はありません。ただし、オペレーティング システムを更新する必要があります。さらに、SQL Server の製品と対話するアプリケーションを更新する必要があります。Notification Services、Windows SharePoint Services、Microsoft CRM ではなど、これらの製品やアプリケーションが含まれます。他のマイクロソフト製品に適用する必要のある更新プログラムの一覧については、次のマイクロソフト Web サイトを参照してください。

SQL Server の時刻が使用され、レポート作成

SQL Server 2005 および SQL Server 2000 では、SQL Server データベース エンジンは、時間の情報を生成するのにタイマーの次の 2 つのフォームを使用します。
  • 高分解能タイマー
  • 低分解能タイマー
高分解能のタイマーでは、タイマーの解像度は CPU の読み取りタイム スタンプ カウンター (RDTSC) 命令に基づいています。低解像度のタイマーでは、タイマーの分解能はGetTickCount関数では、Microsoft Windows API に基づいています。

さまざまなタイマー ベースのバック グラウンド タスクや重要なシステム コンポーネントが正しく機能するため、これらのタイマーに依存しています。これらのタイマーは、特定の時刻からの相対的な時間と作業をするため内部コンポーネントや内部操作は受けない DST 変更によって 2007 年に。

たとえば、次のタイマー ベースの操作またはタイマー ベースのコンポーネントに関連する作業を行います。
  • レイジー ライター、ロック モニターでは、スケジューラ モニターなどのシステム コンポーネント
  • ゴースト クリーンアップや自動圧縮などのバック グラウンド タスク
  • 回タイムアウト ベースのリソースのロックやラッチなど
  • SQL Server エージェント ジョブやメンテナンス プランなどのアクティビティ
  • WAITFORステートメントなどのシステムの明細書
SQL Server には、外部コンポーネントおよびアプリケーションに使用可能になる時刻情報も生成されます。この時刻情報は、Windows オペレーティング システムから取得されます。したがって、時刻情報は、オペレーティング システムが正しい時刻の値を返す限り、正確です。

たとえば、次の外部コンポーネントおよびアプリケーションに関連する作業を行います。
  • [開始時刻] 列、終了時刻] 列で、さまざまなイベントの [期間]列など、SQL Server プロファイラーまたは SQL プロファイラーのイベント列
  • SQL Server エラー ログ、イベント ログ、システム テーブルなどのさまざまなログで報告される時間について
  • GetDate関数と、 GetUtcDate関数などのシステム関数
以下の事例で説明します。SQL Server トレースを作成するには、SQL Server プロファイラーまたは SQL プロファイラーを使用します。トレース レコード 2007 年 3 月の DST 時刻の前に開始するためのクエリが変更し、2007 年 3 月の DST 時刻の変更後に終了します。このシナリオでは、時刻情報は正確で、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 年 11 月の 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

2007 年の DST の変更を特定されている DST に関連する SQL Server の既知の問題します。

Datediff 関数と dateadd 関数の日付と時刻の関数は、DST に対応していません。

Transact SQL ステートメントを使用して、システムで指定された日付と時刻関数に基づく時間の計算を実行すると、ステートメントを入念に調査する必要があります。具体的には、アプリケーションのロジックにハード コードで dst を記述した場合、 DateDiff関数とdateadd 関数システム関数は DST に対応しています。

たとえば、アプリケーションは、時間の差を計算する次のステートメントを実行します。計算は、従来の DST 時刻に基づいています。2007 年の新しい DST システム [2007-03-11 は、DST の開始日に注意してください。ただし、以前の DST システムでは、[2007-04-01 でしょう 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

ステートメントを実行すると、次の結果が表示されます。
TimeDiffInSecs -------------- 
3,630

DateDiffシステム関数は DST に対応してではないため、ステートメントは、30 秒ではなく 3,630 秒を返します。

このような状況で時間の計算を修正するには、 GetDate関数ではなく、 GetUtcDate関数を使用します。 GetUtcDate関数は、現在の UTC 時刻を返します。現在の UTC 時刻は、SQL Server を実行しているコンピューターのオペレーティング システムのタイム ゾーンの設定と現在のローカル時刻から派生します。

正常に機能に修正したステートメントは、次のように。
/*-------------------------------------------------------  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 エージェント ジョブでの DST 終了日の影響

以下の事例で説明します。現在のローカル時刻を印刷するスケジュールされた SQL Server エージェント ジョブがあります。ジョブでは、15 分ごとを実行します。2007 年 11 月の DST の変更が発生すると、SQL Server エージェントは、DST の変更を自動的に追跡します。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

この例では 1 時間の差 2007-03-11 で、ジョブの実行の間 02時 00分: 00 と 2007-03-11 で、ジョブの実行期待どおりの 03時 00分: 00 です。

ただし、2007 年 11 月の DST 変更が発生した場合の期間中に 1 時間でスケジュールされた SQL Server エージェント ジョブを実行できません、既知の問題があります。時計が午前 2時 00分から 2007 年 11 月 4 日の午前 1時 00分まで変更された後 SQL Server エージェント ジョブを次の時間をスキップし、次に午前 2 時を実行するまで待機します。これは、既知の問題です。前 2007 年の DST 規則の下であっても、この問題が発生しました。この問題に至らなかった変更から dst 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

ジョブの出力の例では 1 時間-と-15 分間隔 2007-11-04 で、ジョブの実行の間に注意してください 1時 45分: 00 とジョブの実行を 2007-11 - 04 02時 00分: 00 です。この現象は、レプリケーション エージェント ジョブ、バックアップ ジョブ、ログ配布ジョブ、および SQL Server のその他のスケジュールされたジョブに影響します。
プロパティ

文書番号:931975 - 最終更新日: 2017/02/02 - リビジョン: 2

フィードバック