|
| Låse i MS-SQL Fra : Bo Håkonsen |
Dato : 30-07-03 13:54 |
|
Under MS-SQL-server 2000 har jeg forsøgt at eksperimente lidt med låse. Jeg
har forsøgt at låse en tabel (eller nogle rækker i en tabel). Jeg kører
nedenstående script to gange samtidig i hver sin SQL query analyzer. Men jeg
havde regnet med at tabellen var låst i 10 sek. for så at blive låst op
igen, når transaktionen blev commited....
Den ene script kører igennem uden problemer, mens den anden venter for
evigt...
Hvorfor låses der ikke op igen?
Mvh. Bo Håkonsen
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
select * from personer
update personer set something=0 where something_else = 56
WAITFOR DELAY '00:00:10'
COMMIT TRAN
| |
Ole Hyldahl Hansen (30-07-2003)
| Kommentar Fra : Ole Hyldahl Hansen |
Dato : 30-07-03 16:39 |
|
> Under MS-SQL-server 2000 har jeg forsøgt at eksperimente lidt med låse.
Jeg
> har forsøgt at låse en tabel (eller nogle rækker i en tabel). Jeg kører
> nedenstående script to gange samtidig i hver sin SQL query analyzer. Men
jeg
> havde regnet med at tabellen var låst i 10 sek. for så at blive låst op
> igen, når transaktionen blev commited....
> Den ene script kører igennem uden problemer, mens den anden venter for
> evigt...
>
> Hvorfor låses der ikke op igen?
> Mvh. Bo Håkonsen
Jeg kan ikke give nogen god forklaring, men noget kunne tyde på, at det er
Query Analyzeren, der holder transaktionen åben. Når jeg kører det og
process 2 hænger efter process 1 melder "Query batch completed" og derefter
lukker vinduet i process 1 frem kommer en dialogboks, der spørger om man vil
commit'e transaktionen.
Muligvis indleder QA med en transaktion hvilket tæller "transaktionsdybden"
1 op. Det endelige Commit bevirker muligvis derfor ikke et "rigtigt" commit
hvorfor process 2 bliver hængende. Hvis process 1 afsluttes helt kører
process 2 fint til enden.
Så jeg vil nok mistænke QA snarere end SQL Server. For dit script burde
opføre sig, som du regner med.
/Ole Hyldahl Hansen
| |
Bo Håkonsen (31-07-2003)
| Kommentar Fra : Bo Håkonsen |
Dato : 31-07-03 08:44 |
|
Jeg takker for dit svar.
Mvh. Bo
"Ole Hyldahl Hansen" <ohh@scisoft.dk> skrev i en meddelelse
news:VDRVa.41760$Kb2.1788672@news010.worldonline.dk...
> > Under MS-SQL-server 2000 har jeg forsøgt at eksperimente lidt med låse.
> Jeg
> > har forsøgt at låse en tabel (eller nogle rækker i en tabel). Jeg kører
> > nedenstående script to gange samtidig i hver sin SQL query analyzer. Men
> jeg
> > havde regnet med at tabellen var låst i 10 sek. for så at blive låst op
> > igen, når transaktionen blev commited....
> > Den ene script kører igennem uden problemer, mens den anden venter for
> > evigt...
> >
> > Hvorfor låses der ikke op igen?
> > Mvh. Bo Håkonsen
> Jeg kan ikke give nogen god forklaring, men noget kunne tyde på, at det er
> Query Analyzeren, der holder transaktionen åben. Når jeg kører det og
> process 2 hænger efter process 1 melder "Query batch completed" og
derefter
> lukker vinduet i process 1 frem kommer en dialogboks, der spørger om man
vil
> commit'e transaktionen.
>
> Muligvis indleder QA med en transaktion hvilket tæller
"transaktionsdybden"
> 1 op. Det endelige Commit bevirker muligvis derfor ikke et "rigtigt"
commit
> hvorfor process 2 bliver hængende. Hvis process 1 afsluttes helt kører
> process 2 fint til enden.
>
> Så jeg vil nok mistænke QA snarere end SQL Server. For dit script burde
> opføre sig, som du regner med.
>
> /Ole Hyldahl Hansen
>
>
| |
|
|