|
![]() | Systémové triggery | ![]() | Provoz a správa 602SQL serveru | Vlákna a jejich synchronizace semafory | ![]() |
Zamykání záznamů nebo objektů (tj. záznamů v tabulce objektů) slouží k omezení práce jiných uživatelů se stejným záznamem či objektem. Existují dva druhy zámků:
Na stejném záznamu smí současně být libovolný počet zámků pro čtení od různých uživatelů, anebo jediný zámek pro přepis a žádný zámek (pro čtení ani pro přepis) žádného jiného uživatele. Pokus umístit zámek, který tomuto pravidlu odporuje, skončí chybou NOT_LOCKED (136).
Klient může explicitně umisťovat a odstraňovat zámky a tím omezovat přístup jiných klientů k vybraným datům. Pokud klient umístí více zámků na stejný objekt, musí jich také stejný počet odstranit.
Mimo to server automaticky umisťuje dočasné zámky platné do konce transakce v těchto situacích:
Přehled aktuálních zámků a jejich vlastníků dá systémový dotaz _iv_locks nebo okno Monitor, záložka Zámky. Zámky, které brání provozu, může provozní správce z prostředí okna Monitor odstraňovat .
Zpracování požadavku klienta na SQL serveru může být pozastaveno do doby, než se uvolní zdroje, které jsou k jeho provedení potřeba. Děje se tak ve dvou případech:
Klient může nastavit, jak dlouho chce v takových situacích čekat. Pokud nastavený čas vyprší a požadovaný objekt není uvolněn, operace skončí s chybou 136 NOT_LOCKED (a je-li zapnuto trasování TRACE_LOCK_ERROR vypíší se do logu podrobnější informace ). Limit času čekání je nastaven pro každého klienta zvlášť.
Čas se nastavuje v desetinách sekundy. Hodnota -1 označuje neomezeně dlouhé čekání. Pro nastavení času čekání z prostředí serveru slouží systémová proměnná @@WAITING. Pro nastavení času čekání z prostředí klienta slouží API funkce waiting. Pro nově připojené klienty je čas čekání nastaven podle vlastnosti serveru LockWaitingTimeout (lze také nastavit v okně Provozní parametry na záložce Nastavení). Implicitní hodnota této vlastnosti je 150, tedy 15 sekund.
V určitých situacích při interaktivní práci na návrhu aplikace by však čekání na uvolnění zámku bylo zdržující, proto se chyba 136 NOT_LOCKED vyvolá ihned. Týká se to např. otevírání interaktivních návrhářů na objekty, které jsou používány jiným klientem apod. Za této situace se nevyvolá zápis do logu při nastavení trasování TRACE_LOCK_ERROR.
Zámky pro přepis i pro čtení umisťují příslušné API funkce - např. Write_lock_record, Read_lock_table apod.
Zámky se explicitně odstraňují pomocí funkcí jazyka, např. Write_unlock_record. Odstranění neexistujícího zámku vede k chybě ERROR_IN_FUNCTION_ARG (180).
![]() | Systémové triggery | ![]() | Provoz a správa 602SQL serveru | Vlákna a jejich synchronizace semafory | ![]() |