Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Скинуть логин / 5 сообщений из 5, страница 1 из 1
06.09.2019, 10:28
    #39858295
Sandist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скинуть логин
Доброго времени суток

1. Есть процедура которая обновляет данные в таблицах
2. Есть пользователь под логином (ttt) который работает с таблицами через MS access
3. Сервер Microsoft SQL Server 2008 (SP4) - 10.0.6241.0 (X64) Apr 17 2015 10:56:08 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (VM)

При обновлении данных в базе иногда происходит лок таблиц этим пользователем. Мне нужен код, который будет скидывать все соединения пользователя ttt из базы перез запуском обновлений.

Помогите пожалуйста с таким запросом
...
Рейтинг: 0 / 0
06.09.2019, 10:49
    #39858308
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скинуть логин
alter database ... set restricted_user with rollback immediate
Ну и сисадмина/овнера отобрать у пользователя предварительно.
...
Рейтинг: 0 / 0
06.09.2019, 11:08
    #39858317
Sandist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скинуть логин
Гавриленко Сергей Алексеевич,
что-то боязно мне так делать

http://qaru.site/questions/25463/how-do-you-kill-all-current-connections-to-a-sql-server-2005-database
Код: plsql
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.
USE master
GO

SET NOCOUNT ON
DECLARE @DBName varchar(50)
DECLARE @spidstr varchar(8000)
DECLARE @ConnKilled smallint
SET @ConnKilled=0
SET @spidstr = ''

Set @DBName = 'DB_NAME'
IF db_id(@DBName) < 4
BEGIN
PRINT 'Connections to system databases cannot be killed'
RETURN
END
SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; '
FROM master..sysprocesses WHERE dbid=db_id(@DBName)

IF LEN(@spidstr) > 0
BEGIN
EXEC(@spidstr)
SELECT @ConnKilled = COUNT(1)
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
END

Можно так? что скажете?
...
Рейтинг: 0 / 0
06.09.2019, 11:14
    #39858321
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скинуть логин
SandistМожно так? что скажете?

А если юзер переподключится после прибивания сессии и снова заблокирует таблицы - что делать будете?

restricted_user - это опция, предназначенная для ограничения прав пользователей на время регламентных работ (типа обновлений).
...
Рейтинг: 0 / 0
06.09.2019, 16:19
    #39858508
PsyMisha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скинуть логин
Sandist,

Мой вариант реализации, для поиска зависших сессий от определенного логина.
Запускалось по зашедуленному джобу - надо подумать, как и чем вам лучше этот код запускать перед своим процессом, но сам код рабочий и функциональный

Код: sql
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.
DECLARE @Session_ID varchar(1000), @SQLCMD nvarchar(4000);

DECLARE Sessions_Cursor CURSOR READ_ONLY FOR 
--##################################################
SELECT DISTINCT 
sp.spid AS 'Session_ID'
FROM sysprocesses AS sp
WHERE sp.loginame = '%INSERT_YOUR_LOGIN_NAME%'
AND DATEDIFF(HOUR, sp.last_batch, GETDATE()) >= 2 --поиск зависших сессий, вариант если сессия работала больше 2х часов. Можно убрать всю эту строку в WHERE
--##################################################

OPEN Sessions_Cursor
FETCH NEXT FROM Sessions_Cursor INTO @Session_ID
WHILE @@FETCH_STATUS = 0
BEGIN
	SET @SQLCMD = 'KILL ' + @Session_ID
	
	PRINT @SQLCMD -- закомментировать опционально - только отображает
	--EXEC sp_executesql @SQLCMD -- раскомментировать для выполнения
	
FETCH NEXT FROM Sessions_Cursor INTO @Session_ID
END

CLOSE Sessions_Cursor
DEALLOCATE Sessions_Cursor
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Скинуть логин / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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