Как сопоставить пользователя 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

Получаем такой результат:

SP_LOCK

В данном случае мы получили 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  с блокировкой на обновление :)

LedgerTable

А вдруг хотим себя перепроверить и понять, кто породил транзакцию? Тогда:

use master
go
select spid, kpid, blocked, dbid, ecid, open_tran from sysprocesses

Смотрим:

image

 

Убедились, что 'наш' SPID - 52. Что дальше? Определим откуда он пришел:

use master
go
exec sp_who 52;
go

Получаем такой результат:

SP_WHO

Что имеем? SPID (номер процесса) и HOSTNAME (имя сервера AOS с которого пришла сессия). В моем случае - '52' и 'AEREMENK01'.

 

Теперь запускаем еще одну сессию Microsoft Dynamics AX и выбираем Администрирование | Активные пользователи в Главном меню:

SPID_DAX

Получаем, код и имя пользователя.

Дальше, звоним пользователю и спрашиваем зачем он это запускал :)

 

Данная статья подготовлена с помощью Windows Live Writer .