Blockering (DBMS)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 17 december 2019; verifiering kräver 1 redigering .

Lås ( eng.  lock ) i DBMS  - ett märke på fångst av ett objekt genom en transaktion i begränsad eller exklusiv åtkomst för att förhindra kollisioner och bibehålla dataintegriteten .

Blockering av klassificeringar

Efter omfattning klassificeras lås i gemener, granulära och predikat. Beroende på svårighetsgraden av låsen delas in i gemensamma ( engelska  delade ) och exklusiva ( exklusiva, engelska  exklusiva ). Enligt implementeringens logik är blockering uppdelad i optimistisk och pessimistisk.

Efter omfattning

Radlås  - agera på endast en rad i databastabellen, utan att begränsa manipulationer på andra rader i tabellen.

Granulärt lås  - påverkar hela tabellen eller hela sidan och alla rader. Ett lås som begränsar manipulationer med en sida med data i en tabell (en uppsättning rader förenade av ett delad lagringsattribut) kallas ibland sidlåsning . 

Ett predikatlås verkar på det område som avgränsas av predikatet. Detta är vanligtvis ett nyckelområdeslås . Med ett sådant lås anger nyckeln eller index värdet eller värdeintervallet som låset gäller. Ett sådant lås (liksom ett tabellövergripande lås) skyddar bland annat mot fantomläsningar och ger en serialiserbar transaktionsisoleringsnivå.

Efter svårighetsgrad

Ett delat lås förvärvas av en transaktion på ett objekt om operationen som utförs av det är säker, det vill säga det ändrar inte några data och har inga biverkningar . Samtidigt kan alla transaktioner utföra en operation av samma typ på ett objekt om det har ett delat lås, vanligtvis används ett sådant lås för läsoperationer.

Ett exklusivt lås placeras på ett objekt av en transaktion om operationen det utför ändrar data. Endast en transaktion kan utföra en sådan operation på ett objekt om det har ett exklusivt lås. Ett lås kan inte placeras på ett objekt om det redan har ett delat lås.


Enligt implementeringslogiken

Ett pessimistiskt lås placeras före en föreslagen dataändring på alla rader som ändringen förväntas påverka. Under varaktigheten av ett sådant lås är modifiering av data från tredjepartssessioner utesluten, data från låsta rader är tillgänglig enligt transaktionens isoleringsnivå . När den avsedda ändringen är klar garanteras en konsekvent registrering av resultaten.

Optimistisk låsning begränsar inte modifieringen av den bearbetade datan av tredjepartssessioner, men innan den föreslagna modifieringen börjar, begär den dock värdet av något valt attribut för var och en av dataraderna (vanligtvis ett namn VERSIONoch en heltalstyp med ett initialt värde på 0 används). Innan ändringarna skrivs till databasen kontrolleras värdet på det valda attributet igen, och om det har ändrats rullas transaktionen tillbaka eller olika kollisionslösningsscheman tillämpas. Om värdet på det valda attributet inte har ändrats, utförs ändringar med en samtidig förändring av värdet på det valda attributet (till exempel inkrement ) för att signalera andra sessioner att data har ändrats.