![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кто работал с ODAC откликнитесь!! Срочно нужна помощь!!
Oleksiy © (2003-02-11 12:46:00)Нужна помощь по работе с транзакциями в ODAC
Oleksiy (2003-02-12 10:15:00) [1]Спасибо, попробую использовать
Yuvich (2003-02-11 15:05:00) [2]Автономные транзакции (АТ) - вид вложенности транзакций.
Принцип работы АТ:
Некоторый блок, процедура/функция или метод объекта помечается директивой компилятора
PRAGMA AUTONOMOUS_TRANSACTION;
begin
...
end;
Как только блок начинается (begin) - главная транзакция "засыпает"
Как только блок заканчивается (end) - главная транзакция "просыпается" и продолжает дальше.
АТ может запускать другую АТ и т.д.
У нее есть следующие ограничения:
- АТ не "видит" изменения, сделанные главной транзакцией
- главная транзакция не "видит" изменения, сделанные АТ
Oleksiy (2003-02-11 14:06:00) [3]а что за вещь эти автономные транзакции, если можно вкратце
Yuvich (2003-02-11 13:49:00) [4]Не-е ... так сделать нельзя - Oracle не даст.
Тут надо использовать автономные транзакции.
Oleksiy (2003-02-11 13:23:00) [5]Вторую открываю методом StartTransaction. Мне как раз нужно чтобы транзакция второго уровня отработала в любом случае - чтобы commit прошел, а вот первого уровня уже в зависимости от ситуации, т.е. либо rollback либо commit
Yuvich (2003-02-11 13:15:00) [6]"... открыть вторую транзакцию, в то время когда первая еще не завершена ..."
А вот этого - нельзя.
Тут надо различать поведение транзакций.
Роллбак может выполняться ступенчато - от точки к точке (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 12:53:00) [7]да что то у меня не получается открыть вторую транзакцию, в то время когда первая еще не завершена
Yuvich (2003-02-11 12:49:00) [8]Да там вроде все просто.