Оракул столкнулся с проблемой 2000 года?
Я предполагаю, что это не должно иметь, потому что они используют столетия также в датах
Тип данных DATE хранит год (включая столетие), месяц, день, часы, минуты и секунды (после полуночи).
Это столкнулось с проблемой?
4 ответа
Да, на 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 ошибка 2000 года - это проблема приложения, а не хранилища. Каждое существующее приложение по-прежнему позволяет пользователям записывать даты, так как 14-ОКТ-09 увековечивает ошибку. В той степени, в которой маска RR поощряет эту лень, она усугубляет ситуацию.
Как сказал APC, Oracle хранит даты в полном формате даты-времени начиная с V7, и большинство клиентских приложений также исправили любое использование явных масок формата -YY за некоторое время до крайнего срока 2K.
Тем не менее, я видел ошибки, возникающие после 2K, когда люди возвращались к повторному использованию масок формата -YY и не замечали их при тестировании, потому что все их тестовые данные были после Y2K - особенно когда выполняются манипуляции с датой / строкой / датой - искусственные пример:
TO_DATE(TO_CHAR(a_date_column,'DD-MM-YY')||'12:00','DD-MM-YYHH24:MI')
Такая логика довольно распространена, если вы имеете дело с устаревшей системой, в которой дата и время хранятся в виде отдельных столбцов базы данных. Синтаксис может быть специфичным для Oracle, но проблема действительно в программировании.
Там, где я видел проблемы, которые в большей степени относятся к Oracle, были настройки даты NLS. Я видел, как администратор БД перестраивал базу данных, но устанавливал формат по умолчанию обратно -YY, и я также видел ошибки, вызванные тем, что соединение JDBC устанавливало формат сеанса на -YY, унаследованный от среды ОС и переопределяя базу данных. дефолт.
Ни одна из этих проблем не является ошибкой программного обеспечения Oracle, просто стоит помнить, что проблемы Y2K будут существовать до тех пор, пока системы и языки программирования допускают двузначные годы.
Возможно, немного не по теме, но....
Я работал в службе поддержки Oracle в течение 2000 года, включая саму ночь переноса.
Мы получили один звонок всю ночь - клиент просит копию заявления Oracle о 2000 году. Немного запоздала метинка.:)
Кроме этого, не вспоминайте о получении каких-либо звонков о проблемах 2000 года. (Обратите внимание, что я не работал в группе RDBMS Server)
Да, похоже, что они сделали:
http://news.cnet.com/Oracle-offers-free-Y2K-upgrade/2100-1001_3-222123.html
Не уверен, что они столкнулись с тем, на кого вы ссылаетесь.