SQL Server automātiski rūpējās par to, lai dati tiktu atbilstoši bloķēti dažādos lietošanas scenārijos atkarībā no tā ko darām un kādā tansakcijā tas notiek. Piemēram, kamēr dati tiek lasīti, aizliegt citiem šos datus mainīt, bet atļaut tos pašus datus lasīt. Vai, kamēr dati tiek mainīti, aizliegt tos lasīt.
Bet ko darīt, ja šādu ideju vajag realizēt pilnīgi citā scenārijā? Piemēram, atļaut tikai vienam lietotājam vienā laika momentā izpildīt saglabāto procedūru.
Šeit viens no variantiem (MSDN saitēs zemāk ir labi piemēri):
- Nosaucam datu bāzes ietvaros unikālā, brīvi izvēlētā vārdā resursu, ko vēlamies slēg.
- Izvēlamies kā vēlamies resursu slēgt (transakcijas vai sesijas ietvaros, cik ilgi gaidīt, ja resurss aizņemts, ..)
- Bloķējam resursu, kad nepieciešams (sp_getapplock)
- Atbrīvojam resursu, kad tas vairs nav nepieciešams (sp_releaseapplock)
- Vietās, kur jākontrolē resursa lietošana ievietojam pārbaudi, vai resursu var izmantot.
sp_getapplock
sp_releaseapplock
Nav komentāru:
Ierakstīt komentāru