Frage

Meine Vermutung ist, dass es shouln't haben, weil sie Jahrhunderte verwenden auch in Daten

hier ,

  

Der Datentyp DATE speichert das Jahr (einschließlich des Jahrhunderts) , den Monat, den Tag, die Stunden, die Minuten und die Sekunden (nach Mitternacht).

Haben face it das Problem ?

War es hilfreich?

Lösung

Ja, wurde Oracle durch den Y2K-Bug betroffen. Vor der Oracle 7 die Datenbank hat das Jahrhundert nicht speichern. Abwärtskompatibilität bedeutet, dass Oracle 7 Datenbank für Daten DD-MON-YY als Standardformat Maske verwendet. Und wenn Sie ein Datum erstellen mit dieser Maske des Jahrhundert standardmäßig das aktuellen Jahrhundert. Was läßt immer noch Probleme mit Daten aus dem vorigen Jahrhundert jetzt oder Terminen im nächsten Jahrhundert dann. Streng genommen ist dies eine Anwendung Problem eher als ein Speicher Thema.

Als eine Arbeit um für dieses Oracle die RR Element Maske zu dem Zeitpunkt eingeführt, die ein Jahrhundert auf der Grundlage eines Datumsfenster leitet. Dies wurde für die Anzeige vorgesehen. Natürlich hat diese Problemumgehung jetzt ein eingebettetes Feature worden und führt zu allen möglichen Problemen ihrer eigenen. Nicht zuletzt, weil Anwendungen verwendet als Eingabeformat Maske anstelle Nutzer erfordern explizit ein Jahrhundert geben.

Wie auch immer, hier ist, wie es funktioniert.

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>

Der Tabelleninhalt:

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>

Jahre 1-49 zugeordnet sind, 19 und 0, sind 50-99 20 angegeben.


Es ist wert, dass in Oracle der Y2K-Bug ist eine Anwendung Problem nicht um eine Lagerung. Jede Anwendung in Existenz wird immer noch ermöglicht es Benutzern, Schreibdaten als 14-OCT-09 wird den Fehler zu verewigen. In dem Maß, dass der RR Maske diese Trägheit fördert es gemacht hat, die Dinge noch schlimmer.

Andere Tipps

Wie APC gesagt hat Oracle Daten in einem vollständigen Datum-Zeit-Format seit V7 gespeichert, und die meisten Client-Anwendungen korrigierten auch jede Verwendung von expliziten -YY Formatmasken einig Zeit vor der 2K-Frist.

Allerdings habe ich Fehler gesehen auftreten, da 2K, wo die Menschen wieder in gerutscht Wiederverwendung von -YY Formatmasken und bemerken nicht in die Prüfung, weil alle ihre Testdaten nach Y2K ist - vor allem, wenn dabei Datum / string / Datum Manipulationen - ein künstliches Beispiel:

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

Diese Art von Logik ist durchaus üblich, wenn Sie mit einem Legacy-System zu tun, dass speichert Datum und Uhrzeit als separate Datenbankspalten. Die Syntax kann Oracle spezifisch, aber das Problem ist wirklich eine allgemeine Programmierung ein.

Wo ich Probleme gesehen haben, die mehr auf Oracle beziehen hat rund NLS Datumseinstellungen. Ich habe ein DBA gesehen eine Datenbank neu erstellen, aber das Standardformat zurück zum -YY Einstellung, und ich habe auch Fehler verursacht gesehen, wo eine JDBC-Verbindung das Session-Format -YY ging, von der OS-Umgebung geerbt, und das Überschreiben der Datenbank Standard.

Keine von diesen sind Fehler mit Oracle-Software, lohnt es sich nur bewusst zu sein, dass ‚Y2K‘ Probleme rund um sein solange Systeme und Programmiersprachen ermöglichen 2-stellige Jahre.

Ja, es sieht aus wie sie tat:

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

Nicht sicher, ob sie genau eine gegen Sie sich beziehen, though.

Möglicherweise etwas off-topic, aber ....

Ich arbeite für Oracle Support über den Y2K Zeitraum, einschließlich der Überroll Nacht selbst.

Wir haben ein Anruf die ganze Nacht - ein Kunde für eine Kopie von Oracle Y2K-Anweisung zu fragen. Bit spät methinks. :)

Other than that, erinnern keine Anrufe empfangen auf Y2K Probleme. (Beachten Sie, dass ich, wenn auch nicht Arbeit in der RDBMS-Server-Gruppe hat)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top