質問

私の推測では、彼らは何世紀にもわたって日付を使っているので、それは持っていないと思います

から ここ,

日付データ型 年を保管する(世紀を含む), 、月、日、時間、数分、秒(真夜中以降)。

直面しました 問題?

役に立ちましたか?

解決

はい、オラクルはY2Kバグの影響を受けました。 Oracle 7の前に、データベースは世紀を保存しませんでした。後方互換性とは、Oracle 7データベースが日付のデフォルト形式マスクとしてDD-Mon-YYを使用したことを意味しました。そして、あなたがそのマスクを使用して日付を作成する場合、世紀は現在の世紀にデフォルトです。現在、前世紀の日付や次の世紀の日付に問題が残っています。厳密に言えば、これはストレージの問題ではなくアプリケーションの問題です。

このOracleの回避として、RR要素は日付マスクにRR要素を導入しました。これは、日付ウィンドウに基づいて1世紀に由来するものです。これは、ディスプレイの目的を目的としています。もちろん、この回避策は現在埋め込まれた機能になり、それ自体のあらゆる種類の問題につながります。特に、アプリケーションがユーザーが明示的に1世紀に入ることを要求する代わりに、入力形式のマスクとして使用したためです。

とにかく、ここにそれがどのように機能するかがあります。

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マスクがこの怠inessを奨励する限り、それは事態を悪化させました。

他のヒント

APCが述べたように、OracleはV7以降、日付のフル形式で日付を保存しており、ほとんどのクライアントアプリケーションは、2K期限の前に明示的-YY形式のマスクの使用も修正しました。

しかし、私は2K以来、人々が再利用された状態に戻った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」の問題が存在することに注意するだけです。

はい、彼らはそうしたようです:

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

彼らがあなたが言及している正確なものに直面したかどうかはわかりません。

おそらくわずかにトピックですが、....

私は、ロールオーバーナイト自体を含め、Y2K期間にわたってOracle Supportで働いていました。

私たちは一晩中電話をかけました - OracleのY2Kステートメントのコピーを求める顧客。少し遅いメチンク。 :)

それ以外は、Y2Kの問題に関する電話を受けたことを思い出さないでください。 (私はRDBMSサーバーグループでは働いていなかったことに注意してください)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top