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