В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету
Войти

Отслеживание блокировок в SQL Server 2005 и SQL Server 2000

Аннотация
Данная статья представляет собой вариант следующей статьи по Microsoft SQL Server 7.0, обновленный с учетом особенностей Microsoft SQL Server 2000 и более поздних версий SQL Server:
251004 Отслеживание блокировок в SQL Server 7.0 (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
В данной статье описывается применение и принципы работы хранимой процедуры, помогающей диагностировать проблемы с блокировками и производительностью. Сведения о блокировках и способе их разрешения см. в следующей статье базы знаний Майкрософт:
224453 Проблемы с блокировками в SQL Server 7.0 и их разрешение (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
В Microsoft SQL Server 2005 можно также использовать класс событий Blocked Process Report в приложении SQL Server Profiler для сбора сведений о задаче, заблокированной дольше указанного интервала времени.

Дополнительные сведения о классе событий Blocked Process Report см. на веб-узле MSDN по следующему адресу:
Дополнительная информация
Хранимая процедура sp_blocker_pss80 позволяет получить указанные ниже сведения (приведенная информация также относится к SQL Server 2005).
  • Время запуска (по данным компьютера, на котором выполняется SQL Server), чтобы сведения о блокировках можно было сопоставлять по времени с другими сведениями о производительности, например с содержимым журнала системного монитора Microsoft Windows NT или журнала приложения SQL Profiler.
  • Сведения о подключениях к SQL Server, получаемые путем запроса системной таблицы sysprocesses.
  • Сведения о ресурсах блокировки, получаемые путем запроса системной таблицы syslockinfo.
  • Сведения об ожидании ресурсов, получаемые путем выполнения инструкции DBCC SQLPERF(WAITSTATS).
  • Выполняемый в текущий момент пакет SQL Server для подключений, заблокированных другими объектами или блокирующих другие объекты. Для получения этих сведений выполняется инструкция DBCC INPUTBUFFER.
  • Время завершения по данным компьютера, на котором выполняется SQL Server.
Чтобы выполнение данной хранимой процедуры оказывало меньшее влияние на производительность и блокировки, она была оптимизирована описанным ниже образом.
  • Если ни одно подключение не ожидает доступа к ресурсу, вывод не формируется.
  • Системные таблицы sysprocesses и syslockinfo из базы данных master запрашиваются непосредственно. Это повышает производительность и предотвращает блокировку данной хранимой процедуры. Таким образом, эту хранимую процедуру можно использовать только в Microsoft SQL Server 2000 и более поздних версиях SQL Server.
  • Для получения вывода инструкции DBCC INPUTBUFFER курсор создает небольшую рабочую таблицу; это не должно заметно влиять на использование хранимой процедуры в базе данных tempdb.
  • Поскольку во время сбора сведений состояние блокировки может измениться, хранимая процедура поддерживает быстрый режим, при котором производительность повышается за счет ограничения получаемых сведений соответствующими строками системных таблиц sysprocesses и syslockinfo.
  • При отслеживании ожидания ресурсов, не связанного с блокировкой, можно использовать режим кратковременной блокировки, при котором сведения о блокировке не выводятся.
Описываемую хранимую процедуру можно выполнять с помощью любого средства запросов. Однако корпорация Майкрософт рекомендует придерживаться описанной ниже процедуры анализа блокировок.
  1. Подключитесь к серверу с учетной записью, имеющей привилегии sysadmin на сервере SQL Server или экземпляре SQL Server, за которым нужно следить, и создайте в любом средстве запросов хранимую процедуру sp_blocker_pss80, код которой приведен ниже.
  2. Создайте файл сценария со следующим запросом, выполняющим хранимую процедуру в цикле. В качестве длительности задержки укажите от 5 до 60 секунд.
    WHILE 1=1BEGIN   EXEC master.dbo.sp_blocker_pss80   -- Или, для быстрого режима:    -- EXEC master.dbo.sp_blocker_pss80 @fast=1   -- Или, для режима кратковременной блокировки   -- EXEC master.dbo.sp_blocker_pss80 @latch=1   WAITFOR DELAY '00:00:15'ENDGO
  3. Выводимые этим сценарием данные особенно полезны при использовании вместе с информацией из журналов системного монитора Microsoft Windows NT и приложения SQL Profiler, поэтому рекомендуется создать сразу оба этих журнала. Сведения о том, какие события профайлера и системного монитора следует регистрировать и как интерпретировать результаты, см. в следующей статье базы знаний Майкрософт:
    224453 Проблемы с блокировками в SQL Server 7.0 или SQL Server 2000 и их разрешение (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
  4. Выполните сценарий, созданный на этапе 2, с помощью средства Isql.exe или Osql.exe или программы Sqlcmd в командной строке Windows на компьютере с экземпляром SQL Server, за которым необходимо наблюдать для предотвращения проблем с сетью при отключении средства запросов. Ниже приведен пример команды, которую можно использовать для запуска средства Osql.exe. В ней предполагается, что клиент запущен на компьютере с SQL Server, а файл сценария имеет имя Checkblk.sql. Не забудьте исправить параметр -S, заменив «сервер» именем сервера SQL Server (или выражением «имя_сервера\экземпляр», если наблюдение ведется за именованным экземпляром). Исправьте также параметр -i, заменив «checkblk.sql» путем к файлу сценария, созданному на этапе 2, и именем этого файла.
    osql -E -Sserver -icheckblk.sql -ocheckblk.out -w2000
    Другие параметры командной строки используются по следующим причинам:

    • Для предотвращения переноса строк в выходных файлах. Это сделано, чтобы облегчить чтение.
    • Для отправки вывода в файл (указанный с помощью параметра -o), а не на экран. Это сделано для того, чтобы собранные сведения можно было изучить даже при сбое в работе средства запросов.
Ниже приведен сценарий, создающий хранимую процедуру sp_blocker_pss80.
use masterGOif exists (select * from sysobjects where id = object_id('dbo.sp_blocker_pss80') and sysstat & 0xf = 4)   drop procedure dbo.sp_blocker_pss80GOcreate procedure dbo.sp_blocker_pss80 (@latch int = 0, @fast int = 1, @appname sysname='PSSDIAG')as -- Версия 17SP3if is_member('sysadmin')=0 begin  print 'Must be a member of the sysadmin group in order to run this procedure'  returnendset nocount onSET LANGUAGE 'us_english'declare @spid varchar(6)declare @blocked varchar(6)declare @time datetimedeclare @time2 datetimedeclare @dbname nvarchar(128)declare @status sql_variantdeclare @useraccess sql_variantset @time = getdate()declare @probclients table(spid smallint, ecid smallint, blocked smallint, waittype binary(2), dbid smallint,   ignore_app tinyint, primary key (blocked, spid, ecid))insert @probclients select spid, ecid, blocked, waittype, dbid,   case when convert(varchar(128),hostname) = @appname then 1 else 0 end   from master.dbo.sysprocesses where blocked!=0 or waittype != 0x0000if exists (select spid from @probclients where ignore_app != 1 or waittype != 0x020B)begin   set @time2 = getdate()   print ''   print '8.2 Start time: ' + convert(varchar(26), @time, 121) + ' ' + convert(varchar(12), datediff(ms,@time,@time2))   insert @probclients select distinct blocked, 0, 0, 0x0000, 0, 0 from @probclients      where blocked not in (select spid from @probclients) and blocked != 0   if (@fast = 1)   begin      print ''      print 'SYSPROCESSES ' + ISNULL (@@servername,'(null)') + ' ' + str(@@microsoftversion)      select spid, status, blocked, open_tran, waitresource, waittype,          waittime, cmd, lastwaittype, cpu, physical_io,         memusage, last_batch=convert(varchar(26), last_batch,121),         login_time=convert(varchar(26), login_time,121),net_address,         net_library, dbid, ecid, kpid, hostname, hostprocess,         loginame, program_name, nt_domain, nt_username, uid, sid,         sql_handle, stmt_start, stmt_end      from master.dbo.sysprocesses      where blocked!=0 or waittype != 0x0000         or spid in (select blocked from @probclients where blocked != 0)         or spid in (select spid from @probclients where blocked != 0)      print 'ESP ' + convert(varchar(12), datediff(ms,@time2,getdate()))       print ''      print 'SYSPROC FIRST PASS'      select spid, ecid, waittype from @probclients where waittype != 0x0000      if exists(select blocked from @probclients where blocked != 0)      begin         print 'Blocking via locks at ' + convert(varchar(26), @time, 121)         print ''         print 'SPIDs at the head of blocking chains'         select spid from @probclients            where blocked = 0 and spid in (select blocked from @probclients where spid != 0)         if @latch = 0         begin            print 'SYSLOCKINFO'            select @time2 = getdate()            select spid = convert (smallint, req_spid),               ecid = convert (smallint, req_ecid),               rsc_dbid As dbid,               rsc_objid As ObjId,               rsc_indid As IndId,               Type = case rsc_type when 1 then 'NUL'                                    when 2 then 'DB'                                    when 3 then 'FIL'                                    when 4 then 'IDX'                                    when 5 then 'TAB'                                    when 6 then 'PAG'                                    when 7 then 'KEY'                                    when 8 then 'EXT'                                    when 9 then 'RID'                                    when 10 then 'APP' end,               Resource = substring (rsc_text, 1, 16),               Mode = case req_mode + 1 when 1 then NULL                                        when 2 then 'Sch-S'                                        when 3 then 'Sch-M'                                        when 4 then 'S'                                        when 5 then 'U'                                        when 6 then 'X'                                        when 7 then 'IS'                                        when 8 then 'IU'                                        when 9 then 'IX'                                        when 10 then 'SIU'                                        when 11 then 'SIX'                                        when 12 then 'UIX'                                        when 13 then 'BU'                                        when 14 then 'RangeS-S'                                        when 15 then 'RangeS-U'                                        when 16 then 'RangeIn-Null'                                        when 17 then 'RangeIn-S'                                        when 18 then 'RangeIn-U'                                        when 19 then 'RangeIn-X'                                        when 20 then 'RangeX-S'                                        when 21 then 'RangeX-U'                                        when 22 then 'RangeX-X'end,               Status = case req_status when 1 then 'GRANT'                                        when 2 then 'CNVT'                                        when 3 then 'WAIT' end,               req_transactionID As TransID, req_transactionUOW As TransUOW            from master.dbo.syslockinfo s,               @probclients p            where p.spid = s.req_spid            print 'ESL ' + convert(varchar(12), datediff(ms,@time2,getdate()))          end -- кратковременная блокировка не задана      end      else         print 'No blocking via locks at ' + convert(varchar(26), @time, 121)      print ''   end  -- быстрый режим задан   else     begin  -- быстрый режим не задан      print ''      print 'SYSPROCESSES ' + ISNULL (@@servername,'(null)') + ' ' + str(@@microsoftversion)      select spid, status, blocked, open_tran, waitresource, waittype,          waittime, cmd, lastwaittype, cpu, physical_io,         memusage, last_batch=convert(varchar(26), last_batch,121),         login_time=convert(varchar(26), login_time,121),net_address,         net_library, dbid, ecid, kpid, hostname, hostprocess,         loginame, program_name, nt_domain, nt_username, uid, sid,         sql_handle, stmt_start, stmt_end      from master.dbo.sysprocesses      print 'ESP ' + convert(varchar(12), datediff(ms,@time2,getdate()))       print ''      print 'SYSPROC FIRST PASS'      select spid, ecid, waittype from @probclients where waittype != 0x0000      if exists(select blocked from @probclients where blocked != 0)      begin         print 'Blocking via locks at ' + convert(varchar(26), @time, 121)         print ''         print 'SPIDs at the head of blocking chains'         select spid from @probclients         where blocked = 0 and spid in (select blocked from @probclients where spid != 0)         if @latch = 0         begin            print 'SYSLOCKINFO'            select @time2 = getdate()            select spid = convert (smallint, req_spid),               ecid = convert (smallint, req_ecid),               rsc_dbid As dbid,               rsc_objid As ObjId,               rsc_indid As IndId,               Type = case rsc_type when 1 then 'NUL'                                    when 2 then 'DB'                                    when 3 then 'FIL'                                    when 4 then 'IDX'                                    when 5 then 'TAB'                                    when 6 then 'PAG'                                    when 7 then 'KEY'                                    when 8 then 'EXT'                                    when 9 then 'RID'                                    when 10 then 'APP' end,               Resource = substring (rsc_text, 1, 16),               Mode = case req_mode + 1 when 1 then NULL                                        when 2 then 'Sch-S'                                        when 3 then 'Sch-M'                                        when 4 then 'S'                                        when 5 then 'U'                                        when 6 then 'X'                                        when 7 then 'IS'                                        when 8 then 'IU'                                        when 9 then 'IX'                                        when 10 then 'SIU'                                        when 11 then 'SIX'                                        when 12 then 'UIX'                                        when 13 then 'BU'                                        when 14 then 'RangeS-S'                                        when 15 then 'RangeS-U'                                        when 16 then 'RangeIn-Null'                                        when 17 then 'RangeIn-S'                                        when 18 then 'RangeIn-U'                                        when 19 then 'RangeIn-X'                                        when 20 then 'RangeX-S'                                        when 21 then 'RangeX-U'                                        when 22 then 'RangeX-X'end,               Status = case req_status when 1 then 'GRANT'                                        when 2 then 'CNVT'                                        when 3 then 'WAIT' end,               req_transactionID As TransID, req_transactionUOW As TransUOW            from master.dbo.syslockinfo            print 'ESL ' + convert(varchar(12), datediff(ms,@time2,getdate()))          end -- кратковременная блокировка не задана      end      else          print 'No blocking via locks at ' + convert(varchar(26), @time, 121)      print ''   end -- быстрый режим не задан   print 'DBCC SQLPERF(WAITSTATS)'   dbcc sqlperf(waitstats)   Print ''   Print '*********************************************************************'   Print 'Print out DBCC Input buffer for all blocked or blocking spids.'   Print '*********************************************************************'   declare ibuffer cursor fast_forward for   select distinct cast (spid as varchar(6)) as spid   from @probclients   where (spid <> @@spid) and       ((blocked!=0 or (waittype != 0x0000 and ignore_app = 0))      or spid in (select blocked from @probclients where blocked != 0))   open ibuffer   fetch next from ibuffer into @spid   while (@@fetch_status != -1)   begin      print ''      print 'DBCC INPUTBUFFER FOR SPID ' + @spid      exec ('dbcc inputbuffer (' + @spid + ')')      fetch next from ibuffer into @spid   end   deallocate ibuffer   Print ''   Print '*******************************************************************************'   Print 'Print out DBCC OPENTRAN for active databases for all blocked or blocking spids.'   Print '*******************************************************************************'   declare ibuffer cursor fast_forward for   select distinct cast (dbid as varchar(6)) from @probclients   where dbid != 0   open ibuffer   fetch next from ibuffer into @spid   while (@@fetch_status != -1)   begin      print ''      set @dbname = db_name(@spid)      set @status = DATABASEPROPERTYEX(@dbname,'Status')      set @useraccess = DATABASEPROPERTYEX(@dbname,'UserAccess')      print 'DBCC OPENTRAN FOR DBID ' + @spid + ' ['+ @dbname + ']'      if @status = N'ONLINE' and @useraccess != N'SINGLE_USER'         dbcc opentran(@dbname)      else         print 'Skipped: Status=' + convert(nvarchar(128),@status)            + ' UserAccess=' + convert(nvarchar(128),@useraccess)      print ''      if @spid = '2' select @blocked = 'Y'      fetch next from ibuffer into @spid   end   deallocate ibuffer   if @blocked != 'Y'    begin      print ''      print 'DBCC OPENTRAN FOR DBID  2 [tempdb]'      dbcc opentran ('tempdb')   end   print 'End time: ' + convert(varchar(26), getdate(), 121)end -- всеelse  print '8 No Waittypes: ' + convert(varchar(26), @time, 121) + ' '      + convert(varchar(12), datediff(ms,@time,getdate())) + ' ' + ISNULL (@@servername,'(null)')GO    create procedure dbo.sp_blocker_pss80 (@latch int = 0, @fast int = 1, @appname sysname='PSSDIAG')as -- Версия 17if is_member('sysadmin')=0 begin  print 'Must be a member of the sysadmin group in order to run this procedure'  returnendset nocount ondeclare @spid varchar(6)declare @blocked varchar(6)declare @time datetimedeclare @time2 datetimedeclare @dbname nvarchar(128)declare @status sql_variantdeclare @useraccess sql_variantset @time = getdate()declare @probclients table(spid smallint, ecid smallint, blocked smallint, waittype binary(2), dbid smallint,   ignore_app tinyint, primary key (blocked, spid, ecid))insert @probclients select spid, ecid, blocked, waittype, dbid,   case when convert(varchar(128),hostname) = @appname then 1 else 0 end   from master.dbo.sysprocesses where blocked!=0 or waittype != 0x0000if exists (select spid from @probclients where ignore_app != 1 or waittype != 0x020B)begin   set @time2 = getdate()   print ''   print '8 Start time: ' + convert(varchar(26), @time, 121) + ' ' + convert(varchar(12), datediff(ms,@time,@time2))   insert @probclients select distinct blocked, 0, 0, 0x0000, 0, 0 from @probclients      where blocked not in (select spid from @probclients) and blocked != 0   if (@fast = 1)   begin      print ''      print 'SYSPROCESSES ' + ISNULL (@@servername,'(null)') + ' ' + str(@@microsoftversion)      select spid, status, blocked, open_tran, waitresource, waittype,          waittime, cmd, lastwaittype, cpu, physical_io,         memusage,last_batch=convert(varchar(26), last_batch,121),         login_time=convert(varchar(26), login_time,121), net_address,         net_library, dbid, ecid, kpid, hostname, hostprocess,         loginame, program_name, nt_domain, nt_username, uid, sid      from master.dbo.sysprocesses      where blocked!=0 or waittype != 0x0000         or spid in (select blocked from @probclients where blocked != 0)         or spid in (select spid from @probclients where waittype != 0x0000)      print 'ESP ' + convert(varchar(12), datediff(ms,@time2,getdate()))       print ''      print 'SYSPROC FIRST PASS'      select spid, ecid, waittype from @probclients where waittype != 0x0000      if exists(select blocked from @probclients where blocked != 0)      begin         print 'Blocking via locks at ' + convert(varchar(26), @time, 121)         print ''         print 'SPIDs at the head of blocking chains'         select spid from @probclients            where blocked = 0 and spid in (select blocked from @probclients where spid != 0)         if @latch = 0         begin            print 'SYSLOCKINFO'            select @time2 = getdate()            select spid = convert (smallint, req_spid),               ecid = convert (smallint, req_ecid),               rsc_dbid As dbid,               rsc_objid As ObjId,               rsc_indid As IndId,               Type = case rsc_type when 1 then 'NUL'                                    when 2 then 'DB'                                    when 3 then 'FIL'                                    when 4 then 'IDX'                                    when 5 then 'TAB'                                    when 6 then 'PAG'                                    when 7 then 'KEY'                                    when 8 then 'EXT'                                    when 9 then 'RID'                                    when 10 then 'APP' end,               Resource = substring (rsc_text, 1, 16),               Mode = case req_mode + 1 when 1 then NULL                                        when 2 then 'Sch-S'                                        when 3 then 'Sch-M'                                        when 4 then 'S'                                        when 5 then 'U'                                        when 6 then 'X'                                        when 7 then 'IS'                                        when 8 then 'IU'                                        when 9 then 'IX'                                        when 10 then 'SIU'                                        when 11 then 'SIX'                                        when 12 then 'UIX'                                        when 13 then 'BU'                                        when 14 then 'RangeS-S'                                        when 15 then 'RangeS-U'                                        when 16 then 'RangeIn-Null'                                        when 17 then 'RangeIn-S'                                        when 18 then 'RangeIn-U'                                        when 19 then 'RangeIn-X'                                        when 20 then 'RangeX-S'                                        when 21 then 'RangeX-U'                                        when 22 then 'RangeX-X'end,               Status = case req_status when 1 then 'GRANT'                                        when 2 then 'CNVT'                                        when 3 then 'WAIT' end,               req_transactionID As TransID, req_transactionUOW As TransUOW            from master.dbo.syslockinfo s,               @probclients p            where p.spid = s.req_spid            print 'ESL ' + convert(varchar(12), datediff(ms,@time2,getdate()))          end -- режим кратковременной блокировки не задан      end      else         print 'No blocking via locks at ' + convert(varchar(26), @time, 121)      print ''   end  -- быстрый режим задан   else   begin  -- быстрый режим не задан      print ''      print 'SYSPROCESSES ' + ISNULL (@@servername,'(null)') + ' ' + str(@@microsoftversion)      select spid, status, blocked, open_tran, waitresource, waittype,          waittime, cmd, lastwaittype, cpu, physical_io,         memusage,last_batch=convert(varchar(26), last_batch,121),         login_time=convert(varchar(26), login_time,121), net_address,         net_library, dbid, ecid, kpid, hostname, hostprocess,         loginame, program_name, nt_domain, nt_username, uid, sid      from master.dbo.sysprocesses      print 'ESP ' + convert(varchar(12), datediff(ms,@time2,getdate()))       print ''      print 'SYSPROC FIRST PASS'      select spid, ecid, waittype from @probclients where waittype != 0x0000      if exists(select blocked from @probclients where blocked != 0)      begin         print 'Blocking via locks at ' + convert(varchar(26), @time, 121)         print ''         print 'SPIDs at the head of blocking chains'         select spid from @probclients         where blocked = 0 and spid in (select blocked from @probclients where spid != 0)         if @latch = 0         begin            print 'SYSLOCKINFO'            select @time2 = getdate()            select spid = convert (smallint, req_spid),               ecid = convert (smallint, req_ecid),               rsc_dbid As dbid,               rsc_objid As ObjId,               rsc_indid As IndId,               Type = case rsc_type when 1 then 'NUL'                                    when 2 then 'DB'                                    when 3 then 'FIL'                                    when 4 then 'IDX'                                    when 5 then 'TAB'                                    when 6 then 'PAG'                                    when 7 then 'KEY'                                    when 8 then 'EXT'                                    when 9 then 'RID'                                    when 10 then 'APP' end,               Resource = substring (rsc_text, 1, 16),               Mode = case req_mode + 1 when 1 then NULL                                        when 2 then 'Sch-S'                                        when 3 then 'Sch-M'                                        when 4 then 'S'                                        when 5 then 'U'                                        when 6 then 'X'                                        when 7 then 'IS'                                        when 8 then 'IU'                                        when 9 then 'IX'                                        when 10 then 'SIU'                                        when 11 then 'SIX'                                        when 12 then 'UIX'                                        when 13 then 'BU'                                        when 14 then 'RangeS-S'                                        when 15 then 'RangeS-U'                                        when 16 then 'RangeIn-Null'                                        when 17 then 'RangeIn-S'                                        when 18 then 'RangeIn-U'                                        when 19 then 'RangeIn-X'                                        when 20 then 'RangeX-S'                                        when 21 then 'RangeX-U'                                        when 22 then 'RangeX-X'end,               Status = case req_status when 1 then 'GRANT'                                        when 2 then 'CNVT'                                        when 3 then 'WAIT' end,               req_transactionID As TransID, req_transactionUOW As TransUOW            from master.dbo.syslockinfo            print 'ESL ' + convert(varchar(12), datediff(ms,@time2,getdate()))          end -- режим кратковременной блокировки не задан      end      else        print 'No blocking via locks at ' + convert(varchar(26), @time, 121)      print ''   end -- быстрый режим не задан   print 'DBCC SQLPERF(WAITSTATS)'   dbcc sqlperf(waitstats)   Print ''   Print '*********************************************************************'   Print 'Print out DBCC Input buffer for all blocked or blocking spids.'   Print '*********************************************************************'   declare ibuffer cursor fast_forward for   select distinct cast (spid as varchar(6)) as spid   from @probclients   where (spid <> @@spid) and       ((blocked!=0 or (waittype != 0x0000 and ignore_app = 0))      or spid in (select blocked from @probclients where blocked != 0))   open ibuffer   fetch next from ibuffer into @spid   while (@@fetch_status != -1)   begin      print ''      print 'DBCC INPUTBUFFER FOR SPID ' + @spid      exec ('dbcc inputbuffer (' + @spid + ')')      fetch next from ibuffer into @spid   end   deallocate ibuffer   Print ''   Print '*******************************************************************************'   Print 'Print out DBCC OPENTRAN for active databases for all blocked or blocking spids.'   Print '*******************************************************************************'   declare ibuffer cursor fast_forward for   select distinct cast (dbid as varchar(6)) from @probclients   where dbid != 0   open ibuffer   fetch next from ibuffer into @spid   while (@@fetch_status != -1)   begin      print ''      set @dbname = db_name(@spid)      set @status = DATABASEPROPERTYEX(@dbname,'Status')      set @useraccess = DATABASEPROPERTYEX(@dbname,'UserAccess')      print 'DBCC OPENTRAN FOR DBID ' + @spid + ' ['+ @dbname + ']'      if @status = N'ONLINE' and @useraccess != N'SINGLE_USER'         dbcc opentran(@dbname)      else         print 'Skipped: Status=' + convert(nvarchar(128),@status)            + ' UserAccess=' + convert(nvarchar(128),@useraccess)      print ''      if @spid = '2' select @blocked = 'Y'      fetch next from ibuffer into @spid   end   deallocate ibuffer   if @blocked != 'Y'    begin      print ''      print 'DBCC OPENTRAN FOR DBID  2 [tempdb]'      dbcc opentran ('tempdb')   end   print 'End time: ' + convert(varchar(26), getdate(), 121)end -- всеelse  print '8 No Waittypes: ' + convert(varchar(26), @time, 121) + ' '     + convert(varchar(12), datediff(ms,@time,getdate())) + ' ' + ISNULL (@@servername,'(null)')GO    
Свойства

Номер статьи: 271509 — последний просмотр: 05/10/2011 15:21:00 — редакция: 15.0

  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • kbsqlmanagementtools kbhowto kbinfo KB271509
Отзывы и предложения
document.write("