Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.019 c
6-5692
KoHe4Ho }|{e 6ot
2003-01-12 22:30
2003.03.03
Аспекты с сетью


3-5409
Cossys
2003-02-12 12:42
2003.03.03
Повреждение базы, Paradox 7.0


14-5730
Ricks
2003-02-13 23:51
2003.03.03
ICQ


14-5746
michael_b
2003-02-15 20:30
2003.03.03
Ограничение по времени


9-5372
Ricks
2002-09-22 12:37
2003.03.03
Clipping, или как там