Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
08.02.2012, 11:52
|
|||
|---|---|---|---|
|
|||
Вопрос по транзакциям в назначенных заданиях (job) |
|||
|
#18+
Неожиданно обнаружила, что если процедура вызывается при помощи назначенного задания, то она не выполняется в единой транзакции (впечатление, что стоит автокоммит на каждую строчку). Поясню на примере. У нас стоит DB2 10 под z/os. Создадим тестовую таблицу: Код: sql 1. 2. 3. 4. 5. Напишем простейшую процедуру, которая делает 2 действия: Код: sql 1. 2. 3. Если просто запустить процедуру, то она отвалится по exception'у и ничего вставлено не будет. Вешаем задание на запуск этой процедуры через SYSPROC.ADMIN_TASK_ADD. И видим, что оно также выполняется с ошибкой, НО - значение 4 в таблицу будет вставлено!!! Вопрос: чем это объясняется и как лечится? Какие параметры можно выставить? Процедура отрабатывает корректно, если вручную перехватывать ошибку и делать Rollback к Savepoint в начале процедуры, но это же какая-то совсем странная реализация, не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.02.2012, 13:31
|
|||
|---|---|---|---|
|
|||
Вопрос по транзакциям в назначенных заданиях (job) |
|||
|
#18+
Не знаю насчёт 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.02.2012, 17:44
|
|||
|---|---|---|---|
|
|||
Вопрос по транзакциям в назначенных заданиях (job) |
|||
|
#18+
Спасибо, но насколько я понимаю, в z/os нет begin atomic в процедурах, только в триггерах :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.02.2012, 10:53
|
|||
|---|---|---|---|
|
|||
Вопрос по транзакциям в назначенных заданиях (job) |
|||
|
#18+
Правильно ли я понимаю, что при включенном автокоммите в DB2 процедуры выполняются в неявной транзакции, началом которой считается первый оператор, а концом - последний или же явный commit/rollback? Почему это не работает при их выполнении с помощью назначенного задания? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.02.2012, 15:58
|
|||
|---|---|---|---|
Вопрос по транзакциям в назначенных заданиях (job) |
|||
|
#18+
K.T.V., Автокоммит - опция клиента, а не базы - Command Line Processor'а, ещё кого. Это не атрибут базы/сервера. Шедулер (считай клиент, таски выполняющий), вообще выбора не предоставляет. По крайней мере так в DB2 for LUW. Похоже, DB2 CLP в режиме автокоммита после неудачной операции автоматом делает rollback , что в вашем случае откатывает всё, сделанное процедурой. При отключённом в CLP автокоммите транзакция может начаться и раньше вызова процедуры (с момента первого запроса после последнего коммита). CLP при этом вообще никаких коммитов/откатов сам не делает => если вывались в середине процедуры и содержимое не помечено как атомарное, то всё, выполненное до ошибочного statement'а может быть как зафиксировано, так и откачено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=43&mobile=1&tid=1601939]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
70ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
3ms |
| others: | 279ms |
| total: | 446ms |

| 0 / 0 |
