Получение количества занятых лицензий

Источник: dvprofessionals
Михаил Захаров

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

T-SQL запрос к базе:

1) Считаем лицензии без учета сессий от определенных учетных записей (например, сервис Workflow имеет собственную лицензию)

-- Получение количества занятых лицензий
-- Ограничиваем сессии от конкретных аккаунтов

DECLARE @SysAccounts table
(AccountName nvarchar(256))

INSERT INTO @SysAccounts VALUES
-- Здесь нужно задать учетные записи, лицензии которых не должны учитываться
(
'DOMAIN\User'
)
SELECT COUNT(DISTINCT dvsys_sessions.UserID) 'Licenses count' FROM dvsys_sessions
JOIN dvsys_users
ON dvsys_users.UserID = dvsys_sessions.UserID
WHERE dvsys_users.AccountName NOT IN (SELECT AccountName FROM @SysAccounts)

2) Считаем лицензии без учета сессий от определенных машин (так же можно учитывать сеансы системных сервисов)

-- Получение количества занятых лицензий
-- Ограничиваем сессии от конкретных машин

DECLARE @SysMachines table
(MachineName nvarchar(256))

INSERT INTO @SysMachines VALUES
-- Здесь нужно задать имена машин, сессии от которых не должны учитываться при подсчете
(
'SUPPORT1'
)
SELECT COUNT(DISTINCT dvsys_sessions.UserID) 'Licenses count' FROM dvsys_sessions

Если задачу подсчета нужно проводить постоянно, то можно написать собственное расширение консоли настройки (snap-in). В данное расширение будет выполнять запрос к базе.


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=20544