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

Откуда:
Сообщений: 734
Друзья. Цель такова, что необходимо перед запуском программы узнать, сколько уже копий программ подцеплено к указанной базе.

То есть что-то типа такого:

SELECT COUNT(session_id) AS CNT FROM sys.dm_exec_sessions WHERE
session_id<>@@SPID AND program_name = 'имя_программы' AND
dbid = db_id()

Но в sys.dm_exec_sessions нет упоминания о базе (dbid). Появляется только в MS SQL 2012 (у меня MS SQL 2005).
Нет упоминания базы и в master..sysprocesses и в sys.dm_exec_connections.
Есть в sp_who2, но пишут, что процедура оставлена для совместимости и потом в новых версиях не будет.
Как еще можно узнать к какой базе осуществлены коннекты?
31 янв 14, 11:55    [15499383]     Ответить | Цитировать Сообщить модератору
 Re: Количество запущенных экземпляров к этой базе  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Как еще можно узнать к какой базе осуществлены коннекты?


Коннекты, осуществляются к серверу. Как такового понятия "коннект к бд" нет. Есть понятие текущая бд при выполнении запроса. Именно поэтому бд есть только в sys.dm_exec_requests.
31 янв 14, 12:36    [15499737]     Ответить | Цитировать Сообщить модератору
 Re: Количество запущенных экземпляров к этой базе  [new]
nerv
Member

Откуда:
Сообщений: 734
похоже, можно обращаться к sys.sysprocesses
31 янв 14, 12:46    [15499828]     Ответить | Цитировать Сообщить модератору
 Re: Количество запущенных экземпляров к этой базе  [new]
nerv
Member

Откуда:
Сообщений: 734
и как тогда лучше обращаться?
Считывать с sys.sysprocesses
или к sys.dm_exec_sessions JOINить sys.dm_exec_requests по session_id ?
31 янв 14, 12:50    [15499863]     Ответить | Цитировать Сообщить модератору
 Re: Количество запущенных экземпляров к этой базе  [new]
nerv
Member

Откуда:
Сообщений: 734
остановился на этом варианте запроса:

SELECT ds.session_id, dr.database_id, DB_NAME(dr.database_id)
FROM sys.dm_exec_sessions ds
 LEFT JOIN sys.dm_exec_requests dr
  ON ds.session_id = dr.session_id
  WHERE
ds.session_id<>@@SPID AND   program_name = 'имя_программы' AND
dr.database_id = db_id()  
31 янв 14, 12:56    [15499922]     Ответить | Цитировать Сообщить модератору
 Re: Количество запущенных экземпляров к этой базе  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
nerv
и как тогда лучше обращаться?
Считывать с sys.sysprocesses
или к sys.dm_exec_sessions JOINить sys.dm_exec_requests по session_id ?


К sys.sysprocesses можно обращаться. Пока она поддерживается. При обращении к sys.dm_exec_requests нужно понимать, что это не "сколько копий программ подцеплено к указанной базе", а сколько запросов на момент обращения к sys.dm_exec_requests выполняется из программы, которая передала в параметрах строки подключения определенное имя приложения. Причем, это может быть и не Ваша программа.

Сообщение было отредактировано: 31 янв 14, 13:20
31 янв 14, 13:20    [15500105]     Ответить | Цитировать Сообщить модератору
 Re: Количество запущенных экземпляров к этой базе  [new]
nerv
Member

Откуда:
Сообщений: 734
точно, dm_exec_requests выдает только базу текущего соединения.
Остается только sp_who2?
Или есть еще где то информация, из которой можно вытащить sid, programm_name, database
подключенных на данный момент к серверу?
31 янв 14, 13:35    [15500220]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить