Oracle是否面临Y2K问题?

时间:2010-08-12 14:10:39

标签: database oracle y2k

我的猜测是它没有,因为它们在日期也使用了几个世纪

来自here

  

DATE数据类型存储年份(包括世纪),月份,日期,小时,分钟和秒数(午夜之后)。

是否面对the problem

4 个答案:

答案 0 :(得分:6)

是的,Oracle受到Y2K错误的影响。在Oracle 7之前,数据库没有存储世纪。向后兼容性意味着Oracle 7数据库使用DD-MON-YY作为日期的默认格式掩码。如果您使用该掩码创建日期,则世纪默认为当前世纪。这仍然存在上个世纪的日期或下个世纪的日期问题。严格来说,这是一个应用程序问题,而不是存储问题。

作为此解决方案,Oracle将RR元素引入了日期掩码,该日期掩码基于日期窗口派生了一个世纪。这是出于显示目的。当然,这种解决方法现在已经成为一种嵌入式功能,并且会导致各种各样的问题。尤其是因为应用程序将其用作输入格式掩码,而不是要求用户明确输入一个世纪。

无论如何,这是它的工作原理。

SQL> insert into t72 values (1, to_date('12-MAY-32', 'DD-MON-YY'))
  2  /

1 row created.

SQL> insert into t72 values (2, to_date('12-MAY-99', 'DD-MON-YY'))
  2  /

1 row created.

SQL> insert into t72 values (3, to_date('12-MAY-50', 'DD-MON-YY'))
  2  /

1 row created.

SQL> insert into t72 values (11, to_date('12-MAY-32', 'DD-MON-RR'))
  2  /

1 row created.

SQL> insert into t72 values (12, to_date('12-MAY-99', 'DD-MON-RR'))
  2  /

1 row created.

SQL> insert into t72 values (13, to_date('12-MAY-50', 'DD-MON-RR'))
  2  /

1 row created.

SQL> insert into t72 values (14, to_date('12-MAY-49', 'DD-MON-RR'))
  2  /

1 row created.

SQL>

表格内容:

SQL> alter session set nls_date_format = 'DD-MON-YYYY'
  2  /

Session altered.

SQL> select * from t72
  2  /

        ID D
---------- -----------
         1 12-MAY-2032
         2 12-MAY-2099
         3 12-MAY-2050
        11 12-MAY-2032
        12 12-MAY-1999
        13 12-MAY-1950
        14 12-MAY-2049

7 rows selected.

SQL>

1-49年被分配19和0,50-99被赋予20。


需要重申的是,在Oracle中,Y2K错误是一个应用程序问题,而不是存储问题。现有的每个应用程序仍然允许用户编写日期,因为14-OCT-09正在使错误永久化。如果RR面具鼓励这种懒惰,那就会使事情变得更糟。

答案 1 :(得分:2)

正如APC所说,自V7以来,Oracle已经以完整的日期时间格式存储日期,并且大多数客户端应用程序还在2K截止日期之前的某个时间更正了使用显式-YY格式掩码。

然而,我已经看到自2K以来发生的错误,人们已经重新使用-YY格式掩码,而没有注意到测试,因为他们的所有测试数据都是在Y2K之后 - 特别是在进行日期/字符串/日期操作时 - 一个人为的例子:

TO_DATE(TO_CHAR(a_date_column,'DD-MM-YY')||'12:00','DD-MM-YYHH24:MI')

如果您正在处理将日期和时间存储为单独数据库列的遗留系统,则此类逻辑非常常见。语法可能是Oracle特定的,但问题实际上是一般的编程问题。

我在哪里看到与Oracle有关的问题一直是NLS日期设置。我见过DBA重建数据库但是将默认格式设置回-YY,我也看到了JDBC连接将会话格式设置为-YY,从OS环境继承并覆盖数据库的错误默认值。

这些都不是Oracle软件的错误,只要系统和编程语言允许2位数年,就应该注意“Y2K”问题。

答案 2 :(得分:1)

是的,看起来他们做了:

http://news.cnet.com/Oracle-offers-free-Y2K-upgrade/2100-1001_3-222123.html

不确定他们是否面对你所指的那个。

答案 3 :(得分:1)

可能稍微偏离主题,但......

我在Y2K期间为Oracle支持工作,包括翻身之夜。

我们整晚都打了一个电话 - 客户要求提供Oracle Y2K声明的副本。有点迟到了。 :)

除此之外,不要记得接到任何有关Y2K问题的电话。 (请注意,我在RDBMS服务器组中不起作用)