Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 7 [8] 9   вперед  Ctrl      все
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
KtaK
Member

Откуда: russia
Сообщений: 24
Zelius
KtaK
не получается подключиться к 2005 серверу,
как можно вылечить?

Напиши на почту, пришли сообщение об ошибке - посмотрю, в чем дело.

вылечилось установкой таймаута 10
причем такая проблема наблюдается только если запускать в вин7, в винХР и 2003 с настройками по умолчанию работает
9 мар 09, 12:48    [6902065]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
Denis.NET
Guest
Zelius,

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

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

Но было бы просто ГЕНИАЛЬНО, если бы была коротенькая выжимка из этой утилиты, которая при запуске с командной строкой типа "/dbname isl_2009 /excepthost <Имя Компьютера>" закрывала все подключения к указанной базе кроме указанного компьютера. Тогда бы я мог запускать эту мини-версию из своего 1С-вского АРМа
13 мар 09, 09:35    [6920744]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
KtaK
Member

Откуда: russia
Сообщений: 24
сорри за офттопик
Denis.NET, я сделал процедурину, и пускаю ее перед выполнением системных работ с базой

-- Удаление всех лишний процессов на 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 (если оно вообще нужно)
13 мар 09, 09:45    [6920787]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
Denis.NET
Guest
KtaK,
Спасибо за подсказку, я раньше скрипты для SQL-сервака не писал, но насколько я понял все что мне нужно это

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 ?
13 мар 09, 10:20    [6921006]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
KtaK
Member

Откуда: russia
Сообщений: 24
тебе нужно там исправить имя базы и параметры, по которым надо фильтровать процессы.
и запустить как обычный запрос (query)
13 мар 09, 10:24    [6921045]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
iap
Member

Откуда: Москва
Сообщений: 47107
Это какая-то фигня получается! Заменить NOT LIKE на LIKE - это круто!
Denis.NET
KtaK,
Спасибо за подсказку, я раньше скрипты для SQL-сервака не писал, но насколько я понял все что мне нужно это

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 ?
13 мар 09, 10:26    [6921062]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
KtaK
Member

Откуда: russia
Сообщений: 24
Denis.NET, кстати да, я что то не вчитался что ты уже всё там поменял.
зачем ты так сделал?:)

можно вообще все эти условия нафиг убрать, тогда кильнутся все процессы, в том числе и всякие системные, не знаю насколько это критично)
13 мар 09, 10:31    [6921111]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
Denis.NET
Guest
iap,

коменты не поменял :) мне килять надо только программу 1CV7 с командой AWAITING COMMAND и статусом sleeping
13 мар 09, 10:32    [6921125]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
Denis.NET
Guest
Я только не понимаю смысл строчки SELECT @DBName перед объявлением KillLeftProcesses

[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)
13 мар 09, 13:56    [6922952]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
KtaK
Member

Откуда: russia
Сообщений: 24
чтобы килять подключения только к конкретной базе
13 мар 09, 14:02    [6923028]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1552
автор
Denis.NET, KtaK
Господа, предлагаю перенести Ваше обсуждение в другое место. Спасибо.
13 мар 09, 14:05    [6923063]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
KtaK
Member

Откуда: russia
Сообщений: 24
вопрос исчерпан, я думаю этот оффтопик надо стереть
13 мар 09, 14:23    [6923276]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
gang
Member

Откуда:
Сообщений: 1394
для того чтобы отрубить все коннекты к БД достаточно сделать так:
ALTER DATABASE MyDBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE MyDBName SET MULTI_USER WITH ROLLBACK IMMEDIATE
25 мар 09, 15:39    [6974032]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
Филиппка
Member

Откуда:
Сообщений: 6
Доброго дня.
Юзаю MSSQL Blocks больше 2х лет.
Незаменимая штука - автору респект.
Но вот поставил MSSQL2008.
Не разбирался пока в сис. вьюшках - где там и чё теперь поменялось.
Но MSSQL Blocks перестал работать.
26 мар 09, 19:12    [6981234]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1552
Филиппка
Доброго дня.
Юзаю MSSQL Blocks больше 2х лет.
Незаменимая штука - автору респект.
Но вот поставил MSSQL2008.
Не разбирался пока в сис. вьюшках - где там и чё теперь поменялось.
Но MSSQL Blocks перестал работать.

Надо содержимое файла detect.sql поменять на следующий код
/*
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
26 мар 09, 19:20    [6981251]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
nibbles
Member

Откуда: Moscow
Сообщений: 2378
Утилита полезная, спасибо!
Предложения:
1. Добавить в меню пункт "View on top"
2. Добавить в настройки пункт "Запускать при следующем входе в систему"
3. Не срабатывает меню "?/Languages"
6 апр 09, 11:47    [7025545]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1552
nibbles
Утилита полезная, спасибо!
Предложения:
1. Добавить в меню пункт "View on top"
2. Добавить в настройки пункт "Запускать при следующем входе в систему"
3. Не срабатывает меню "?/Languages"

1. Она достаточно большая, что бы торчать все время на экране, а если есть блокировки, то в трее покажется значок.
2. Хмм... Точно надо? А то как тут верно заметили - для старых сервер, ниже 2000ого, идет приличная нагрузка на сервер при постоянной работе.
3. Убедитесь, что в установочной папке есть файл .lng
8 апр 09, 13:31    [7038527]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
AndrF
Member

Откуда:
Сообщений: 2195
Иногда почему-то теряется SQLBlock теряет коннект (ну это ладно - может сбой по нашей удаленной сетке), но и восстановить он его не может, хотя пытается - см приложенный рисунок. В общем, пока дважды не кликнешь на сервере и не нажмешь в появившемся окошке ОК - тогда соединение воостанавливается нормально.

К сообщению приложен файл. Размер - 0Kb
11 апр 09, 12:39    [7052749]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1552
AndrF
Иногда почему-то теряется SQLBlock теряет коннект (ну это ладно - может сбой по нашей удаленной сетке), но и восстановить он его не может, хотя пытается - см приложенный рисунок. В общем, пока дважды не кликнешь на сервере и не нажмешь в появившемся окошке ОК - тогда соединение воостанавливается нормально.


Исправил, в ближайшее время выложу. Могу выслать экзешник на тест.
13 апр 09, 12:49    [7056574]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1552
Выложил новую версию 1.8.18.98 (15.04.2009)

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

Лежит там же

С уважением, Князев Константин
15 апр 09, 16:30    [7068580]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
AndrF
Member

Откуда:
Сообщений: 2195
Пожелание: сделать чтобы программа не закрывалась, а сворачивалась в
трей при нажатии на крестик в правом верхнем углу окна. Ну а само
завершение программы было через меню или ALT+F4 с подтверждением.

Это убережет от случайного закрытия программы - иногда случайно
прибиваешь ее, а реально хочется чтобы она повисела и поотслеживала
блокировки...
17 апр 09, 12:47    [7078584]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
проходящий.
Guest
AndrF
Пожелание: сделать чтобы программа не закрывалась, а сворачивалась в
трей при нажатии на крестик в правом верхнем углу окна. Ну а само
завершение программы было через меню или ALT+F4 с подтверждением.

Это убережет от случайного закрытия программы - иногда случайно
прибиваешь ее, а реально хочется чтобы она повисела и поотслеживала
блокировки...
А Вы настроечки проги смотрели? Внимательно?
17 апр 09, 12:52    [7078617]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
AndrF
Member

Откуда:
Сообщений: 2195
проходящий.
А Вы настроечки проги смотрели? Внимательно?


Вот спасибо-то. Действительно там и нашел ;)
17 апр 09, 13:00    [7078699]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
AndrF
Member

Откуда:
Сообщений: 2195
Хотелось бы чтобы в Истории блокировок они были бы сгруппированы по серверам...
17 апр 09, 13:16    [7078803]     Ответить | Цитировать Сообщить модератору
 Re: Небольшая самодельная тулза для отображения блокировок...  [new]
PokeMan
Member

Откуда: MOSKAU
Сообщений: 312
Поставил последнюю версию.
При первом соединении появляется ошибка: ProcessesAC:Missing ComandText property ... и т.д.
Далее соединение идет нормально.

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

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


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

Было бы неплохо вынести параметр "Включить/Выключить" в контекстное меню списка серверов.

К сообщению приложен файл. Размер - 0Kb
15 сен 09, 18:47    [7663713]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 6 7 [8] 9   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить