Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle:attiva la creazione di una riga della cronologia durante l'aggiornamento

Ok, questa è una riscrittura. Quello che mi sono perso quando ho risposto per la prima volta è che l'applicazione sta memorizzando la sua cronologia nella tabella principale. Ora capisco perché @NickCraver si scusa così tanto per il codice.

Bene, la prima cosa da fare è dare la caccia agli autori di questo progetto e assicurarsi che non lo facciano mai più. La memorizzazione della cronologia in questo modo non scala, rende le query normali (non storiche) più complicate e sabota l'integrità relazionale. Ovviamente ci sono scenari in cui nulla di tutto ciò conta, e forse il tuo sito è uno di questi, ma in generale questa è una pessima implementazione.

Il modo migliore per farlo è Oracle 11g Total Recall . È una soluzione elegante, con un'implementazione completamente invisibile ed efficiente e, per gli standard degli altri extra a pagamento di Oracle, a un prezzo abbastanza ragionevole.

Ma se Total Recall è fuori questione e devi davvero farlo, non consentire aggiornamenti . Una modifica a un record CONTACT esistente dovrebbe essere un inserto. Per fare in modo che funzioni potrebbe essere necessario creare una vista con un trigger INSTEAD OF. È ancora schifoso ma non così schifoso come quello che hai ora.

A partire da Oracle 11.2.0.4 Total Recall è stato rinominato Flashback Archive ed è incluso come parte della licenza Enterprise (sebbene sia stato privato delle tabelle journal compresse a meno che non acquistiamo l'opzione Advanced Compress).

Questa generosità di Oracle dovrebbe rendere la FDA il modo normale di archiviare la cronologia:è efficiente, è performante, è un Oracle integrato con sintassi standard per supportare le query storiche. Purtroppo mi aspetto di vedere implementazioni semicotte con trigger spatchcocked, chiavi primarie rotte e prestazioni orribili per molti anni ancora. Perché il journaling sembra essere una di quelle distrazioni di cui si divertono gli sviluppatori, nonostante il fatto che sia un impianto idraulico di basso livello che è in gran parte irrilevante per il 99,99% di tutte le operazioni aziendali.