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

Hvorfor er de slettede (uforpligtede) rækker i Oracle SQL ikke synlige i den aktuelle session, men synlige i andre sessioner?

Samt diskussionen om ACID-egenskaber, hvortil ziesemer henviste dig, bør du vide om Multi-Version Concurrency Control eller MVCC. Hvis du vil vide 'alt om det', kan du overveje at læse Concurrency Control og gendannelse i databasesystemer af Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman (kan downloades).

I Oracle og andre lignende MVCC DBMS, når du starter en transaktion, holdes der en note om et tidsstempel, som identificerer det pågældende starttidspunkt (men tidsstempelværdien er ikke nødvendigvis en simpel 'sekunder siden Unix Epoch'-værdien). Mens transaktionen kører, vil den ikke se nogen data indsat med et tidsstempel efter starttidspunktet. Systemet holder tidligere versioner af datasiderne tilgængelige for transaktioner, der stadig kører. Når transaktionen skriver en side, opretter den en ny kopi med et nyt tidsstempel, men denne kopi gøres ikke tilgængelig for andre transaktioner, før den ændrende transaktion forpligtes, og selv da bliver den kun gjort tilgængelig for transaktioner, der starter efter forpligtelsen.



  1. Hvordan kan jeg komme uden om MySQL Errcode 13 med SELECT INTO OUTFILE?

  2. Veltalende mange-til-mange-til-mange - hvordan man nemt indlæser fjerntliggende forhold

  3. Hvordan skriver man en null sikker sammenligne <=> i ren SQL?

  4. Der opstod en fejl under installationen af ​​pg (0.18.2), og Bundler kan ikke fortsætte