Вопрос

Я думаю, что он не имеет, потому что они используют века и в датах

От здесь,

Дата DataType магазины год (включая век), месяц, день, часы, минуты и секунды (после полуночи).

Сделал это лицом эта проблема?

Это было полезно?

Решение

Да, 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 BUG Y2K - это проблема приложения, а не хранилище. Каждое приложение в наличии все равно позволит пользователям писать даты как 14-октябрь-09, увековечивая ошибка. В той степени, в которой маска RR поощряет эту лень, она сделала все хуже.

Другие советы

Как сказал APC, Oracle сохранил даты в полном формате даты, поскольку V7, и большинство клиентских приложений также исправили любое использование явных масок формата.

Тем не менее, я видел ошибки, происходящие с 2K, где люди вернулись в переработку масок формата, а не замечая в тестировании, потому что все их тестовые данные являются Post-Y2K - особенно при выполнении даты / строки / даты манипуляций - искусственный пример :

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

Этот вид логики довольно распространен, если вы имеете дело с устаревшей системой, которая хранит дату и время как отдельные столбцы базы данных. Синтаксис может быть конкретным Oracle, но проблема действительно общего программирования.

Где я видел проблемы, которые относятся к Oracle, было связано с настройками даты NLS. Я видел базу данных DBA Rebuild, но устанавливая формат по умолчанию обратно в -Yy, и я также видел ошибки, вызванные, когда соединение JDBC было установлено формат сеанса, наследующуюся от среды ОС, и переопределить базу данных. По умолчанию.

Ни один из них не являются неисправностями с программным обеспечением Oracle, он просто платит, что проблемы с «y2k» будут около длится, как системы и языки программирования, позволяющие двузначным годам.

Да, похоже, что они сделали:

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

Не уверены, столкнулись ли они на точке точного, к которому вы ссылаетесь, хотя.

Возможно, немного без темы, но ....

Я работал на поддержку Oracle в течение периода Y2K, в том числе сама рулона.

Мы получили один звонок всю ночь - клиент, спрашивающий копию заявления Oracle Y2K. Бит поздно метинкс. :)

Кроме того, не вспоминайте призыв к проблемам Y2K. (Обратите внимание, что я не работал в группе серверов RDBMS, хотя)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top