这段时间在邮件列表中讨论最多的一个话题就是 DST(Daylight Saving Time)。这个 DST 我们以前称之为”夏令时”,不过英文的叫法似乎更直接(日光节省时、节能时),更能引起人们重视–节约能源。
啥是 DST?
美国加拿大实行 DST 的时间是 3 月的第二个星期天早晨两点开始到 11 月的第一个星期日的早晨两点。三月第二个个星期日早晨两点所有时钟向前回拨一个小时,到 11 月 DST 截止再拨回来。我查了一下,以前似乎不是强制的,这和现任总统小布什签署的 Energy Policy Act of 2005 法案有关。而 2007 年是改方案实行的第一年。
很明显,对于计算机操作系统与数据库来说,这样折腾来折腾去的不可能靠人手工去调整时间,所以很多欧美软件产商纷纷推出软件补丁来解决这个问题。规模之大足以让人想起千年虫的事件。
DST 与 Oracle
Oracle 数据库的调整可以从 Oracle 站点上的这个指导开始: Oracle Database Daylight Saving Time Update Guide。因为需要打新的软件补丁,数据库必需要进行重新启动。所以很多在线应用必需要忍受这次调整带来的影响。
DST 影响中国么?
我国因为取消了夏令时制度,这可能是因为能源问题虽然更加紧迫,但因为时间变来变去给人们带来的麻烦更多而取消的吧。具体的原因我不清楚,谁知道麻烦告诉我一下。如前所述,国内的 DST 问题实际上是不存在的。当然,如果你的服务器是放在美国或者加拿大,或者是面向这两个地区的用户,就需要评估一下影响了。
关于夏令时
我国曾于1986年到1991年每年从四月的第二个星期天早上2点钟,到九月的第二个星期天早上2点钟,在这段时期内,全国都将时间拨快1小时,实行夏令时。从九月的第二个星期天早上2点钟起,又将拨快的时间重新拨回来,直到第二年四月的第二个星期天早上2点钟。
Linux 怎么应对 DST?
Linux 厂商会有一个官方指导(比如 Redhat 的 DST 指导 )。如果是个人 PC,不妨参考这个:Switching your Linux systems to the new DST。
-EOF–
对于Oracle本身是没有问题的, 对应用中的数据有影响, 如果将DATE类型换成TIMESTAMP WITH TIME ZONE估计就没有问题了.
那天正好我oncall,到时候要拨到美国要随时待命:(
对于 eBay 这样的站点,可能会因为 DST 的调整引入一部分”脏数据”,这是比较头疼的事情
“对于Oracle本身是没有问题的, 对应用中的数据有影响, 如果将DATE类型换成TIMESTAMP WITH TIME ZONE估计就没有问题了” No. You got it flipped over. When there is any data type of TIMESTAMP WITH TIME ZONE or TIMESTAMP WITH LOCAL TIME ZONE in the database, you need DST patch. The other chances are that if Oracle TZ-related function (e.g. TZ_OFFSET) is in the application code.
There are 2 types of patches for Oracle: DST patch (TZ data files) and OJVM patch.
I have been driven crazy by this in the past month. Now finished dozens of db from 8.1.7.4 to 10.2.0.3. Version 3, version 4…
这个DST补丁是为什么? 因为Oracle计算时区有问题?
DST引起的是应用的问题, 数据的问题.
只有高纬度地区DST效果明显,我国幅员辽阔,纬度跨越太多,南方地区不适合使用DST。而美国加拿大等纬度跨度小且高,DST效果显著。
我们国家现在连时区都没有分…别搞什么DST了