Подсчитать занятые лицензии не трудно. Лицензии конкурентные и учитываются так - сесии открытые с одной машины от одного пользователя занимают одну лицензию.
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). В данное расширение будет выполнять запрос к базе.
UPD. Коллеги подсказали еще более красивый скрипт
SELECT DISTINCT CAST([UserID] AS nvarchar(36)) + CAST([ComputerName] AS nvarchar(256)) FROM [dbo].[dvsys_sessions] WITH (NOLOCK)Читать дальше
6 коммент.:
Спасибо за пример :)
Вы пишете, что «сессии открытые с одной машины от одного пользователя занимают одну лицензию». А если у одного пользователя запущен навигатор и личный помощник (без установленного признака «Разрывать соединение после поиска»)? Личный помощник же тоже занимает лицензию в данном случае? Или у сессии личного помощника другой UserID?
Правильно ли, что по полю AppID в таблице dvsys_session можно определить через какое приложение было подключение? Насколько я поняла идентификаторы всегда одни и те же: 8f47fcaf-6fc8-458e-910c-5fcc4ffe6af7 – это id навигатора, а 26ba1aa8-3933-46bd-ad4d-d63b4294ce55 – это id личного помощника. По крайней мере, на двух разных базах и серверах id совпадают. Это верно?
Если личный помощник соединяется с сервером DocsVision под той же учетной записью, под которой у пользователя открыт Навигатор, то будет использоваться одна лицензия.
А про AppID сам не знаю. Надо уточнить...
Возможно оффтопик, не нашел, куда лучше написать...
Обратите внимание на постоянные проблемы с незакрытыми сессиями после закрытия навигатора при использовании кастомных карточек. В чем проблема мы догадываемся - ком-объекту сессии делается много раз AddRef, а Release - нет.
Если я пишу свою карточку на C#, я не должен знать таких подробностей про систему. Сейчас у нас на проектах есть работающие ворк-эраунды, но представляю сколько еще разработчиков сталкивается с этой проблемой.
Пофиксите, пожалуйста :)
Михаил, по вашему комментарию возник большой вопрос.
Получается, что личный помощник (будучи установленным в автозагрузку) всегда занимает лицензию (если соединение не разрывается после поиска), но когда пользователь (под той же учётной записью, на том же компьютере) откроет навигатор, то всё равно будет занята всего одна лицензия???
Я всегда считала, что в таком случае занимается две лицензии… По крайней мере, такое мнение у меня сложилось по результатам нескольких запросов и переписок с техподдержкой и консалтингом…
Да, и личный помошник и Навигатор, если они подключаются под одной учетной записью, с одной машины, будут занимать только одну лицензию.
Посмотрите, например, сколько сесиий создает Workflow сервер, занимая при этом только одну свою лицензию.
Всё понятно, спасибо. Действительно, у меня были какие-то совсем неверные представления.
Отправить комментарий