Помогите с организацией транзакций при запросе к двум БД плз

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Vit
Сообщения: 19
Зарегистрирован: 05 ноя 2005, 03:22

Помогите с организацией транзакций при запросе к двум БД плз

Сообщение Vit » 05 ноя 2005, 03:57

Уважаемый Господа помогите плз.

Имеются 2 таблицы в двух разных БД.
Слить в одну нельзя т.к. разные хозяева баз.

Логика работы следующая:

Клиент (поток HTTP сервера) стартует транзакцию.
вставляет в одну из таблицу первой БД timestamp, дабы обеспечить пессимистическую блокировку записи, затем выбирает данные из первой БД и передает их пользователю (WEB page). Остальные пользователи не должны иметь возможность обращаться к этой же записи (для чего и делается блокировка). Пользователь может подтвердить или отвергнуть предложение (а может и вообще забыть, но в этом случае по небольшому таймауту транзакция откатывается).
В случае если пользователь подтверждает, то нужно сделать следующее:

попытаться внести изменения в таблицу в второй БД.
внести изменения в туже таблицу, в которую вставлялся timestamp и еще в одну таблицу в первой БД. Причем логика работы такова, что транзакции для обращения к первой БД должна быть с параметром nowait, а транзакция ко второй БД должна быть с параметром wait. Таким образом объеденить запрос в одну транзакцию и передать в нее два хендла БД не получаецца.
Кто нидь работал с двузфайзным завершением транзакций и поможет ли это в моем случае? Лезть в IB API не пужает совсем.

P.S. Делать две отдельные транзакции и подтверждать в клиенте сначала одну потом другую вариант не очень красивый. Две базы должны быть хорошо синхронизированы, а вариант зависания случайного или злонамеренного, когда одна транзакция подтверждена, а вторая нет приводит к ОЧЕНЬ неприятным последствиям.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 08 ноя 2005, 11:26

RTFM isc_start_multiple

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 08 ноя 2005, 11:48

смотри про двухфазный коммит в www.ibase.ru/devinfo/ibtrans.htm

Ответить