Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.46 MB
Время: 0.007 c
14-70453
aga
2003-05-01 16:59
2003.05.22
Ftp-server


1-70210
Max1111
2003-05-11 11:13
2003.05.22
Как зарегистрировать свое расширение???


14-70426
Санечка
2003-05-01 20:36
2003.05.22
Открытие и сохранение файла (*.dbf)


3-70138
jen_bond
2003-04-30 17:27
2003.05.22
Перевод из нижнего регистра в верхний.


14-70451
tytus
2003-05-01 19:26
2003.05.22
Моя кнопка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский