Lin Hong's TECH Blog! 刀不磨要生锈,人不学习要落后 - Thinking ahead

[DB2 LUW] うるう秒が DB2 に与える影響

2016-12-01
DB2

うるう秒が挿入されると、コンピューターのシステム時刻が協定世界時 (UTC) より 1 秒進んだ状態になります。 進んだシステム時刻を現地時刻に再調整するときに、システム時刻が 1 秒戻されることになりますが、DB2 への考慮点はありますか?


質問

うるう秒が挿入されると、コンピューターのシステム時刻が協定世界時 (UTC) より 1 秒進んだ状態になります。 進んだシステム時刻を現地時刻に再調整するときに、システム時刻が 1 秒戻されることになりますが、DB2 への考慮点はありますか?

回答

協定世界時 (UTC) は原子時計をもとに決定されていますが、地球の自転に基づく世界時とずれが生じます。 このずれが 0.9 秒以上にならないよう、うるう秒の挿入が実施されることがあります。 次回のうるう秒挿入は、日本時間で 2017 年 1 月 1 日 午前 9 時に実施されます。 (8:59:59 秒の次に 8:59:60 秒が挿入されます。)

うるう秒が挿入されると、稼動しているコンピューターのシステム時刻は、協定世界時や現地時刻より 1 秒進んだ状態になります。 現地時刻と一致させるため、NTP などでシステム時刻を 1 秒戻す場合、DB2 には以下の影響があります。

a) Point-in-Time (PIT) を指定したロールフォワードで、戻した 1 秒を指定できない

DB2 のログは、トランザクションのタイムスタンプだけでなく、ログ順序番号 (LSN) で管理されているため、ロールフォワード自体は問題なく実行できます。 しかし、戻した 1 秒の間を指定した厳密な PIT のロールフォワードは実行できません。

b) モニター時刻がシステム時刻とずれる

DB2 のシステム・モニター機能 (イベント・モニターやスナップショット・モニターなど) は経過時間を正確に把握するため、インスタンス起動時に取得したシステム時刻と、起動時からの積算時間で時刻を管理しています。 このため、インスタンスの起動中にシステム時刻を変更すると、システム時刻とモニターが報告する時刻にずれが生じます。 たとえば、以下のような SQL は通常ほぼ同じ時刻を返しますが、システム時刻に従う CURRENT TIMESTAMP と、モニター時刻に従う SNAPSHOT_TIMESTAMP が約 1 秒ずれます。

select CURRENT_TIMESTAMP CURRENT_TIMESTAMP, SNAPSHOT_TIMESTAMP from table(SNAP_GET_DB(‘SAMPLE’, NULL)) as t

CURRENT_TIMESTAMP SNAPSHOT_TIMESTAMP ————————– ————————– 2017-01-01-10.00.04.588980 2017-01-01-10.00.05.588787

このずれはインスタンスの停止で解消できます。

c) HADR の通信が切れることがある

高可用性災害時リカバリー (HADR) が稼動しているときに、1 秒に満たない時間でもシステム時刻が戻されると HADR の通信が切れることがあります。

この問題は以下の APAR として報告されており、V9.7 FP4、V9.5 FP8、V9.1 FP10 以降で修正されています。

IC72330/IC72329/IC68989 HADR may disconnect with ‘HADR_TIMEOUT’ message after system clock is set backwards.

運用上の考慮点

  • NTP 使用上の考慮点

NTP を slew モードで運用している場合、システム時刻が戻ることはありません。slew モードが上記の各現象に与える影響は以下の通りです。(slew モードでも微細な時刻戻りを伴う NTP システムでは、以下の記述は当てはまらないことがあります。)

a) Point-in-Time を指定したロールフォワードで、戻した 1 秒を指定できない 時刻の戻りが発生しないため、PIT で指定できない時間はなくなります。

b) モニター時刻がシステム時刻とずれる 最大 1 秒、少しずつシステム時刻とモニター時刻がずれるようになります。

c) HADR の通信が切れることがある システム時刻が戻ることはないため、通信が切れる問題は発生しません。

  • Linux の tzdata 使用上の考慮点

Linux の tzdata パッケージをインストールし、NTP を利用せずにうるう秒対応の TZ でうるう秒を調整する場合、localtime サブルーチンや date コマンドはうるう秒 (2017-01-01-08:59:60 秒) を挿入します。 DB2 はこのような時刻を想定していないため、タイムスタンプ列にこの時刻を挿入しようとすると SQL0181N で失敗します。また、DB2 の current timestamp 特殊レジスターは GMT を利用して時刻を返すため、システムのタイムゾーンにかかわらず、2016-12-31-23:59:59 の次に 23:59:60 を返します。このため、right/Asia/Tokyo タイムゾーンを設定したシステムにおいて、うるう秒挿入日の 0 時から 9 時まで、current stamp は localtime より1秒遅れた時刻を返します。


下一篇 Togaf

Comments