Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Кто работал с 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]

Да там вроде все просто.


Наверх

Титульная страница Поиск, карта сайта Написать письмо