Я хотел бы с вами обсудить на сколько много информации о подключениях может дать нам SQL Server. Сегодня ко мне подошёл Windows Администратор с интересным вопросом, которым сам бы я никогда не озадачился. Чтобы вам было понятней, требуется сказать несколько слов в какой среде работает обсуждаемый инстанс — он работает на двухузловом Кластере с несколькими сетевыми интерфейсами (старый и новый ip). Вопрос звучал следующим образом: «Работает ли кто-то в данный момент со старым инрерфейсом». Никогда не думал о подобной задаче и решил обратиться к привычным нам «таблицам» и представлениям: sys.dm_exec_connections, master.sys.sysprocesses, sys.dm_exec_sessions
К моему удивлению, всю необходимую информацию я в них нашёл. Оказалось, что добрая половина пользователей не перешла на новую инфраструктуру, тогда как старую уже было пора отключать.
Для получение необходимой информации, я воспользовался следующим запросом:
select dc.session_id as [SPID], dc.client_net_address as [IP клиента], sp.hostname as [Имя PC клиента], dc.local_net_address as [IP подключения к серверу], dc.net_transport as [Протокол подключения], dc.local_tcp_port as [Порт], sp.[program_name] as [Имя программы], sp.loginame FROM sys.dm_exec_connections dc inner join master.sys.sysprocesses sp on dc.session_id=sp.spid where sp.spid > 50
Данный запрос помог мне понять откуда (IP клиента) и по какому IP (IP подключения к серверу) пользователи работают с сервером.
Мы можем воспользоваться данными «таблицами» для получения не активных пользователей (более суток):
-- Не активные пользователи более суток select dc.session_id as [SPID], dc.client_net_address as [IP клиента], sp.hostname as [Имя PC клиента], sp.loginame, sp.last_batch as [Дата последенего запроса], dc.last_read as [Дата последенего чтения], dc.last_write as [Дата последенего записи], sp.[program_name] as [Имя программы], DB_NAME(dt.dbid) as [Имя БД], dt.text FROM sys.dm_exec_connections dc inner join master.sys.sysprocesses sp CROSS APPLY sys.dm_exec_sql_text(sp.sql_handle) dt on dc.session_id=sp.spid where last_batch < GETDATE() - 1 and sp.spid > 50
Надеюсь данная информация будет вам полезной. Обсудить тему можно в комментариях или вконтакте.
Не забывайте смотреть рубрику «Грядущие события и мероприятия»