Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вопрос по транзакциям в назначенных заданиях (job) / 6 сообщений из 6, страница 1 из 1
08.02.2012, 11:52
    #37651414
K.T.V.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по транзакциям в назначенных заданиях (job)
Неожиданно обнаружила, что если процедура вызывается при помощи назначенного задания, то она не выполняется в единой транзакции (впечатление, что стоит автокоммит на каждую строчку).
Поясню на примере.
У нас стоит DB2 10 под z/os.
Создадим тестовую таблицу:
Код: sql
1.
2.
3.
4.
5.
create table test (id integer); 
insert into test (id) values (1);
insert into test (id) values (2);
insert into test (id) values (3);
create unique index Itest on test (id);


Напишем простейшую процедуру, которая делает 2 действия:
Код: sql
1.
2.
3.
	insert into test (id) values (4);
	--и вставим некорректное значение
	insert into test (id) values (1);


Если просто запустить процедуру, то она отвалится по exception'у и ничего вставлено не будет.
Вешаем задание на запуск этой процедуры через SYSPROC.ADMIN_TASK_ADD. И видим, что оно также выполняется с ошибкой, НО - значение 4 в таблицу будет вставлено!!!
Вопрос: чем это объясняется и как лечится? Какие параметры можно выставить?
Процедура отрабатывает корректно, если вручную перехватывать ошибку и делать Rollback к Savepoint в начале процедуры, но это же какая-то совсем странная реализация, не?
...
Рейтинг: 0 / 0
08.02.2012, 13:31
    #37651631
Victor Metelitsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по транзакциям в назначенных заданиях (job)
Не знаю насчёт for z/os, а для for LUW для блоков есть варианты begin atomic...end и begin...end. В случае ошибки все выражения будут откачены/откатаны/отроллбачены в первом случае, только ошибочное - во втором. (Для процедуры вы можете разместить begin atomic...end внутри begin...end). К автокоммиту это не имеет отношения. А имеет отношение - сделан ли commit либо rollback после вызова вашей процедуры. Видимо, если вы "просто" запускаете процедуру, это "просто" неявно делает rollback (либо всегда, когда нет явного commit'а, либо по обнаружении exception'а), а SYSPROC.ADMIN_TASK_ADD всё равно делает commit.
...
Рейтинг: 0 / 0
08.02.2012, 17:44
    #37652240
K.T.V.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по транзакциям в назначенных заданиях (job)
Спасибо, но насколько я понимаю, в z/os нет begin atomic в процедурах, только в триггерах :(
...
Рейтинг: 0 / 0
09.02.2012, 10:53
    #37653155
K.T.V.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по транзакциям в назначенных заданиях (job)
Правильно ли я понимаю, что при включенном автокоммите в DB2 процедуры выполняются в неявной транзакции, началом которой считается первый оператор, а концом - последний или же явный commit/rollback?
Почему это не работает при их выполнении с помощью назначенного задания?
...
Рейтинг: 0 / 0
09.02.2012, 15:58
    #37654107
CawaSPb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по транзакциям в назначенных заданиях (job)
K.T.V.,

Автокоммит - опция клиента, а не базы - Command Line Processor'а, ещё кого. Это не атрибут базы/сервера. Шедулер (считай клиент, таски выполняющий), вообще выбора не предоставляет.
По крайней мере так в DB2 for LUW.

Похоже, DB2 CLP в режиме автокоммита после неудачной операции автоматом делает rollback , что в вашем случае откатывает всё, сделанное процедурой.
При отключённом в CLP автокоммите транзакция может начаться и раньше вызова процедуры (с момента первого запроса после последнего коммита). CLP при этом вообще никаких коммитов/откатов сам не делает => если вывались в середине процедуры и содержимое не помечено как атомарное, то всё, выполненное до ошибочного statement'а может быть как зафиксировано, так и откачено.
...
Рейтинг: 0 / 0
09.02.2012, 16:28
    #37654185
K.T.V.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по транзакциям в назначенных заданиях (job)
Ясно, спасибо! Очень неудобный механизм после Sql Server'a...
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вопрос по транзакциям в назначенных заданиях (job) / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]