Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Web > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 12.03.2018, 10:34   #1
tae1980
Участник клуба
 
Регистрация: 02.02.2009
Адрес: г. Саратов
Сообщений: 784
Репутация: 22
По умолчанию Вложенные транзакции

Прошу пояснит не понятные мне моменты.
Начали транзакцию Т1, внутри неё начали транзакцию Т11, завершил Т11. Тут вопрос: должна ли фиксироваться Т11? Если нет, то почему? Предположим мы зафиксировали Т11.
Тут началась параллельная транзакция Т2, которая использует результат работы Т11. Начали, завершили, зафиксировали.
Тут Т1 отменяться, и как следствие отменяться результат Т11. НО! Т2 уже завершена! Отменить её невозможно, так как она параллельна Т1.

Получается все таки фиксировать вложенные транзакции нельзя?

Но тогда как быть в этой ситуации. Предположим мы создаем договор с фирмой Лютик в Т1. Но у нас нет ещё этой фирмы в контрагентах. В Т11, мы создали на неё данные, с фиксацией. После чего продолжили формировать договор. В этот момент в другом отделе, так же создают договор с этой же фирмой. Они видят что такой контрагент уже создан, и используют его.
То есть по сути Т11 отменять нельзя. Но и не фиксировать Т11 нельзя, так как в этом случае данные на одного контрагента будут созданы дважды, разным отделами.

"Кто виноват? И что делать?" (с)
__________________
С уважением, Алексей.

Последний раз редактировалось tae1980; 12.03.2018 в 10:48.
tae1980 вне форума   Ответить с цитированием
Старый 12.03.2018, 11:26   #2
tae1980
Участник клуба
 
Регистрация: 02.02.2009
Адрес: г. Саратов
Сообщений: 784
Репутация: 22
По умолчанию

Вот нашел цитата "Если внешняя транзакция откатывается, то все внутренние транзакции также будут отменены, независимо от того, были ли отдельные внутренние транзакции зафиксированы."
Значит по сути второй отдел пролете... Что делать со вторым договором? В случае фиксации Т11 и её откатом, он будет ссылаться на несуществующие данные.
__________________
С уважением, Алексей.
tae1980 вне форума   Ответить с цитированием
Старый 12.03.2018, 11:37   #3
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,599
Репутация: 6210
По умолчанию

Ну вот например для сиквела вложенная транзакция это чистой воды профанация. На самом деле решает все T1 - её откат откатит и все вложенные, не взирая на то, что они как бы и завершены ))
Цитата:
Что делать со вторым договором?
Не делать вложенных транзакций, они не для этого
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Старый 12.03.2018, 12:07   #4
tae1980
Участник клуба
 
Регистрация: 02.02.2009
Адрес: г. Саратов
Сообщений: 784
Репутация: 22
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Не делать вложенных транзакций, они не для этого
А можно привести приемную схему действий для данного случай?
Если я правильно понял теорию, то транзакция это всегда линейный процесс. Если начата транзакция её нельзя временно прекратить и начат другую, все последующие будут вложенными.
То есть, из ходя из этого для создания контрагента нужно использовать полностью независимый параллельный процесс. НО:
1. транзакции линейный. Значит нужно создать внешний процесс и ждать его завершения в Т1.
2. Хорошо поступили так. Но тогда есть хорошие шансы появления мусора. Когда Т1 отменяется, результат Т11 как внешнего процесса остается, а Т2 так и не наступает. Пока вижу выход только, в смериться и чистить вручную.
__________________
С уважением, Алексей.
tae1980 вне форума   Ответить с цитированием
Старый 12.03.2018, 12:56   #5
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,599
Репутация: 6210
По умолчанию

Как вариант выбирать (или создавать контрагента с независимой транзакцией) в предбаннике создания договора, тогда в самом договоре изменить его нельзя. Если договор по каким-то причинам не создался, то удалить контрагента, при условии, что он создан в предбаннике и за это время никто на него не сослался
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Старый 12.03.2018, 13:02   #6
tae1980
Участник клуба
 
Регистрация: 02.02.2009
Адрес: г. Саратов
Сообщений: 784
Репутация: 22
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
и за это время никто на него не сослался
А как это определить?
Есть стандартный механизм или только "ручной" анализ?
__________________
С уважением, Алексей.
tae1980 вне форума   Ответить с цитированием
Старый 12.03.2018, 13:30   #7
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,599
Репутация: 6210
По умолчанию

Цитата:
А как это определить?
Можно запросом проверить, можно в триггере на удаление не дать удалить в случае наличия присутствия, можно просто понадеяться на СУБД, которая не даст порушить ссылочную целостность если у договора контрагент внешняя ссылка))
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 12.03.2018 в 13:32.
Аватар вне форума   Ответить с цитированием
Старый 13.03.2018, 12:53   #8
hoolygan
Форумчанин
 
Регистрация: 11.04.2017
Сообщений: 64
Репутация: 10
По умолчанию

1. Не делать длительных транзакций.
2. Немного погуглить про уровни изоляции.
3. Паралельные транзакции будут обязательно - но уже в другом процессе, с другим SPId - и в них либо ждать завершения и коммита первой транзакции - либо надеяться, что "прокатит" - но не "прокатит" оно.
hoolygan вне форума   Ответить с цитированием
Старый 16.03.2018, 00:15   #9
tae1980
Участник клуба
 
Регистрация: 02.02.2009
Адрес: г. Саратов
Сообщений: 784
Репутация: 22
По умолчанию

Цитата:
Сообщение от hoolygan Посмотреть сообщение
1. Не делать длительных транзакций.
Дурацкий вопрос. Что значит "длинных"? Как считать длину и прочее. В общем я понимаю ответ. НО это то же самое, что и "не используйте сложных алгоритмов, иначе другим программистам будет трудно разобраться вашей программе." А если тот другой программист "даун" и пр? И ему сложно понять что 2+2=4 (утрировано). Где предел простаты?
В описанном в примере случае ИМХО важно организация работы с договорами.
Начало работы, нажатие кнопки "Новый договор". И пошла транзакция. Окончание работы/транзакции - подготовка договора, нажатие кнопки сохранить.
Ты хоть тресни, но есть четки границы работы с договором. И иногда уходят часы, на подготовку одного договора. Я молчу про подготовку в рамках договора тех.задания, календарного плана, приложений и пр. Это части единого документа.
Пока вижу выход только в выводе ВСЕХ спорных моментов в самостоятельные процессы.

Цитата:
Сообщение от hoolygan Посмотреть сообщение
2. Немного погуглить про уровни изоляции.
Читаю уже две недели. С одной стороны материал много, с другой толкового мало. Но нашел 4 интересных статьи. Пытаюсь их курить.

Цитата:
Сообщение от hoolygan Посмотреть сообщение
3. Паралельные транзакции будут обязательно - но уже в другом процессе, с другим SPId - и в них либо ждать завершения и коммита первой транзакции - либо надеяться, что "прокатит" - но не "прокатит" оно.
Законы Мерфи ни кто не отменял.
__________________
С уважением, Алексей.

Последний раз редактировалось tae1980; 16.03.2018 в 00:19.
tae1980 вне форума   Ответить с цитированием
Старый 16.03.2018, 07:48   #10
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,599
Репутация: 6210
По умолчанию

Начало транзакции по кнопке Создать или Изменить и есть длительная транзакция. Нормальная транзакция должна начинаться по кнопке Сохранить ))
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
транзакции sem_1989 SQL, базы данных 1 23.09.2011 22:43
транзакции пауэрлифтинг БД в Delphi 0 27.05.2010 02:24
Транзакции в DLL acidlord БД в Delphi 0 28.11.2009 14:31
Транзакции и try nikmay Общие вопросы Delphi 1 30.07.2009 21:13
Транзакции + ADO azat БД в Delphi 3 14.01.2008 12:47


06:38.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru