30. juni 2005 - 20:59Der er
11 kommentarer og 1 løsning
Lock en database!
Skal lave en system ala Visual Sourcesafe hvor man kan sætte en state i en database om en bruger anvender en given ting (readonly). Men hvis readonly er sat til falsk og to brugere samtidig tilgår denne værdi går mit scenario jo lidt i vasken. Hvad er den smarteste måde at lave sådan løsninger på? Overvejde om man skulle låse tabellen(og hvordan gør man det?) eller er der andre endnu bedre metoder?
Og hvad sker der egentlig hvis man locker en database og noget går galt? Er den så locked for evah. Og hvad sker der når man prøver at tilgå en locked tabel? Får man så en exception via ado.net eller venter den bare lidt med at prøve igen?
Det mere sådan en genrel forståelse jeg søger. Jeg har gjort følgende:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION
DECLARE @count INT set @count = (select count(*) from checkout_table with(ROWLOCK) where id=4)
IF( @count < 1 ) begin insert into news_checkout values(@id,@user,getDate()) select 1 end ELSE begin select 0 end
COMMIT TRANSACTION
Betyder det her at hvis en bruger kalder den her SP kan andre så ikke checke noget ind mend den kører. Hvad sker der hvis to brugere på nøjagtig samme tid kalder den her funktionalitet?
Jeg vil prøve at stres teste det lidt. Jeg har stadig ik fået helt fat i hvis jeg kalder transaktionen og du lige efter kalder den, skal du så vente til jeg er færdig med tabellerne fordi transaktionen måske forhindre andre i at bruge tabellerne eller kan jeg faktisk riskere at du når at læse den her linie:
set @count = (select count(*) from checkout_table with(ROWLOCK) where id=4)
inden jeg når at få smidt en række ind?
Smid et svar lige meget om du kan svare på ovenstående var det brugbar info.
sådan kort fortalt betyder serializable at selv ved kørsel af 2 samtidigt skal man få samme resultat som hvis de var serialiseret d.v.s. at nummer to først startede når nummer 1 er færdig
Og det jo det jeg skulle nå frem til. Tak for hjælpen:D
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.