Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.03.03;
Скачать: [xml.tar.bz2];

Вниз

Кто работал с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.01 c
14-5833
V-Isa
2003-02-12 19:10
2003.03.03
Нет такой программы, которую нельзя было бы сделать ...


14-5830
Игорь Шевченко
2003-02-13 16:16
2003.03.03
fido7.humor.filtered


3-5419
Makhanev A.S.
2003-02-09 23:38
2003.03.03
Прорисовка в DBGrid...


1-5601
Stultum
2003-02-19 21:22
2003.03.03
Как


3-5379
serg1977
2003-02-11 16:08
2003.03.03
Создание БД MS ACCESS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский