sql >> Databasteknik >  >> RDS >> Oracle

Varför är de borttagna (oengagerade) raderna i Oracle SQL inte synliga i den aktuella sessionen men i andra sessioner?

Samt diskussionen om ACID-egenskaper till vilka ziesemer hänvisade dig bör du känna till Multiversionskontroll av samtidighet eller MVCC. Om du vill veta "allt om det", överväg att läsa Concurrency Control och återställning i databassystem av Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman (tillgänglig för nedladdning).

I Oracle och andra liknande MVCC DBMS, när du startar en transaktion, hålls en anteckning om en tidsstämpel som identifierar den starttiden (men tidsstämpelvärdet är inte nödvändigtvis ett enkelt "sekunder sedan Unix Epoch"-värdet). Medan den transaktionen körs kommer den inte att se några data infogade med en tidsstämpel efter dess starttid. Systemet håller tidigare versioner av datasidorna tillgängliga för transaktioner som fortfarande körs. När transaktionen skriver en sida, skapar den en ny kopia med en ny tidsstämpel, men den kopian görs inte tillgänglig för andra transaktioner förrän den modifierande transaktionen genomförs, och även då görs den endast tillgänglig för transaktioner som startar efter commit.



  1. Hur återhöjer man pl/sql-undantaget i undantagshanteringsblocket?

  2. Python/MySQL-frågefel:`Okänd kolumn`

  3. anropar en lagrad procedur med indataparameter och utmarkör i perl-skript

  4. Ta bort ett databaspostkonto från en profil (SSMS)