有帮助吗?

解决方案

是,甲骨文受千年虫。在此之前的Oracle 7数据库没有存储的世纪。向后兼容性意味着甲骨文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。


值得重申的是在甲骨文千年虫是一个应用程序的问题不是存储一个。存在不同应用将仍然允许用户编写日期为10月14日 - 09永存的bug。为了使RR面具鼓励这种懒惰它使事情变得更糟的程度。

其他提示

作为APC说,甲骨文已经存储日期以来V7一个完整日期 - 时间格式,大多数客户端应用程序还纠正任何使用显式-YY格式口罩的2K截止日期前一段时间了。

发生,因为2K,人们已经溜回然而,我所看到的错误重复使用-YY格式口罩,因为他们所有的测试数据后,2000年在测试中没有注意到 - 特别是做日期/串/日期的操作时 - 人造示例:

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

这样的逻辑是很常见的,如果你正在处理一个遗留系统,用于存储日期和时间作为单独的数据库列。语法可能是Oracle特定的,但问题是一个真正的通用编程一个。

在哪里我已经看到,更多地涉及到甲骨文一直围绕NLS日期设置问题。我见过一个DBA重建数据库,但设置默认格式返回给-YY,并且我也看到了造成的错误,其中一个JDBC连接被设置会话格式-YY,从OS环境中继承,并覆盖数据库默认值。

这些都不是Oracle的软件故障,它只是支付要知道,“千年虫”问题,只要将身边的系统和编程语言允许2位数的年份。

是的,它看起来像他们所做的:

HTTP://news.cnet的.com / Oracle的报价 - 自由-2000年升级/ 2100-1001_3-222123.html

不知道他们面对你指的是,虽然确切的一个。

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

我正在为Oracle支持在2000年期间,包括翻车夜本身。

我们得到了一个电话整夜 - 客户要求甲骨文的Y2K声明的副本。有点晚记错。 :)

除此之外,不记得接收关于2000年问题的所有呼叫。 (请注意,我没有工作的RDBMS服务器组虽然)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top