powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / Актуализация при вмешательстве в прошлое.
14 сообщений из 64, страница 3 из 3
Актуализация при вмешательстве в прошлое.
    #34008654
chroot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кидман
Garya
Пример: В базе данных в разных таблицах находятся значения A и B, которые исходя из их согласованности никогда не должны быть равны (что проверяется триггером).В исходном состоянии A=1; B=2.
На версионнике одновременно запускаются две транзакции. Одна пытается присвоить A:=5, другая пытается присвоить B:=5.

Я хоть и не спец в версионниках, но уверен, что вторая транзакция обламается или сразу, или после коммита первой - в зависимости от настроек (это касается Интербейза и Фаейрбёрда).

Garya
В каждой из этих транзакций считываются значения A и B ДО их запуска. Срабатывает триггер в транзакции №1 и проверяет (А=5) != (B=2) - значит изменение A разрешено. Срабатывает триггер в транзакции №2 и проверяет (A=1) != (B=5) - значит изменение B тоже разрешено. Обе транзакции сохраняют новые значения A и B и закомичивают свои транзакции, новые версии A=5 и B=5 сохраняются в базе данных, нарушив согласованность данных.

Этого не может быть, откуда Вы это взяли?

Не поверите, но дело обстоит именно так, как расписал уважаемый Garya.
Для версионников при таких требованиях к целостности нужно самому создавать "точку" синхронизации, которую обязаны пройти все транзакции (аналог критической секции или семафора в многопоточном программировании). Это может быть фальшивое обновление строчки в другой таблице, модификация вспомогательной таблицы, на худой конец - блокирование всей таблицы A или B до конца транзакции.
...
Рейтинг: 0 / 0
Актуализация при вмешательстве в прошлое.
    #34009063
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПример: В базе данных в разных таблицах находятся значения A и B, которые исходя из их согласованности никогда не должны быть равны (что проверяется триггером). В исходном состоянии A=1; B=2.

возникает вопрос. если существует взаимосвязь столбцов, то почему для контроля целостности выбран триггер, а не check constraint на таблицу?
По-моему дальше можно не продолжать рассматривать этот "пример".

авторОбе транзакции сохраняют новые значения A и B и закомичивают свои транзакции

Вопрос - по очереди? Да. В этом случае будет несогласованность, см. выше.
Триггер работает в контексте транзакции, соответственно видит данные только в том виде, в котором позволяет уровень изолированности.

авторТакая ситуация не может произойти на блокировочнике.
Вопрос - почему нет? триггеры в блокировочнике срабатывают по другому?
триггеры игнорируют уровень изолированности транзакции, в которой они стартовали?
...
Рейтинг: 0 / 0
Актуализация при вмешательстве в прошлое.
    #34009091
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а почему бы интересующимся не прийти на Софтул на стенд фирмы ANSOFT, и посмотреть как там работает ERP AVARDA на Firebird? На 100-гиговой базе, и туче одновременных пользователей?

http://www.ibase.ru/ansoft.html%5D%7C>]http://www.ibase.ru/ansoft.html]|> http://www.ibase.ru/ansoft.html" TARGET="_blank">www.ibase.ru/ansoft.html
...
Рейтинг: 0 / 0
Актуализация при вмешательстве в прошлое.
    #34009142
Кидман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кидман
Garya, перебор даже в картах плох. Зачем рассуждать о том, чего не знаете?

Garya, приношу свои извинения. Я невнимательно прочитал Ваш пост, не заметил, что речь идет о разных таблицах.

З.Ы. Вспомнился случай, который произошел, если не ошибаюсь, у комментатора Озерова: "Блохин выходит один на один с вратарем! Удар! Г-О-О-Л!!! Нет, штанга. К тому же это был и не Блохин"
...
Рейтинг: 0 / 0
Актуализация при вмешательстве в прошлое.
    #34009589
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvвозникает вопрос. если существует взаимосвязь столбцов, то почему для контроля целостности выбран триггер, а не check constraint на таблицу? По-моему дальше можно не продолжать рассматривать этот "пример".Этот "пример" выбран для простоты иллюстрации. Естественно, в данном конкретном случае можно использовать Check conctraint, то есть ситуации, в которых используются именно триггеры или хранимые процедуры (случается же такое иногда? :) ). Городить пример, в котором выкрутиться на Check невозможно, я не стал, полагая, что об этом и так все знают.

Кидман...уверен, что вторая транзакция обламается или сразу, или после коммита первой...Как Вы себе представляете подобный "облом"? Мы говорим "commit", а получаем молчаливый "rollback"? Если возникает ошибка, то какая именно? "Одновременный доступ к данным запрещен настройками"? Или просто "internal error" с выпадением в осадок? :) Если ошибку можно обработать, то что должно стоять в конце обработчика, что-то вроде "commit commit" или "rollback commit"? :) Я готов допустить, что я чего-то недопонимаю или не знаю. Но я привожу примеры, иллюстрирующие свое понимание, либо даю ссылку на первоисточник. Из Вашего, Кидман, поста в стиле "Борист, ты не прав!", мне не удалось понять, в чем конкретно я не прав и почему. Либо проиллюстрируйте (опишите поведение приведенных в примере транзакций на версионнике), либо приведите ссылку на материал, из которого этого стало бы ясно.

GaryaТакая ситуация не может произойти на блокировочнике.Поясню. Если "грязное чтение" разрешено, то либо Транзакция №1 узнает о том, что A стало равно B, либо Транзакция №2. И откатит транзакцию, запретив изменение своих данных. Так что "грязное чтение" может быть не только вредным, но и полезным... :) (перефразированная шутка Фоменко).
Если "грязное чтение" запрещено, то одна транзакция окажется в ожидании завершения другой транзакции. Здесь может подстерегать совсем другая опасность - дедлок (когда Транзакция №1 и Транзакция №2 одновременно ожидают завершения друг друга). Но на блокировочнике действительно ситуация, когда A станет равно B помимо желания разработчиков, воспроизвестись в принципе не может. Кто не согласен - прошу проиллюстрировать на конкретном примере.
...
Рейтинг: 0 / 0
Актуализация при вмешательстве в прошлое.
    #34009617
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кидман Кидман
Garya, перебор даже в картах плох. Зачем рассуждать о том, чего не знаете?

Garya, приношу свои извинения. Я невнимательно прочитал Ваш пост, не заметил, что речь идет о разных таблицах.

З.Ы. Вспомнился случай, который произошел, если не ошибаюсь, у комментатора Озерова: "Блохин выходит один на один с вратарем! Удар! Г-О-О-Л!!! Нет, штанга. К тому же это был и не Блохин" Ничего страшного, со всяким бывает... :) Вы тоже извините, если я Вас задел.
...
Рейтинг: 0 / 0
Актуализация при вмешательстве в прошлое.
    #34009737
olegloa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищь а Вы знаете что dead-lock выдают и версионники, а не только блокировочники? :-) А ваш пример с триггероми просто не пройдёт на отдельных серверах (тотже Оракл пошлёт с мутирующими таблицами). Так чта...
...
Рейтинг: 0 / 0
Актуализация при вмешательстве в прошлое.
    #34010179
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче. все это классические аномалии искажения чтения или записи.

читать тут:
http://www.osp.ru/text/302/181466/

шайтан! osp.ru все испортил. как ссылки так и вторую часть статьи в 5-ом номере.... :-(
...
Рейтинг: 0 / 0
Актуализация при вмешательстве в прошлое.
    #34010194
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извиняюсь, не дописал - это называется серия статей Лили Козленко
под названием "Введение в управление транзакциями". 4 части. 2-ая, как я вижу, запорота на osp по кодировке.
Найти ссылки на статьи можно поиском указанного названия на www.osp.ru
...
Рейтинг: 0 / 0
Актуализация при вмешательстве в прошлое.
    #34010344
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegloaТоварищь а Вы знаете что dead-lock выдают и версионникиДедлок возможен только при блокировке и ожидании ее завершения. Если блокировки нет, дедлок возникнуть не может. Идея "версионников" - избегать блокировок созданием локальных копий с некоторых участков информации. Тем не менее, реальные СУБД "в чистом виде" версионниками, как правило, не бывают. Обычно они до некоторой степени "блокировочники" - в особенности, если заданы уровни изоляции транзакций, которые без блокировок не достижимы. Говорить, что та или иная СУБД относится к тому или иному классу, видимо не совсем корректно. Можно говорить о том, что они "тяготеют" к тому или другому. Возможно, я не совсем корректно отнес IB к "чисто версионникам".
...
Рейтинг: 0 / 0
Актуализация при вмешательстве в прошлое.
    #34010606
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 All. Приношу извинения за то, что невольно увел тему обсуждения в другое русло. Предлагаю вернуться к обсуждению темы. Для тех, у кого есть желание продолжить обсуждение на тему "версионники/блокировочники", предлагаю продолжить его на форуме " Сравнение СУБД ".
...
Рейтинг: 0 / 0
Актуализация при вмешательстве в прошлое.
    #34011208
Uncle_Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Garya2 All. Приношу извинения за то, что невольно увел тему обсуждения в другое русло. Предлагаю вернуться к обсуждению темы...
Всем спасибо, просветили. Вот что значит зарыться в одной теме на несколько лет.
До недавного времени пользовался серваком пионера отечественого учета "Финансы без проблем" По нынешним меркам тема вроде как не перспективная. Но вот базовая идея заложенная в основу до сих пор не дает успокоится.
В двух словах: РСУБД как класс отсутствует. Все учетные регистры являют собой объекты(записи) заряжаемые в память при старте. Все динамические расчетные данные в том же виде. Сервак старенький, однопоточный модификация данных априори не требует транзакций. Автоактуализация решена до боли в сердце просто, в случае вмешательства в прошлое, откат на ближайший месяц и полный перерасчет всех и вся. Вроде не современно и гигабайтные объемы в память не влезут, но реактивность потрясает и снимает кучу головняка реализаторам приложений. Я себе подумал, может эта тематика как то получила развитие в нынешнем мире. Похоже все утопло в реляционках. :)
...
Рейтинг: 0 / 0
Актуализация при вмешательстве в прошлое.
    #34011437
SergeyVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GaryaНу, не всё так просто. На самом деле каких-то существенных отличий между версионниками и блокировочниками нет. Ждет или не ждет блокировочник, может зависеть от уровня изоляции транзакий. Если "грязное чтение" разрешено, то он может и не ждать. С версионником - аналогично. Если версионник не ждет, значит он рискует получить несогласованные данные. ...

Garya, например, версионник Oracle не ждет и не рискует получить несогласованные данные.

Далее Ваш пример про таблицы не подтверждает Ваши слова, а только показывает, особенности работы СУБД. К чему этот пример? Да версионник Oracle может читать таблицу, которая в данный момент изменяется, и что?

Чтобы сохранить целостость в Вашем примере, нужно просто заблокировать изменяемые стоки на время транзакции.
...
Рейтинг: 0 / 0
Актуализация при вмешательстве в прошлое.
    #34011633
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyVLGarya, например, версионник Oracle не ждет и не рискует получить несогласованные данные.
...
Чтобы сохранить целостость в Вашем примере, нужно просто заблокировать изменяемые стоки на время транзакции.Во-первых, для начала, нужно ДОГАДАТЬСЯ это сделать.
Во-вторых, Oracle - это не совсем версионник. Это помесь версионника с блокировочником.
В-третьих, хочется продолжить дискуссию именно по этому вопросу, то я уже дал ссылку на форум, где это можно сделать. В этой теме это оффтоп.

Специально создал там тему для желающих обсудить этот вопрос.
...
Рейтинг: 0 / 0
14 сообщений из 64, страница 3 из 3
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / Актуализация при вмешательстве в прошлое.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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