Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Zárolja egy alkalmazási erőforrást.
Transact-SQL szintaxis konvenciók
Szemantika
sp_getapplock
[ [ @Resource = ] N'Resource' ]
, [ @LockMode = ] 'LockMode'
[ , [ @LockOwner = ] 'LockOwner' ]
[ , [ @LockTimeout = ] LockTimeout ]
[ , [ @DbPrincipal = ] N'DbPrincipal' ]
[ ; ]
Arguments
[ @Resource = ] N'Resource'
Egy láncsor, amely megadja a nevet, amely azonosítja a zár erőforrást.
@Resourcenvarchar(255), alapértelmezett értéke NULL. Ha egy erőforrás-lánc hosszabb, mint nvarchar(255), az értéket nvarchar(255)-re rövidítik.
Az alkalmazásnak biztosítania kell, hogy az erőforrás neve egyedi. A megadott név belső hashelésbe kerül egy értékbe, amely az SQL Server zárkezelőjében tárolható.
@Resource bináris összehasonlítású, így kis- és kis- detekúrós függetlenül az aktuális adatbázis összeállítási beállításaitól.
Megjegyzés:
Miután egy alkalmazási zárolást szereztek, csak az első 32 karakter lehet tiszta szövegben visszaszerezni; a maradékot összesítik.
[ @LockMode = ] 'LockMode'
A zárolási mód, amelyet egy adott erőforráshoz kell szerezni. @LockModea varchar(32), alapértelmezett nélkül, és az alábbi értékek egyike:
SharedUpdateIntentSharedIntentExclusiveExclusive
További információért lásd: zárolási módok.
[ @LockOwner = ] 'LockOwner'
A zsilit tulajdonosa, ami a @LockOwner érték, amikor a zárat kérték.
@LockOwnera varchar(32), alapértelmezett értéke Transaction. Az érték is lehet Session. Amikor a @LockOwner érték Transactionalapértelmezettnek vagy kifejezetten megjelölve, sp_getapplock akkor egy tranzakción belül kell végrehajtani.
[ @LockTimeout = ] LockTimeout
A zárolási időkorlát ezredmásodpercekben.
@LockTimeoutint, és az alapértelmezett érték megegyezik azzal, amit a - @@LOCK_TIMEOUTnek visszaadott értéke . Az (default) érték -1 azt jelzi, hogy nincs időkorlát (azaz örökké várak). Annak jelezésére, hogy egy zárolási kérésnek vissza kell adnia a visszaküldési kódot , -1 ahelyett, hogy várnánk a zárásra, amikor a kérés nem azonnal engedélyezhető, határozd 0meg .
[ @DbPrincipal = ] N'DbPrincipal'
A felhasználó, szerep vagy alkalmazás szerep, amely egy objektumhoz tartozó jogosultságokat ad egy adatbázisban.
@DbPrincipal a sysname, alapértelmezettként public. A függvény hívójának tagnak kell lennie a database_principal, dbo vagy a db_owner fix adatbázis szerepének tagjának ahhoz, hogy sikeresen hívhassuk a függvényt. Az alapértelmezett a nyilvános.
Kódértékek visszaadása
>= 0 (siker), vagy < 0 (kudarc).
| Érték | Result |
|---|---|
0 |
A zár szinkronban sikerült megoldani. |
1 |
A zárat sikeresen engedélyezték, miután megvárták a többi összeegyeztethetetlen zár feloldását. |
-1 |
A zár kérése időlejárt. |
-2 |
A zárolási kérelmet törölték. |
-3 |
A zár kérését holtpontnak választották. |
-999 |
Paraméter validálást vagy más hívási hibát jelez. |
Megjegyzések
Az erőforrásra helyezett zárak vagy a jelenlegi tranzakcióhoz, vagy a jelenlegi üléshez kapcsolódnak. A jelenlegi tranzakcióhoz kapcsolódó zárak akkor szabadulnak fel, amikor a tranzakció elkötelezi magát vagy visszahúzódik. A zárak, amelyek a játékrészleghez kapcsolódnak, akkor szabadulnak fel, amikor a játék kijelentkezik. Ha a szerver bármilyen okból leáll, minden zár feloldódik.
A zár sp_getapplock által létrehozott zár erőforrás a jelenlegi adatbázisban jön létre az üléshez. Minden zár erőforrást az alábbi együttes értékek alapján azonosítják:
- Az adatbázis azonosítója, amely tartalmazza a zár erőforrást.
- Az adatbázis alapvető, amelyet a @DbPrincipal paraméterben jelöltek meg.
- A paraméterben megadott @Resource zárnév.
Csak az @DbPrincipal paraméterben megadott adatbázis-alap tagja szerezhet alkalmazási zárokat, amelyek megadják az adott alapvetvet. A dbo és db_owner szerepek tagjai implicit módon minden szerep tagjainak számítanak.
A zárak kifejezetten feloldhatók .sp_releaseapplock Ha egy alkalmazás többször is hív sp_getapplock ugyanazt a zár erőforrást, sp_releaseapplock ugyanannyiszor kell meghívnia a zár feloldásához. Amikor a zár tulajdonosával kinyitnak Transaction , az a zár feloldódik, amikor a tranzakciót elvégezik vagy visszafordítják.
Ha sp_getapplock többször is meghívják ugyanazon zár erőforrásra, de a lekérdezésekben megadott zárolási mód nem egyezik meg a meglévő móddal, az erőforrásra gyakorolt hatása a két zárolási mód egyesülése. A legtöbb esetben ez azt jelenti, hogy a zár módot az erősebb zár módra, a meglévő módra vagy az újonnan kért módra lépik elő. Ez az erősebb zárolási mód addig tart, amíg a zár végül el nem engedik, még akkor is, ha a zárfeloldó hívások még akkor is, ha a zárfeloldó hívások még korábban is megtörténik.
Például a következő hívássorozatban az erőforrást módban Exclusive tartják, nem módban Shared .
USE AdventureWorks2022;
GO
BEGIN TRANSACTION;
DECLARE @result AS INT;
EXECUTE
@result = sp_getapplock
@Resource = 'Form1',
@LockMode = 'Shared';
EXECUTE
@result = sp_getapplock
@Resource = 'Form1',
@LockMode = 'Exclusive';
EXECUTE
@result = sp_releaseapplock
@Resource = 'Form1';
COMMIT TRANSACTION;
GO
Egy alkalmazás-zárolással rendelkező holtpont nem fordítja vissza azt a tranzakciót, amely az alkalmazás-zárlatot kérte. A visszaküldési érték miatt szükséges visszafordítást manuálisan kell végrehajtani. Ezért javasoljuk, hogy a hibaellenőrzés is legyen benne a kódban, így ha bizonyos értékek visszakerülnek (például -3), egy ROLLBACK TRANSACTION vagy alternatív akció induljon.
Íme egy példa:
USE AdventureWorks2022;
GO
BEGIN TRANSACTION;
DECLARE @result AS INT;
EXECUTE
@result = sp_getapplock
@Resource = 'Form1',
@LockMode = 'Exclusive';
IF @result = -3
BEGIN
ROLLBACK;
END
ELSE
BEGIN
EXECUTE
@result = sp_releaseapplock
@Resource = 'Form1';
COMMIT TRANSACTION;
END
GO
Az SQL Server a jelenlegi adatbázis azonosítót használja az erőforrás minősítésére. Ezért, ha sp_getapplock végrehajtják, még azonos paraméterértékekkel is különböző adatbázisokon az eredmény külön zárolások lesznek külön erőforrásokon.
Használd a sys.dm_tran_locks dinamikus menedzsment nézetet vagy a sp_lock rendszertárolt eljárást a zár információinak vizsgálatára, vagy SQL Server Profilerrel a zárak figyelésére.
Permissions
A nyilvános szerepkör tagságát igényli.
Példák
A következő példa egy megosztott zárat, amely a jelenlegi tranzakcióhoz kapcsolódik, helyez el az adatbázis erőforrására Form1AdventureWorks2025 .
USE AdventureWorks2022;
GO
BEGIN TRANSACTION;
DECLARE @result AS INT;
EXECUTE
@result = sp_getapplock
@Resource = 'Form1',
@LockMode = 'Shared';
COMMIT TRANSACTION;
GO
A következő példa az adatbázis alapvetőként jelöli dbo meg.
BEGIN TRANSACTION;
EXECUTE sp_getapplock
@DbPrincipal = 'dbo',
@Resource = 'AdventureWorks2022',
@LockMode = 'Shared';
COMMIT TRANSACTION;
GO