11.12.2015, 11:29 | #1 |
Боец
|
AX2009 Batch run, deadlocks - как убить сессии?
Коллеги, может кто в курсе, как можно убить сессии SQL\AX в случае если она намертво повисла в дедлоках в режиме Batch
- Доступа к SQL нет - АОС рестартартовать нельзя - Из формы SysUserOnline сессии не убиваются. Выгляди это так: Вложение 9449 Последний раз редактировалось DSPIC; 28.09.2017 в 01:50. |
|
11.12.2015, 12:00 | #2 |
Роман Долгополов (RDOL)
|
Сделать кнопку которая прямым конектом к БД будет убивать процессы с отображаемыми в строке SPID
|
|
11.12.2015, 12:01 | #3 |
Участник
|
Запускать на сервере:
X++: str spids;//Spid пользователя кого надо кильнуть с БД str sqlStatement = strfmt('KILL %1', spid); SqlStatementExecutePermission permission = new SqlStatementExecutePermission(sqlStatement); UserConnection userConnection = new userconnection(); ; permission.assert(); userConnection.createStatement().executeUpdate(sqlStatement); |
|
|
За это сообщение автора поблагодарили: DSPIC (2). |
11.12.2015, 12:41 | #4 |
Боец
|
Цитата:
Сообщение от ice321i
Запускать на сервере:
X++: str spids;//Spid пользователя кого надо кильнуть с БД str sqlStatement = strfmt('KILL %1', spid); SqlStatementExecutePermission permission = new SqlStatementExecutePermission(sqlStatement); UserConnection userConnection = new userconnection(); ; permission.assert(); userConnection.createStatement().executeUpdate(sqlStatement); |
|
11.12.2015, 12:52 | #5 |
----------------
|
Либо писать в тех.поддержку клиента.
Либо искать какие в системе есть SQL интеграции, может хранятся какие-нибудь учетки для доступа к SQL с бОльшими правами, чем у АОСа. |
|
|
За это сообщение автора поблагодарили: DSPIC (2). |
11.12.2015, 13:12 | #6 |
северный Будда
|
Так пусть это запустит тот, у кого есть соответствующие права
__________________
С уважением, Вячеслав |
|
11.12.2015, 15:15 | #7 |
Злыдни
|
Возможный способ http://dynamics-ax-live.blogspot.ru/...n-session.html
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
11.12.2015, 15:36 | #8 |
MCITP
|
Offtop: насколько мне известно в дедлоках зависнуть нельзя
Можно просто в локах...
__________________
Zhirenkov Vitaly |
|
11.12.2015, 15:40 | #9 |
MCITP
|
Цитата:
Сообщение от KiselevSA
Возможный способ http://dynamics-ax-live.blogspot.ru/...n-session.html
Так что нужно искать соответствующие права на SQL.
__________________
Zhirenkov Vitaly |
|
15.12.2015, 12:11 | #10 |
Боец
|
Цитата:
Цитата:
Сообщение от ice321i
Запускать на сервере:
X++: str spids;//Spid пользователя кого надо кильнуть с БД str sqlStatement = strfmt('KILL %1', spid); SqlStatementExecutePermission permission = new SqlStatementExecutePermission(sqlStatement); UserConnection userConnection = new userconnection(); ; permission.assert(); userConnection.createStatement().executeUpdate(sqlStatement); Цитата:
Нужно запомнить как хинт на будущее, спасибо. Тот у кого есть права не разрешает этими правами воспользоваться. + Нужна серия запусков для отладки. Цитата:
Summary: короче, без прав никуда. Мой вопрос предполагал найти быстрое возможное решение проблемы, но не получилось, к сожалению. Да, остается служба поддержки, но это длительная процедура, хотя ничего больше не остается. Где-то еще вычитал, что можно удалить записи в SysClientSession, после чего АОС, якобы, их терминейтит на уровне SQL. Так вот - это тоже не работает, если вдруг кто-то захочет воспользоваться. Всем спасибо, если других идей не появилось, тему можно закрыть. |
|
15.12.2015, 12:32 | #11 |
Злыдни
|
Есть еще вариант, если у AOS прав побольше, с написанием небольшого класса с возможностью выполнения в пакетном режиме и передачей ему параметра с идентификатором сессии. В самом классе пишем прямой вызов TransactSQL "kill %sessionid". Создаем одноразовое пакетное задание, указываем код сессии, выбираем группу журналов, запускаем и ждем.
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
15.12.2015, 16:37 | #12 |
Участник
|
Цитата:
Сообщение от KiselevSA
Есть еще вариант, если у AOS прав побольше, с написанием небольшого класса с возможностью выполнения в пакетном режиме и передачей ему параметра с идентификатором сессии. В самом классе пишем прямой вызов TransactSQL "kill %sessionid". Создаем одноразовое пакетное задание, указываем код сессии, выбираем группу журналов, запускаем и ждем.
Класс в данном случае писать не обязательно, можно просто создать менюайтем для джоба в котором выполняется код киляни с бд и установить св-во RunOn - Server. |
|
|
|