Форум: "Базы";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];
ВнизТранзакция Найти похожие ветки
← →
Skalp (2003-05-02 14:20) [0]Всем привет! Хочу разобраться как работает транзакция. Это понятие униварсальное для всех БД, так что в данном случае указание типа БД несет чисто формальный характер.
Допустим у меня есть хранимая процедура, которая производит несколько операции (INSERT/UPDATE/DELETE) в нескольких таблицах (tab1, tab2, tab3). И мне надо чтобы выполнилось либо все, либо - ничего, и поэтому я указываю, чтобы это выполнялась как одна тразакция.
А вопрос заключается в следующем: как работает сервер? В процессе выполнения моей транзакции все команды других пользователей находятся в ожидании? Или в процессе работы над моей транзакцией сервер может парралельно переключиться на задачу другого пользователя, которая например отредактирует таблицу tab3, которая редактируется в начале моей транзакции да еще и в конце ее.
Если да, то может возникнуть ситуация, которая приведет к неправильному результату. Мне надо, чтобы в течении транзакции доступ всех пользователей к таблицам которых она (ХП) задевает был перекрыт. Или это решается только с помощью трехзвенной архитектуры?
← →
Sergey Masloff (2003-05-02 14:30) [1]Перекрывать доступ - дело не твое а сервера. Стартуешь транзакцию, изменяешь все что нужно и подтверждаешь. Если я стартую транзакцию после тебя, то вижу данные такими как они были во время старта твоей транзакции. Допустим, я их заселектил и начинаю изменять. В это время мне по фиг что ты там делаешь с данными. Если ты подтвердил транзакцию изменив записи, то я при сохранении данных получу исключения что-то типа данные изменены другим пользователем. Если ты откатил - то я спокойно сохранюсь. Такого рода конфликты - типичная ситуация для многопользовательской среды. Блокирование же всех других пользователей на момент твоей работы - моветон и путь к падению производительности.
P.S. Реальные механизмы конечно несколько сложнее и зависят от СУБД. Например, как это реализовано в InterBase я представляю очень хорошо, примерно представляю как в Oracle но это не особо и нужно знать.
← →
Skalp (2003-05-02 14:39) [2]>>Если ты подтвердил транзакцию изменив записи, то я при
>>сохранении данных получу исключения что-то типа данные
>>изменены другим пользователем. Если ты откатил - то я
>>спокойно сохранюсь.
Такая система меня устраивает!!!
Спасибо большое Сергей за разъяснение.
← →
MsGuns (2003-05-02 16:02) [3]>Skalp (02.05.03 14:20)
>Хочу разобраться как работает транзакция. Это понятие униварсальное для всех БД, так что в данном случае указание типа БД несет чисто формальный характер
Понятие, действительно "универсальное", но принцип действия существенно отличается. Например, для локальных БД (парадокс, дибэйз), транзакции как таковые не реализованы вообще. Только на уровне одной таблицы, да и то глючно.
← →
sunrider (2003-05-03 01:25) [4]Реально на уровне локальных таблиц транзакции реализуются программно - блокировкой таблицы. Пока я изменяю - ты ждешь.
Вот все это уже твои проблемы, как программиста.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c