sql >> Databasteknik >  >> RDS >> Oracle

Oracle - Utlöser att skapa en historikrad vid uppdatering

Okej, det här är en omskrivning. Vad jag missade när jag först svarade är att applikationen lagrar sin historik i huvudtabellen. Nu förstår jag varför @NickCraver är så ursäktande för koden.

Det första du ska göra är att jaga förövarna av denna design och se till att de aldrig gör det igen. Att lagra historia som denna skalas inte, gör normala (icke-historiska) frågor mer komplicerade och saboterar relationsintegriteten. Uppenbarligen finns det scenarier där inget av det spelar någon roll, och kanske din webbplats är en av dem, men i allmänhet är detta en mycket dålig implementering.

Det bästa sättet att göra detta är Oracle 11g Total Recall . Det är en elegant lösning, med en helt osynlig och effektiv implementering, och - enligt standarden för Oracles andra avgiftsbelagda extrafunktioner - ganska rimligt prissatt.

Men om Total Recall inte är aktuellt och du verkligen måste göra det här, tillåt inte uppdateringar . En ändring av en befintlig KONTAKTpost ska vara en infogning. För att få detta att fungera kan du behöva bygga en vy med en ISTÄLLET FÖR trigger. Det är fortfarande yucky men inte riktigt så yucky som det du har nu.

Från och med Oracle 11.2.0.4 har Total Recall bytt namn till Flashback Archive och ingår som en del av Enterprise License (även om vi inte köper alternativet Advanced Compress).

Denna bredd från Oracle borde göra FDA till det normala sättet att lagra historia:det är effektivt, det är performativt, det är ett Oracle inbyggt med standardsyntax för att stödja historiska frågor. Tyvärr förväntar jag mig att se halvkokta implementeringar med spatchcocked triggers, trasiga primärnycklar och hemsk prestanda i många år ännu. För att journalföring verkar vara en av de distraktioner som utvecklare njuter av, trots att det är lågnivå-VVS som i stort sett är irrelevant för 99,99 % av all affärsverksamhet.



  1. Hur man effektivt laddar mixed-type pandas DataFrame i en Oracle DB

  2. MySQL-transaktion och trigger

  3. Entity Framework ORA-00932:inkonsekventa datatyper:"'förväntade CLOB fick CHAR"

  4. Skicka flera fält i ett formulär (PHP)