Lås (databaser)

Fra Wikipedia, den frie encyklopedi

I databaser er låsing en teknikk som hindrer samtidig tilgang til data i en database, med hensikt å unngå inkonsistente resultater.[1] Det gjøres typisk på en oppføring, kalt rad i SQL (derav begrepet radlåsing[2]). I databasehåndteringsteori brukes låsing for å implementere isolasjon mellom flere databasebrukere.

Et klassisk eksempel for å demonstrere problemet er hvis to bankfunksjonærer forsøker å oppdatere den samme bankkontoen for to forskjellige transaksjoner. Ekspeditører 1 og 2 henter begge (altså kopierer) kontoens oppføring. Ekspeditør 1 lagrer sin transaksjon. Ekspeditør 2 lagrer en annen transaksjon på sin lagrede kopi, og lagrer resultatet. Siden både ekspeditør 1 og 2 sine resultater er basert på den opprinnelige oppføringen og den enkeltes endring, vil ekspeditør 2 sin transaksjon overskrive transaksjonen angitt av ekspeditør 1. Den endelige oppføringen gjenspeiler dermed ikke lenger den første transaksjonen, som om den tilsynelatende aldri har funnet sted.

En enkel måte å forhindre dette på er å låse en fil når enn en oppføring blir endret av en bruker slik at ingen andre brukere kan lagre data. Dette forhindrer at oppføringer overskrives inkonsistent, men gjør det bare mulig å prosessere én oppføring om gangen og låser ute andre brukere som trenger å redigere oppføringer samtidig.

For å tillate flere brukere å redigere en databasetabell samtidig, og samtidig forhindre inkonsistenser forårsaket av ubegrenset tilgang, kan en enkelt oppføring (eller rad) låses når den hentes for redigering eller oppdatering. Alle som prøver å hente den samme oppføringen for redigering vil nektes skrivetilgang på grunn av låsen (selv om de, avhengig av implementeringen, kanskje kan være i stand til å lese oppføringen uten å redigere den). Når oppføringen er lagret eller redigeringer er kansellert frigjøres låsen. Oppføringer kan aldri lagres på en sånn måte at den overskriver andre endringer, og dermed bevares dataintegritet.

Se også[rediger | rediger kilde]

Referanser[rediger | rediger kilde]

  1. ^ Gray, Jim; Reuter, Andreas (1993), Distributed Transaction Processing: Concepts and Techniques, Morgan Kaufmann, ss. 375–437, ISBN 1-55860-190-2, https://archive.org/details/transactionproce0000gray/page/375 
  2. ^ «Java-vennlig personlig Oracle». Digi.no (norsk). 18. september 1997. Besøkt 13. mai 2024.