Domanda

La mia ipotesi è che shouln't hanno perché utilizzano secoli anche in date

qui ,

  

La data di tipo di dati memorizza l'anno (incluso il secolo) , il mese, il giorno, le ore, i minuti ei secondi (dopo la mezzanotte).

Forse a faccia in il problema ?

È stato utile?

Soluzione

Sì, Oracle è stato influenzato dal bug Y2K. Prima di Oracle 7 Il database non ha memorizzare il secolo. Compatibilità significa che database Oracle 7 usato DD-MON-YY come la maschera di formato di default per le date. E se si crea una data utilizzando che mascherano le impostazioni predefinite secolo al secolo corrente. Che lascia ancora problemi con risale al secolo precedente ora o date nel prossimo secolo poi. A rigor di termini questo è un problema di applicazione piuttosto che un problema di stoccaggio.

Come attorno al lavoro per questo Oracle ha introdotto l'elemento RR alla maschera data, che deriva un secolo sulla base di un datario. Questo è stato destinato per la visualizzazione. Naturalmente, questa soluzione è diventata una caratteristica incorporata la società, e porta a tutti i tipi di problemi propri. Non da ultimo perché le applicazioni usato come una maschera di formato di input invece di richiedere agli utenti di inserire in modo esplicito un secolo.

In ogni caso, ecco come funziona.

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>

Il contenuto della tabella:

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>

anni 1-49 vengono assegnati 19 e 0, 50-99 sono indicati 20.


Vale la pena ripetere che in Oracle il bug Y2K è un non problema dell'applicazione uno stoccaggio. Ogni applicazione esistente sarà ancora permette agli utenti di scrivere come date 14-ott-09 perpetua il bug. Nella misura in cui la maschera RR incoraggia questa pigrizia ha fatto che peggiorare le cose.

Altri suggerimenti

Come APC ha detto, Oracle ha memorizzato le date in un formato di data-tempo pieno dal V7, e la maggior parte delle applicazioni client anche correggere qualsiasi uso di espliciti maschere di formato -yy po 'di tempo prima della scadenza 2K.

bug Tuttavia, ho visto che si verificano in quanto 2K in cui le persone sono scivolati indietro nella ri-utilizzando maschere di formato -yy, e non notando nei test perché tutti i loro dati di prova è post-Y2K - in particolare quando si fa data / stringa / data manipolazioni - un esempio artificiale:

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

Questo tipo di logica è abbastanza comune, se si tratta di un sistema legacy che memorizza data e ora come colonne di database separati. La sintassi può essere Oracle specifica, ma il problema è davvero un generale uno di programmazione.

Dove ho visto i problemi che riguardano più da Oracle è stato intorno impostazioni della data NLS. Ho visto un DBA ricostruire una base di dati, ma l'impostazione del posteriore formato predefinito per -YY, e ho anche visto gli errori causati in cui una connessione JDBC stava tramontando il formato sessione per -YY, ereditato dall'ambiente operativo, e ignorando il database di default.

Nessuno di questi sono difetti con il software di Oracle, si paga solo per essere consapevoli del fatto che i problemi 'Y2K' si aggirano intorno a patto che i sistemi e linguaggi di programmazione consentono anni a 2 cifre.

Si osserva come hanno fatto:

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

Non sono sicuro se hanno affrontato l'esatto quello che si sta riferendo a se.

Forse un po 'off-topic, ma ....

stavo lavorando per Oracle Support nel periodo Y2K, tra cui la stessa notte roll-over.

Abbiamo ottenuto una chiamata tutta la notte - un cliente che chiede una copia della dichiarazione Y2K di Oracle. Bit methinks ritardo. :)

Oltre a questo, non ricordo ricevere chiamate sui problemi Y2K. (Si noti che non ho lavorato nel gruppo RDBMS Server però)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top