Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как сразу убить несколько конектов к базе  [new]
hemdall
Member

Откуда:
Сообщений: 10
така ситуация
надо скинуть с базу все коннекты, а их более 400!!! в активити мониторе можно скинуть только один коннект за раз, выдилить несколько коннектов неполучается :(
может ктонибудь знает способ как сразу все (или несколько) коннектов сбросить?
может есть скрип какой-нибудь где можно перечислить несколько ID-запросов или указать логин юзера, чтоб все коннекты с бызы сбросить?
SQL Server 2005
20 июн 12, 11:27    [12744193]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
hemdall, можно перевести базу в offline
20 июн 12, 11:29    [12744216]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
Glory
Member

Откуда:
Сообщений: 104751
ALTER DATABASE AdventureWorks2008R2
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
20 июн 12, 11:30    [12744232]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
Jaffar
Member

Откуда:
Сообщений: 633
вот и все.
declare @SQL varchar(max)
set @SQL = ''
select @SQL = @SQL + 'kill '+cast(spid as varchar(32))+char(13)+char(10)
from sys.sysprocesses sp with(nolock)
where
		spid != @@SPID -- ваш коннект
--print @SQL
exec (@SQL)
20 июн 12, 12:01    [12744616]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Jaffar
вот и все.
declare @SQL varchar(max)
set @SQL = ''
select @SQL = @SQL + 'kill '+cast(spid as varchar(32))+char(13)+char(10)
from sys.sysprocesses sp with(nolock)
where
		spid != @@SPID -- ваш коннект
--print @SQL
exec (@SQL)
А они все возьми и назад ломанись.
20 июн 12, 12:03    [12744635]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
hemdall
Member

Откуда:
Сообщений: 10
Shakill
автор
hemdall, можно перевести базу в offline

об этом я не подумал ))

Glory
Спасибо!

а как скинуть с базы коннекты одного определенного юзера? так чтобы другие коннекты остались
20 июн 12, 12:03    [12744639]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
Glory
Member

Откуда:
Сообщений: 104751
hemdall
а как скинуть с базы коннекты одного определенного юзера? так чтобы другие коннекты остались

Выключть компьютер этого пользователя
20 июн 12, 12:05    [12744659]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3637
hemdall
Shakill
автор
hemdall, можно перевести базу в offline

об этом я не подумал ))

Glory
Спасибо!

а как скинуть с базы коннекты одного определенного юзера? так чтобы другие коннекты остались


sp_who2
kill spid (того пользователя)
20 июн 12, 12:10    [12744710]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
hemdall
Member

Откуда:
Сообщений: 10
Ozerov
hemdall
Shakill
пропущено...

об этом я не подумал ))

Glory
Спасибо!

а как скинуть с базы коннекты одного определенного юзера? так чтобы другие коннекты остались


sp_who2
kill spid (того пользователя)

ну это понятно
но вот допустим что есть 3 юзера,
у User1 есть 2 коннекта
у User2 есть 10 коннектов
у User3 - 200 коннектов (200 spid)
и вот User3 просит убить все его коннекты к базе
тоесть надо убить все коннекты только одного определенного пользователя, но так как их много то убивать их по одному или перечесля номера spid - долго, вот я и подумал может есть какой-нибудь способ (скрипт какой-нибудь) что бы скинуть только одного юзера (User3) а другие (User2 и User3) как работали так пусть и работают.
20 июн 12, 15:02    [12746400]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
Glory
Member

Откуда:
Сообщений: 104751
hemdall
вот я и подумал может есть какой-нибудь способ (скрипт какой-нибудь)

Скрипт вам уже привели
Только он не запрещает клиенту снова открыть коннект
20 июн 12, 15:10    [12746464]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3637
declare @login nvarchar(128)
declare @sid smallint
declare @sql nvarchar(4000)
DECLARE authors_cursor CURSOR FOR 
select spid, loginame from sys.sysprocesses where loginame = 'loginName'

OPEN authors_cursor

FETCH NEXT FROM authors_cursor 
INTO @sid, @login

WHILE @@FETCH_STATUS = 0
BEGIN

--print @sid

set @sql = 'kill ' + cast(@sid as nvarchar)
--print @sql
exec sp_executesql @sql

   FETCH NEXT FROM authors_cursor 
   INTO @sid, @login
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO
20 июн 12, 15:10    [12746465]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
hemdall
Member

Откуда:
Сообщений: 10
Ozerov
declare @login nvarchar(128)
declare @sid smallint
declare @sql nvarchar(4000)
DECLARE authors_cursor CURSOR FOR 
select spid, loginame from sys.sysprocesses where loginame = 'loginName'

OPEN authors_cursor

FETCH NEXT FROM authors_cursor 
INTO @sid, @login

WHILE @@FETCH_STATUS = 0
BEGIN

--print @sid

set @sql = 'kill ' + cast(@sid as nvarchar)
--print @sql
exec sp_executesql @sql

   FETCH NEXT FROM authors_cursor 
   INTO @sid, @login
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO


Спасибо, я так понимаю что ваш пример убивает коннекты вообще с сервера? (в том виде что вы напивали я ето курсор не запускал)
мы этот курсор подправили под наши нужды, вот что получилось:

declare @login nvarchar(128)
declare @sid smallint
declare @sql nvarchar(4000)
DECLARE authors_cursor CURSOR FOR 
select spid from sys.sysprocesses where loginame = 'UserName' and db_name(dbid) = 'BaseName'

OPEN authors_cursor

FETCH NEXT FROM authors_cursor 
INTO @sid

WHILE @@FETCH_STATUS = 0
BEGIN

--print @sid

set @sql = 'kill ' + cast(@sid as nvarchar)
--print @sql
exec sp_executesql @sql

   FETCH NEXT FROM authors_cursor 
   INTO @sid
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

теперь это то что мне надо))
можно убить все коннекты одного определенного юзера с одной определенной базы
20 июн 12, 17:05    [12747520]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3637
Ну да, докручивать там было уже не сложно :)
20 июн 12, 17:22    [12747661]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
Jaffar
Member

Откуда:
Сообщений: 633
зачем курсоры? это же так много писать.

declare @SQL varchar(max), @username varchar(255)
select @username = 'user3', @SQL = ''

select @SQL = @SQL + 'kill '+cast(spid as varchar(32))+char(13)+char(10)
from sys.sysprocesses sp with(nolock)
where
		sp.spid != @@SPID -- ваш коннект
and		sp.loginame = @username

select @SQL = @SQL + char(13)+char(10)+
'alter login '+@username+' disable'
--print @SQL
exec (@SQL)

select * from sys.server_principals where is_disabled = 0


про то что ломануться - задача стояла отрубить коннекты - мы их обрубили
а чтобы не ломанулись обратно - выключить логины аналогичным скриптом.
Сразу сгенерить скрипт на выключение и на включение.
21 июн 12, 06:52    [12749962]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3637
Jaffar
зачем курсоры? это же так много писать.


ТС просил скрипт, он у меня был под рукой, я выдал.
Собственно ничего не писал :)
21 июн 12, 10:32    [12750825]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Jaffar,
Jaffar
select @SQL = @SQL + 'kill '+cast(spid as varchar(32))+char(13)+char(10)
from sys.sysprocesses sp with(nolock)..

сие тоже не самый лучший вариант складывать строчку
21 июн 12, 10:44    [12750961]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
hemdall
Member

Откуда:
Сообщений: 10
Jaffar
задача стояла отрубить коннекты

отрубить коннекты с одной из нескольких баз
может я неправильно выразился, правильнее наверное было бы: убить все процессы юзера к одной определенной базе, и не трогать процессы тогоже юзера к другим базам
21 июн 12, 10:51    [12751033]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
Jaffar
Member

Откуда:
Сообщений: 633
denis2710
Jaffar,
Jaffar
select @SQL = @SQL + 'kill '+cast(spid as varchar(32))+char(13)+char(10)
from sys.sysprocesses sp with(nolock)..

сие тоже не самый лучший вариант складывать строчку


...какой же по вашему мнению лучший вариант?
22 июн 12, 12:45    [12759275]     Ответить | Цитировать Сообщить модератору
 Re: как сразу убить несколько конектов к базе  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Jaffar
denis2710
Jaffar,
пропущено...

сие тоже не самый лучший вариант складывать строчку


...какой же по вашему мнению лучший вариант?

Да уже 100500 рассматривались разные варианты конкатенации строк
имхо после SQL Server 2005 можно забыть про
..select @var = @var + field from table ..

+

set statistics time on ;
declare @str varchar(max)
select  @str = isnull(@str, '') + t.name + ';'
from    sys.tables as t
cross join sys.tables as t2
cross join sys.tables as t3
select  @str ;


with  zz ( x )
        as ( select t.name + ';' 'text()'
             from   sys.tables as t
             cross join sys.tables as t2
             cross join sys.tables as t3
             for    xml path('')
                      , type
           )
  select  zz.x.value('text()[1]', 'varchar(max)')
  from    zz

22 июн 12, 14:36    [12760484]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить