RSS Подписка на статьи RSS Подписка на комментарии Панель инструментов

Блог профессионалов стал частью сайта технической поддержки DocsVision http://support.docsvision.com. Новые материалы будут появляться уже на этом сайте.

Поиск

Ярлыки

авто генерация кода (1) Администрирование DocsVision (60) Атрибутивный поиск (3) База данных (24) Базы знаний (1) Безопасность (1) Бизнес-процессы (20) Блог (2) Вы увидите это первыми (1) Групповые политики (1) Диаграммы (2) Задания (2) Интеграция (2) Карточки DocsVision (14) Конструктор Решений (11) Маркетинг и продажи (4) Навигатор (3) Новое (3) Новости (32) Опрос (4) Опросы DocsVision (4) Оптимизация (3) Отчеты (2) Ошибки (1) Поддержка (14) Полезные ссылки (1) Представления (4) Производительность (5) Разбор полетов (18) Разработка для Workflow (7) разработка карточек (2) Разработка на платформе DocsVision (41) Разработка решений (43) Расширение платформы (1) Расширенные отчеты (9) Решения на платформе DocsVision (6) Сервисы DocsVision (3) Сканеры (3) Справочник сотрудников (1) Справочник типов (1) Установка (1) Утилиты (13) Шлюз в SharePoint (8) Штрихкод (2) Cкрипты карточек (7) DocsVision внутри (1) DocsVision Live (1) FileStream (1) FireFox (2) Opera (1) Powershell (5) Safari (1) SharePoint2007 (1) SharePoint2010 (2) Silverlight (1) UltraViews (1) Vista (1)

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

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

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 коммент.:

Irhen комментирует...

Спасибо за пример :)
Вы пишете, что «сессии открытые с одной машины от одного пользователя занимают одну лицензию». А если у одного пользователя запущен навигатор и личный помощник (без установленного признака «Разрывать соединение после поиска»)? Личный помощник же тоже занимает лицензию в данном случае? Или у сессии личного помощника другой UserID?
Правильно ли, что по полю AppID в таблице dvsys_session можно определить через какое приложение было подключение? Насколько я поняла идентификаторы всегда одни и те же: 8f47fcaf-6fc8-458e-910c-5fcc4ffe6af7 – это id навигатора, а 26ba1aa8-3933-46bd-ad4d-d63b4294ce55 – это id личного помощника. По крайней мере, на двух разных базах и серверах id совпадают. Это верно?

Михаил Захаров комментирует...

Если личный помощник соединяется с сервером DocsVision под той же учетной записью, под которой у пользователя открыт Навигатор, то будет использоваться одна лицензия.

А про AppID сам не знаю. Надо уточнить...

Анонимный комментирует...

Возможно оффтопик, не нашел, куда лучше написать...

Обратите внимание на постоянные проблемы с незакрытыми сессиями после закрытия навигатора при использовании кастомных карточек. В чем проблема мы догадываемся - ком-объекту сессии делается много раз AddRef, а Release - нет.
Если я пишу свою карточку на C#, я не должен знать таких подробностей про систему. Сейчас у нас на проектах есть работающие ворк-эраунды, но представляю сколько еще разработчиков сталкивается с этой проблемой.
Пофиксите, пожалуйста :)

Irhen комментирует...

Михаил, по вашему комментарию возник большой вопрос.
Получается, что личный помощник (будучи установленным в автозагрузку) всегда занимает лицензию (если соединение не разрывается после поиска), но когда пользователь (под той же учётной записью, на том же компьютере) откроет навигатор, то всё равно будет занята всего одна лицензия???
Я всегда считала, что в таком случае занимается две лицензии… По крайней мере, такое мнение у меня сложилось по результатам нескольких запросов и переписок с техподдержкой и консалтингом…

Михаил Захаров комментирует...

Да, и личный помошник и Навигатор, если они подключаются под одной учетной записью, с одной машины, будут занимать только одну лицензию.
Посмотрите, например, сколько сесиий создает Workflow сервер, занимая при этом только одну свою лицензию.

Irhen комментирует...

Всё понятно, спасибо. Действительно, у меня были какие-то совсем неверные представления.

Отправить комментарий