Advertisement
xFrenzy47x

Checking to see if tables are locked.

Jun 28th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.40 KB | None | 0 0
  1. -- Used to check which tables are locked. Also gets the SPID code so you can kill the process and "unlock" the tables.
  2. -- Using WITH (NOLOCK) On the table will give you results
  3. --KILL SPID
  4.  
  5. IF object_id('tempdb..#locksummary') IS NOT NULL DROP TABLE #locksummary
  6. IF object_id('tempdb..#lock') IS NOT NULL DROP TABLE #lock
  7. CREATE TABLE #lock (    spid INT,    dbid INT,    objId INT,    indId INT,    TYPE CHAR(4),    resource NCHAR(32),    Mode CHAR(8),    STATUS CHAR(6))
  8. INSERT INTO #lock EXEC sp_lock
  9. IF object_id('tempdb..#who') IS NOT NULL DROP TABLE #who
  10. CREATE TABLE #who (     spid INT, ecid INT, STATUS CHAR(30),
  11.             loginame CHAR(128), hostname CHAR(128),
  12.             blk CHAR(5), dbname CHAR(128), cmd CHAR(16)
  13.             --
  14.             , request_id INT --Needed for SQL 2008 onwards
  15.             --
  16.          )
  17. INSERT INTO #who EXEC sp_who
  18. Print '-----------------------------------------'
  19. Print 'Lock Summary for ' + @@servername  + ' (excluding tempdb):'
  20. Print '-----------------------------------------' + CHAR(10)
  21. SELECT     LEFT(loginame, 28) AS loginame,
  22.     LEFT(db_name(dbid),128) AS DB,
  23.     LEFT(object_name(objID),30) AS object,
  24.     MAX(mode) AS [ToLevel],
  25.     COUNT(*) AS [How Many],
  26.     MAX(CASE WHEN mode= 'X' THEN cmd ELSE NULL END) AS [Xclusive LOCK FOR command],
  27.     l.spid, hostname
  28. INTO #LockSummary
  29. FROM #lock l JOIN #who w ON l.spid= w.spid
  30. WHERE dbID != db_id('tempdb') AND l.STATUS='GRANT'
  31. GROUP BY dbID, objID, l.spid, hostname, loginame
  32.  
  33. SELECT * FROM #LockSummary ORDER BY [ToLevel] DESC, [How Many] DESC, loginame, DB, object
  34.  
  35. Print '--------'
  36. Print 'Who is blocking:'
  37. Print '--------' + CHAR(10)
  38. SELECT p.spid
  39. ,CONVERT(CHAR(12), d.name) db_name
  40. , program_name
  41. , p.loginame
  42. , CONVERT(CHAR(12), hostname) hostname
  43. , cmd
  44. , p.STATUS
  45. , p.blocked
  46. , login_time
  47. , last_batch
  48. , p.spid
  49. FROM      master..sysprocesses p
  50. JOIN      master..sysdatabases d ON p.dbid =  d.dbid
  51. WHERE     EXISTS (  SELECT 1
  52.           FROM      master..sysprocesses p2
  53.           WHERE     p2.blocked = p.spid )
  54.  
  55. Print '--------'
  56. Print 'Details:'
  57. Print '--------' + CHAR(10)
  58. SELECT     LEFT(loginame, 30) AS loginame,  l.spid,
  59.     LEFT(db_name(dbid),15) AS DB,
  60.     LEFT(object_name(objID),40) AS object,
  61.     mode ,
  62.     blk,
  63.     l.STATUS
  64. FROM #lock l JOIN #who w ON l.spid= w.spid
  65. WHERE dbID != db_id('tempdb') AND blk <>0
  66. ORDER BY mode DESC, blk, loginame, dbID, objID, l.STATUS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement