![]() |
#1 |
Участник
|
Параллельная транзакция
Товарищи, приветствую!
Возникла задача, ищу пути решения. Суть задачи в следующем. Есть некая таблица АХ. В таблице перекрыты методы CUD. В перекрытых методах вызывается метод класса, который, в свою очередь должен сделать запись в лог вида RefTableId-RefRecId. Проблема в том, что запись в лог происходит в рамках транзакции CUD и если возникает ошибка, то запись в логе, естественно, не сохраняется, т.к. все транзакции откатываются... Есть ли способ открыть параллельную транзакцию и записаться в лог? Чтобы запись в нем гарантированно осталась, независимо от исхода транзакции CUD. |
|
![]() |
#2 |
Участник
|
Надо открыть еще одно соединение к базе и в нем сделать запись в лог.
Только нужно аккуратно это делать, чтобы самому себя не заблокировать. Посмотрите для примера семейство классов NumberSeq |
|
![]() |
#3 |
MCITP
|
![]()
Просто интересно, а каким образом можно самому себя заблокировать, вставляя запись в отдельную таблицу лога в параллельной транзакции?
__________________
Zhirenkov Vitaly |
|
![]() |
#4 |
Участник
|
Цитата:
Это я людей на всякий пожарный случай попугал, чтобы внимательнее с отдельными соединениями работали. А то если из дополнительного соединения кроме лога еще что-нить пообновлять, то можно словить кучу блокировок. Или наоборот если из основного соединения лог обновлять. Пример тут : Блокировка NumberSequence |
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
![]() |
#5 |
Участник
|
X++: UserConnection userConnection; userConnection = new UserConnection(); userConnection.ttsbegin(); logTable.setConnection(userConnection); logTable.clear(); ..... logTable.insert(); userConnection.ttscommit(); |
|
|
За это сообщение автора поблагодарили: Logger (3), Kabardian (4), AlexeyVS (1). |
![]() |
#6 |
Участник
|
Спасибо за помощь! То что надо!
|
|
Теги |
транзакции |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|