Как сопоставить пользователя DAX и сессию в Microsoft SQL?
Поскольку было много вопросов по статье "Как сопоставить пользователя DAX и сессию в Oracle?" по аналогичному сопоставлению для Microsoft SQL Server, попробую описать в отдельной статье, а не в комментариях, поскольку в комментарии проблематично вставить изображения.
Дается: Microsoft Dynamics AX 4.0SP1 на Microsoft SQL Server 2005 SP2.
Например, запустим простейший скрипт в DAX 4.0 SP1 для появления блокировки:
static void dev3_lock1(Args _args)
{
LedgerTable ledgerTable;ttsbegin;
while select forupdate ledgerTable
{
ledgerTable.AccountName += " Test";
ledgerTable.update();pause; // висим и можем отследить блокировку
}ttscommit;
}
Запускаем Microsoft SQL Server Management Studio. Создаем запрос и вводим, например:
use master
go
exec sp_lock;
go
Получаем такой результат:
В данном случае мы получили SPID и идетификатор объекта.
SQL Book Online: "Аргумент session ID (SPID в SQL Server 2000 и более ранних версиях) является идентификатором сеанса, принадлежащего экземпляру SQL Server."
Попробуем узнать, что за объект такой, запускаем:
use dynamics // наша база
go
select name, id, xtype, type from sysobjects where id = 1687065146
Оказывается - LedgerTable с блокировкой на обновление :)
А вдруг хотим себя перепроверить и понять, кто породил транзакцию? Тогда:
use master
go
select spid, kpid, blocked, dbid, ecid, open_tran from sysprocesses
Смотрим:
Убедились, что 'наш' SPID - 52. Что дальше? Определим откуда он пришел:
use master
go
exec sp_who 52;
go
Получаем такой результат:
Что имеем? SPID (номер процесса) и HOSTNAME (имя сервера AOS с которого пришла сессия). В моем случае - '52' и 'AEREMENK01'.
Теперь запускаем еще одну сессию Microsoft Dynamics AX и выбираем Администрирование | Активные пользователи в Главном меню:
Получаем, код и имя пользователя.
Дальше, звоним пользователю и спрашиваем зачем он это запускал :)
Данная статья подготовлена с помощью Windows Live Writer .