Консультация № 144966
25.09.2008, 09:35
0.00 руб.
0 2 2
Здравствуйте уважаемые эксперты!!! Скажите пожалуйсто как при помощи запроса опредилить есть ли подключения к определенной базе, их количество, и пользователей???

Обсуждение

Неизвестный
25.09.2008, 10:39
общий
это ответ
Здравствуйте, PaTiFoN!
Предоставляет сведения о текущих пользователях, сеансах и процессах в экземпляре компонента Microsoft SQL Server Database Engine. Данные могут быть отфильтрованы, чтобы возвращать только те процессы, которые не простаивают, принадлежат конкретному пользователю или принадлежат определенному сеансу.

Соглашения о синтаксисе в Transact-SQL

Синтаксис

sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ]


Аргументы
[ @loginame = ] 'login' | session ID | 'ACTIVE'
Используется для фильтрации результирующего набора.

Аргумент login имеет тип sysname и определяет процессы, принадлежащие конкретному имени входа.

Аргумент session ID (SPID в SQL Server 2000 и более ранних версиях) является идентификатором сеанса, принадлежащего экземпляру SQL Server. Аргумент session ID имеет тип smallint.

Значение ACTIVE исключает сеансы, ожидающие следующей команды от пользователя.

Если значение не указано, эта процедура возвращает все сеансы, принадлежащие экземпляру.

Значения кодов возврата
0 (успешное завершение) или 1 (неуспешное завершение)

Результирующие наборы
Процедура sp_who возвращает результирующий набор со следующими данными.

Столбец Тип данных Описание
spid
smallint
Идентификатор сеанса.

ecid
smallint
Идентификатор контекста выполнения заданного потока, связанный с определенным идентификатором сеанса.

ECID = {0, 1, 2, 3, ...n}, где 0 всегда представляет основной или родительский поток, а {1, 2, 3, ...n} представляет подпроцессы.

status
nchar(30)
Состояние процесса. Возможны следующие значения.

dormant. SQL Server сбрасывает сеанс.

running. В сеансе выполняются один или несколько пакетов. Если включен режим MARS, в сеансе может выполняться несколько пакетов. Дополнительные сведения см. в разделе Using Multiple Active Result Sets (MARS).

background. В сеансе выполняется фоновая задача, например обнаружение взаимоблокировок.

rollback. В сеансе выполняется откат транзакций.

pending. В сеансе ожидается освобождение потока исполнителя.

runnable. Задачи сеанса находятся в очереди исполнителей планировщика, ожидая времени такта.

spinloop. Задачи сеанса ожидают освобождения взаимоблокировки.

suspended. Сеанс ожидает завершения события, например операции ввода-вывода.

loginame
nchar(128)
Имя входа, связанное со специфическим процессом.

hostname
nchar(128)
Имя узла или компьютера для каждого процесса.

blk
char(5)
Идентификатор сеанса для блокирующего процесса, если такой существует. В противном случае значение этого столбца — 0.

Если транзакция, связанная с данным идентификатором сеанса, заблокирована потерянной распределенной транзакцией, этот столбец возвратит -2 для блокирующей потерянной транзакции.

dbname
nchar(128)
База данных, используемая процессом.

cmd
nchar(16)
Команда компонента Database Engine (инструкция Transact-SQL, внутренний процесс компонента Database Engine и так далее), выполняющаяся для процесса.

request_id
int
Идентификатор для запросов, запущенных в определенном сеансе.


При параллельной обработке подпроцессы создаются для определенного идентификатора сеанса. Главный поток обозначается как spid = <xxx> и ecid =0. Другие подпроцессы имеют одинаковый spid = <xxx>, но с ecid > 0.

Замечания
Блокирующий процесс (который может иметь монопольную блокировку) является процессом, удерживающим ресурсы, в которых нуждается другой процесс.

В SQL Server 2000 и более поздних версиях всем потерянным распределенным транзакциям назначается значение идентификатора сеанса, равное -2. Потерянные распределенные транзакции являются распределенными транзакциями, которые не связаны с каким либо идентификатором сеанса. Дополнительные сведения см. в разделе Использование помеченных транзакций (полная модель восстановления).

SQL Server 2000 и более поздние версии резервируют значения идентификаторов сеанса от 1 до 50 для внутреннего использования, значения идентификаторов сеанса от 51 и выше представляют пользовательские сеансы.

Разрешения
Требуется разрешение VIEW SERVER STATE на сервер для просмотра всех выполняющихся сеансов на экземпляре SQL Server. Иначе пользователь сможет увидеть только текущий сеанс.

Примеры
А. Перечень всех текущих процессов
В следующем примере используется хранимая процедура sp_who без параметров для возврата сведений обо всех текущих пользователях.

Копировать код
USE master;
GO
EXEC sp_who;
GO


Б. Перечень процессов определенного пользователя
Следующий пример показывает, как просмотреть сведения об отдельном текущем пользователе по имени входа.

Копировать код
USE master;
GO
EXEC sp_who 'janetl';
GO


В. Отображение всех активных процессов
Копировать код
USE master;
GO
EXEC sp_who 'active';
GO


Г. Отображение определенного процесса, определяемого идентификатором сеанса
Копировать код
USE master;
GO
EXEC sp_who '10' --specifies the process_id;
GO

Неизвестный
25.09.2008, 10:41
общий
это ответ
Здравствуйте, PaTiFoN!
Существует хранимая процедура sp_who, которая показывает все подключения к базам на сервере.
В Query Analyzer можно составить такой запрос и выгрузить все данные во временную таблицу, а потом выбрать из нее нужные. Ниже привожу пример такого запроса.
Временная таблица tb имеет поля, выводимые процедурой.
Удачи.

Приложение:
USE master
CREATE TABLE #tb (spid int, ecid int, status varchar(128), loginame varchar(128),
hostname varchar(128), blk int, dbname varchar(128), cmd varchar(128))
INSERT #tb EXEC sp_who
SELECT * FROM #tb
DROP TABLE #tb
Форма ответа