Pokud chceme odblokovat lock-nutou databázi na Microsoft SQL Serveru (například pokud chceme přejmenovat databázi, provést obnovu databáze, výmaz databáze…), lze to udělat následujícími způsoby.
První možností je použít tento kód:
SELECT DISTINCT
name AS database_name,
session_id,
host_name,
login_time,
login_name,
reads,
writes
FROM sys.dm_exec_sessions
LEFT OUTER JOIN sys.dm_tran_locks ON sys.dm_exec_sessions.session_id = sys.dm_tran_locks.request_session_id
INNER JOIN sys.databases ON sys.dm_tran_locks.resource_database_id = sys.databases.database_id
WHERE name ='NazevMeDatabaze'
ORDER BY name
Následně se nám objeví, kdo má nad databází zámek:
Pak lze použít například „KILL 68„, čímž zámek uvolníme. Výhodou je, že vidíme, kdo má lock a lze vše ručně řídit. Nevýhodou je, že mohou přibýt další zámky před operací, kterou chceme vykonat.
Další možností je použít tento kód:
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE --do you stuff here ALTER DATABASE YourDatabase SET MULTI_USER
Zde je určitou nevýhodou to, že nám zůstanou na databázi naše vlastní zámky a také to, že můžeme zapomenout vrátit databázi do multi-user režimu. Akce provádíme v místě označeném „do you stuff here“.
