The difference between a table that locks a database
SELECT * from table with (HOLDLOCK) Other transactions can read the table but cannot update the delete
SELECT * from table with (Tablockx) Other transactions cannot read table, update and delete
Each of the "lock options" in the SELECT statement and the corresponding function description.
NOLOCK (without lock)
When this option is selected, SQL Server does not add any locks when reading or modifying data. In this case, it is possible for the user to read the data in the incomplete transaction (uncommited Transaction) or rollback (roll back), known as "dirty data."
NOLOCK statement execution does not emit a shared lock, allowing dirty reads, equal to the READ UNCOMMITTED transaction isolation LEVEL
HOLDLOCK (Hold Lock)
When this option is selected, SQL Server will persist this shared lock to the end of the entire transaction and will not be released on the way.
HOLDLOCK holds a shared lock until the entire transaction is complete and should be released immediately when the locked object is not needed, equal to the serializable transaction isolation level
UPDLOCK (Modify Lock)
When this option is selected, SQL Server uses a modify lock instead of a shared lock when reading data, and holds the lock to the entire transaction or to the end of the command. Using this option ensures that multiple processes can read data at the same time, but only that process can modify the data.
TABLOCK (table Lock)
When this option is selected, SQL Server will place a shared lock on the entire table until the command ends. This option ensures that other processes can read only and cannot modify the data.
Paglock (page lock)
This option is the default option when SQL Server uses a shared page lock when it is selected.
Paglock with multiple page locks where a table lock is used
Tablockx (Row it table lock)
When this option is selected, SQL Server will place an exclusive lock on the entire table until the command or transaction ends. This prevents other processes from reading or modifying the data in the table. Tablockx enforces exclusive table-level locks, which prevent any other transactions from using this table during a transaction
READPAST let SQL Server skip any locking lines, perform transactions, apply to READ UNCOMMITTED transaction isolation LEVEL only skip RID lock, skip page, zone and table lock
Rowlock forcing the use of row locks
Uplock forcing updates to be used when reading tables without sharing locks
To view the locked table:
Select request_session_id spid,object_name (resource_associated_entity_id) tableName
From sys.dm_tran_locks where resource_type= ' OBJECT '
SPID Lock Table Process
TableName Locked Table name
Unlock:
DECLARE @spid int
Set @spid = 57--Lock table process
DECLARE @sql varchar (1000)
Set @sql = ' Kill ' +cast (@spid as varchar)
EXEC (@sql)
Use master; Goexec sp_who ' active '; Goexec Sp_who2 ' active '; GO
Use master; Gokill spid | UOW [with Statusonly]go
Select object_name(P.object_id) asTableName, Resource_type, resource_description,request_session_id fromsys.dm_tran_locks LJoinSys.partitions P onl.resource_associated_entity_id=p.hobt_idKillID--Other information about Locks:Select * fromsys.dm_tran_locksSELECT * fromSys.dm_exec_requestsWHEREblocking_session_id<>0 Select * fromsys.sysprocessesSelect object_name(resource_associated_entity_id) as 'TableName',* fromsys.dm_tran_lockswhereResource_type= 'OBJECT' andresource_database_id= db_id()GO
EXEC sp_who Active--see which caused the blockage, Blk blk<>0
EXEC sp_lock--look at the lock on that resource Id,objid objid<>0
Original link: https://www.cnblogs.com/shy1766IT/p/6225694.html
View SQL Server locked tables and how to unlock "go"