Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.22;
Скачать: CL | DM;

Вниз

Транзакция   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.014 c
14-70464
Hawk
2003-05-03 16:10
2003.05.22
Как залогиниться на www сайт, програмно.


3-70122
GAlex
2003-04-29 15:36
2003.05.22
Не пойму в чем косяк при создании временных таблиц


11-70193
Alexei Dragoner
2002-08-07 12:22
2003.05.22
Вот и Delphi 7.... Какие планы?


14-70439
xman
2003-05-02 12:59
2003.05.22
Кто знает?


4-70563
TankMan
2003-02-13 00:37
2003.05.22
Как сделать TPageControl и TTabsSheet ...например черного цвета?