Текущий архив: 2003.03.03;
Скачать: CL | DM;
ВнизКто работал с ODAC откликнитесь!! Срочно нужна помощь!! Найти похожие ветки
← →
Oleksiy (2003-02-11 12:46) [0]Нужна помощь по работе с транзакциями в ODAC
← →
Yuvich (2003-02-11 12:49) [1]Да там вроде все просто.
← →
Oleksiy (2003-02-11 12:53) [2]да что то у меня не получается открыть вторую транзакцию, в то время когда первая еще не завершена
← →
Yuvich (2003-02-11 13:15) [3]"... открыть вторую транзакцию, в то время когда первая еще не завершена ..."
А вот этого - нельзя.
Тут надо различать поведение транзакций.
Роллбак может выполняться ступенчато - от точки к точке (SAVEPOINT) - вложенные транзакции, а Коммит не может выполняться ступенчато - он закрывает транзакцию верхнего уровня.
Пример:
1.0 commit - закрываем текущую транзакцию и начинаем новую.
1.1 insert ... - операция в транзакции первого уровня.
2.0 savepoint "one" - ставим точку останова и открываем транзакцию второго уровня - вложенную
2.1 insert ... - операция в транзакции второго уровня
3.0 savepoint "two" - ставим точку останова и открываем транзакцию третьего уровня - вложенную
3.1 insert ... - операция в транзакции третьего уровня
Если делаем commit - завершится транзакция первого уровня (insert 1.1, 2.1, 3.1) - другого быть не может
Если делаем rollback - завершится транзакция первого уровня (insert 1.1, 2.1, 3.1).
Есть варианты - rollback to "two"("one") - завершится транзакция третьего (второго) уровня.
Есть еще автономные транзакции, но они к ODAC не имеют никакого отношения и запускаются специальными sql-командами.
Интересно: чем ты открываешь вторую транзакцию - может я чего-то не понял?
← →
Oleksiy (2003-02-11 13:23) [4]Вторую открываю методом StartTransaction. Мне как раз нужно чтобы транзакция второго уровня отработала в любом случае - чтобы commit прошел, а вот первого уровня уже в зависимости от ситуации, т.е. либо rollback либо commit
← →
Yuvich (2003-02-11 13:49) [5]Не-е ... так сделать нельзя - Oracle не даст.
Тут надо использовать автономные транзакции.
← →
Oleksiy (2003-02-11 14:06) [6]а что за вещь эти автономные транзакции, если можно вкратце
← →
Yuvich (2003-02-11 15:05) [7]Автономные транзакции (АТ) - вид вложенности транзакций.
Принцип работы АТ:
Некоторый блок, процедура/функция или метод объекта помечается директивой компилятора
PRAGMA AUTONOMOUS_TRANSACTION;
begin
...
end;
Как только блок начинается (begin) - главная транзакция "засыпает"
Как только блок заканчивается (end) - главная транзакция "просыпается" и продолжает дальше.
АТ может запускать другую АТ и т.д.
У нее есть следующие ограничения:
- АТ не "видит" изменения, сделанные главной транзакцией
- главная транзакция не "видит" изменения, сделанные АТ
← →
Oleksiy (2003-02-12 10:15) [8]Спасибо, попробую использовать
Страницы: 1 вся ветка
Текущий архив: 2003.03.03;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.008 c