powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Небольшая самодельная тулза для отображения блокировок...
25 сообщений из 225, страница 8 из 9
Небольшая самодельная тулза для отображения блокировок...
    #35858104
KtaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZeliusKtaKне получается подключиться к 2005 серверу,
как можно вылечить?
Напиши на почту, пришли сообщение об ошибке - посмотрю, в чем дело.
вылечилось установкой таймаута 10
причем такая проблема наблюдается только если запускать в вин7, в винХР и 2003 с настройками по умолчанию работает
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35866462
Denis.NET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zelius,

Я обновляю базы 1С по несколько раз в день и допустим пара-тройка человек ушли пить чай и никак до них не дозвониться. Мне приходиться каждый раз заходить на SQL-сервак, запускать консоль и убивать подключения.

Мог бы ты сделать пакетное закрытие подключений? - это было бы замечательно :)

Но было бы просто ГЕНИАЛЬНО, если бы была коротенькая выжимка из этой утилиты, которая при запуске с командной строкой типа "/dbname isl_2009 /excepthost <Имя Компьютера>" закрывала все подключения к указанной базе кроме указанного компьютера. Тогда бы я мог запускать эту мини-версию из своего 1С-вского АРМа
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35866485
KtaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сорри за офттопик
Denis.NET, я сделал процедурину, и пускаю ее перед выполнением системных работ с базой

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
-- Удаление всех лишний процессов на SQL сервере.
-- Выполнять перед обслуживанием базы.
-- KtaK

DECLARE @SPID           smallint,           -- ID текущего процесса
        @DBName         VARCHAR(  128  ),    -- имя базы
        @loginame       VARCHAR(  128  ), 
        @hostname       VARCHAR(  128  ), 
        @program_name   VARCHAR(  128  ), 
        @status         VARCHAR(  128  ), 
        @cmd            VARCHAR(  128  ), 
        @gate_cmd       VARCHAR( 500 ),
        @message        VARCHAR( 500 ),
        @subject        VARCHAR( 500 ),
        @recipients     VARCHAR( 500 )

CREATE TABLE ##DroppedProcesses
(  id_com     DSIDENTIFIER IDENTITY,
   comment    varchar( 500 )
)

SELECT @DBName = 'mybasename'

-- Пройдемся по всем процессам, отбросив системные
DECLARE KillLeftProcesses CURSOR FOR
select spid, LTRIM(RTRIM(loginame)), LTRIM(RTRIM(hostname)), LTRIM(RTRIM(program_name)), LTRIM(RTRIM(status)), LTRIM(RTRIM(cmd))
  from master..sysprocesses
 where dbid = db_id(@DBName)
   and hostname not in ('serv1', 'serv2', 'serv3', 'serv4') -- хосты, с которых нельзя килять
   and (loginame not like '%SQLAdmin%') -- логины, которых нельзя килять
   and (program_name not like 'SQLBlocks%') -- программы, которые нельзя килять
   and (cmd not like 'LAZY WRITER%' and cmd not like 'LOG WRITER%' and cmd not like 'TASK MANAGER%' and cmd not like 'SIGNAL HANDLER%' and cmd not like 'LOCK MONITOR%'and cmd not like 'CHECKPOINT SLEEP%') -- команды, которые нельзя килять
 order by hostname, loginame

OPEN KillLeftProcesses
FETCH NEXT FROM KillLeftProcesses INTO @SPID, @loginame, @hostname, @program_name, @status, @cmd
WHILE @@FETCH_STATUS =  0 
BEGIN
  exec ('kill ' + @SPID) -- убьем текущий процесс 
--  PRINT 'KILLED PROCESS, SPID = ' + CONVERT(nvarchar(4), @SPID) + ', LOGIN =  ' + RTRIM(@loginame)  + ', HOST = ' +  RTRIM(@hostname)  + ', PROG = ' +  RTRIM(@program_name)  + ', STATUS = ' +  @status  + ', CMD =  ' +  @cmd
  INSERT INTO ##DroppedProcesses (comment)
  VALUES ('KILLED by KtaK, SPID = ' + CONVERT(nvarchar( 4 ), @SPID) + ', LOGIN =  ' + RTRIM(@loginame)  + ',	HOST = ' +  RTRIM(@hostname)  + ', PROG = ' +  RTRIM(@program_name)  + ', STATUS = ' +  @status  + ', CMD =  ' +  @cmd)
  
  FETCH NEXT FROM KillLeftProcesses INTO @SPID, @loginame, @hostname, @program_name, @status, @cmd
END
CLOSE KillLeftProcesses 
DEALLOCATE KillLeftProcesses

-- Отправим письмо с инфой об убитых процессах
  SET @gate_cmd = 'select comment from ##DroppedProcesses'
  SET @message = 'В приложении - убитые перед регламентными операциями, процессы'
  SET @subject = 'MS SQL Reports. Killed users.'
  SET @recipients = 'ktak@blabla.ru'
  EXEC msdb..sp_send_dbmail 
       @profile_name = 'default'
      ,@recipients = @recipients
      ,@subject = @subject
      ,@body = @message
      ,@body_format = 'TEXT'
      ,@query = @gate_cmd
      ,@execute_query_database = @DBName
      ,@attach_query_result_as_file  = 'TRUE'
      ,@query_result_header =  1 
      ,@query_result_width =  1000 

DROP TABLE ##DroppedProcesses

это работает и в 2000 и в 2005, в 2000 только надо пользоваться master..xp_sendmail (если оно вообще нужно)
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35866598
Denis.NET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KtaK,
Спасибо за подсказку, я раньше скрипты для SQL-сервака не писал, но насколько я понял все что мне нужно это

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
DECLARE @SPID           smallint,           -- ID текущего процесса
        @DBName         VARCHAR(  128  ),    -- имя базы
        @loginame       VARCHAR(  128  ), 
        @hostname       VARCHAR(  128  ), 
        @program_name   VARCHAR(  128  ), 
        @status         VARCHAR(  128  ), 
        @cmd            VARCHAR(  128  ), 
        @gate_cmd       VARCHAR( 500 ),
        @message        VARCHAR( 500 ),
        @subject        VARCHAR( 500 ),
        @recipients     VARCHAR( 500 )

CREATE TABLE ##DroppedProcesses
(  id_com     DSIDENTIFIER IDENTITY,
   comment    varchar( 500 )
)

SELECT @DBName = 'basename'

-- Пройдемся по всем процессам, отбросив системные
DECLARE KillLeftProcesses CURSOR FOR
select spid, LTRIM(RTRIM(hostname)), LTRIM(RTRIM(program_name)), LTRIM(RTRIM(status)), LTRIM(RTRIM(cmd))
  from master..sysprocesses
 where dbid = db_id(@DBName)
   and hostname not in ('Admin1C') -- хосты, с которых нельзя килять
   and program_name like '1CV7' -- программы, которые нельзя килять
   and cmd like 'AWAITING COMMAND'  -- команды, которые нельзя килять
   and status like 'sleeping'  -- команды, которые нельзя килять
 order by hostname

OPEN KillLeftProcesses
FETCH NEXT FROM KillLeftProcesses INTO @SPID
WHILE @@FETCH_STATUS =  0 
BEGIN
  exec ('kill ' + @SPID) -- убьем текущий процесс 
  FETCH NEXT FROM KillLeftProcesses INTO @SPID
END
CLOSE KillLeftProcesses 
DEALLOCATE KillLeftProcesses

C SQL-ем раньше работал только из 1С через ADO.Command ADO.RecordSet и ADO.Connection, Можно ли такой вот запрос выполнить через ADO.Command ?
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35866617
KtaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тебе нужно там исправить имя базы и параметры, по которым надо фильтровать процессы.
и запустить как обычный запрос (query)
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35866628
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это какая-то фигня получается! Заменить NOT LIKE на LIKE - это круто!Denis.NETKtaK,
Спасибо за подсказку, я раньше скрипты для SQL-сервака не писал, но насколько я понял все что мне нужно это

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
DECLARE @SPID           smallint,           -- ID текущего процесса
        @DBName         VARCHAR(  128  ),    -- имя базы
        @loginame       VARCHAR(  128  ), 
        @hostname       VARCHAR(  128  ), 
        @program_name   VARCHAR(  128  ), 
        @status         VARCHAR(  128  ), 
        @cmd            VARCHAR(  128  ), 
        @gate_cmd       VARCHAR( 500 ),
        @message        VARCHAR( 500 ),
        @subject        VARCHAR( 500 ),
        @recipients     VARCHAR( 500 )

CREATE TABLE ##DroppedProcesses
(  id_com     DSIDENTIFIER IDENTITY,
   comment    varchar( 500 )
)

SELECT @DBName = 'basename'

-- Пройдемся по всем процессам, отбросив системные
DECLARE KillLeftProcesses CURSOR FOR
select spid, LTRIM(RTRIM(hostname)), LTRIM(RTRIM(program_name)), LTRIM(RTRIM(status)), LTRIM(RTRIM(cmd))
  from master..sysprocesses
 where dbid = db_id(@DBName)
   and hostname not in ('Admin1C') -- хосты, с которых нельзя килять
   and program_name like '1CV7' -- программы, которые нельзя килять
   and cmd like 'AWAITING COMMAND'  -- команды, которые нельзя килять
   and status like 'sleeping'  -- команды, которые нельзя килять
 order by hostname

OPEN KillLeftProcesses
FETCH NEXT FROM KillLeftProcesses INTO @SPID
WHILE @@FETCH_STATUS =  0 
BEGIN
  exec ('kill ' + @SPID) -- убьем текущий процесс 
  FETCH NEXT FROM KillLeftProcesses INTO @SPID
END
CLOSE KillLeftProcesses 
DEALLOCATE KillLeftProcesses

C SQL-ем раньше работал только из 1С через ADO.Command ADO.RecordSet и ADO.Connection, Можно ли такой вот запрос выполнить через ADO.Command ?
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35866642
KtaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis.NET, кстати да, я что то не вчитался что ты уже всё там поменял.
зачем ты так сделал?:)

можно вообще все эти условия нафиг убрать, тогда кильнутся все процессы, в том числе и всякие системные, не знаю насколько это критично)
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35866646
Denis.NET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,

коменты не поменял :) мне килять надо только программу 1CV7 с командой AWAITING COMMAND и статусом sleeping
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35867471
Denis.NET
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я только не понимаю смысл строчки SELECT @DBName перед объявлением KillLeftProcesses

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
[fix]SELECT @DBName = 'basename'[/fix]

-- Пройдемся по всем процессам, отбросив системные
DECLARE KillLeftProcesses CURSOR FOR
select spid, LTRIM(RTRIM(hostname)), LTRIM(RTRIM(program_name)), LTRIM(RTRIM(status)), LTRIM(RTRIM(cmd))
  from master..sysprocesses
 where dbid = db_id(@DBName)
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35867501
KtaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чтобы килять подключения только к конкретной базе
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35867513
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторDenis.NET, KtaKГоспода, предлагаю перенести Ваше обсуждение в другое место. Спасибо.
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35867576
KtaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопрос исчерпан, я думаю этот оффтопик надо стереть
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35891194
Фотография gang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для того чтобы отрубить все коннекты к БД достаточно сделать так:
Код: plaintext
1.
2.
3.
ALTER DATABASE MyDBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE MyDBName SET MULTI_USER WITH ROLLBACK IMMEDIATE
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35894876
Филиппка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня.
Юзаю MSSQL Blocks больше 2х лет.
Незаменимая штука - автору респект.
Но вот поставил MSSQL2008.
Не разбирался пока в сис. вьюшках - где там и чё теперь поменялось.
Но MSSQL Blocks перестал работать.
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35894886
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппкаДоброго дня.
Юзаю MSSQL Blocks больше 2х лет.
Незаменимая штука - автору респект.
Но вот поставил MSSQL2008.
Не разбирался пока в сис. вьюшках - где там и чё теперь поменялось.
Но MSSQL Blocks перестал работать.
Надо содержимое файла detect.sql поменять на следующий код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
/*
Field names should must be unchangable!!!
*/
select
	IsSysAdmin, CmptLevel,
	case
		when CmptLevel =  100  then '2005.sql'
		when CmptLevel =  90  then '2005.sql'
		when CmptLevel =  80  then '2000.sql'
		else 'legacy.sql'
	end as QueryFileName
	
from
	(select IS_SRVROLEMEMBER('sysadmin') as IsSysAdmin, 
		(select cmptlevel from master.dbo.sysdatabases where name = 'master') as CmptLevel,
		(select id from master.dbo.sysobjects where name = 'fn_get_sql' ) as Is_fn_get_sql
	) as A
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35913976
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Утилита полезная, спасибо!
Предложения:
1. Добавить в меню пункт "View on top"
2. Добавить в настройки пункт "Запускать при следующем входе в систему"
3. Не срабатывает меню "?/Languages"
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35919824
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nibblesУтилита полезная, спасибо!
Предложения:
1. Добавить в меню пункт "View on top"
2. Добавить в настройки пункт "Запускать при следующем входе в систему"
3. Не срабатывает меню "?/Languages"
1. Она достаточно большая, что бы торчать все время на экране, а если есть блокировки, то в трее покажется значок.
2. Хмм... Точно надо? А то как тут верно заметили - для старых сервер, ниже 2000ого, идет приличная нагрузка на сервер при постоянной работе.
3. Убедитесь, что в установочной папке есть файл .lng
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35926201
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иногда почему-то теряется SQLBlock теряет коннект (ну это ладно - может сбой по нашей удаленной сетке), но и восстановить он его не может, хотя пытается - см приложенный рисунок. В общем, пока дважды не кликнешь на сервере и не нажмешь в появившемся окошке ОК - тогда соединение воостанавливается нормально.
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35928078
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrFИногда почему-то теряется SQLBlock теряет коннект (ну это ладно - может сбой по нашей удаленной сетке), но и восстановить он его не может, хотя пытается - см приложенный рисунок. В общем, пока дважды не кликнешь на сервере и не нажмешь в появившемся окошке ОК - тогда соединение воостанавливается нормально.

Исправил, в ближайшее время выложу. Могу выслать экзешник на тест.
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35934010
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выложил новую версию 1.8.18.98 (15.04.2009)

* Добавлена автоматическая проверка новых версий.
* Добавлена функция Поверх всех окон.
* Добавлена функция автоматического пуска при запуске Windows.
* Исправлена ошибка невозможности восстановления соединения при его потере.
* Исправлен скрипт для определения MSSQL 2008 сервера.
* Добавлен языковой файл в инсталятор.

Лежит там же

С уважением, Князев Константин
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35938422
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожелание: сделать чтобы программа не закрывалась, а сворачивалась в
трей при нажатии на крестик в правом верхнем углу окна. Ну а само
завершение программы было через меню или ALT+F4 с подтверждением.

Это убережет от случайного закрытия программы - иногда случайно
прибиваешь ее, а реально хочется чтобы она повисела и поотслеживала
блокировки...
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35938435
AndrFПожелание: сделать чтобы программа не закрывалась, а сворачивалась в
трей при нажатии на крестик в правом верхнем углу окна. Ну а само
завершение программы было через меню или ALT+F4 с подтверждением.

Это убережет от случайного закрытия программы - иногда случайно
прибиваешь ее, а реально хочется чтобы она повисела и поотслеживала
блокировки...А Вы настроечки проги смотрели? Внимательно?
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35938467
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.А Вы настроечки проги смотрели? Внимательно?

Вот спасибо-то. Действительно там и нашел ;)
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #35938508
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось бы чтобы в Истории блокировок они были бы сгруппированы по серверам...
...
Рейтинг: 0 / 0
Небольшая самодельная тулза для отображения блокировок...
    #36197614
Фотография PokeMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставил последнюю версию.
При первом соединении появляется ошибка: ProcessesAC:Missing ComandText property ... и т.д.
Далее соединение идет нормально.

скрин см. в приложении.

Версия серверов 2005/2008
Версия программы 1.8.18.98


--------------------------------------

Было бы неплохо вынести параметр "Включить/Выключить" в контекстное меню списка серверов.
...
Рейтинг: 0 / 0
25 сообщений из 225, страница 8 из 9
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Небольшая самодельная тулза для отображения блокировок...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]