SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.03.2010 15:39:00

SergeyCh
Участник
Зарегистрирован: 03.03.2010
Сообщений: 4

XA Transaction

Здравствуйте. Помогите разобраться с ХА транзакциями. Почитал http://dev.mysql.com/doc/refman/5.0/en/xa-states.html , но приведенный пример с одним соединением.
Вот так я сделал, но это не работает, вернее не совсем так, как я бы хотел. Транзакции работают, но каждая отдельно :

            cn2.Execute "XA START 'mytrans'
            cn.Execute "XA START 'mytrans'"
           
            cn2.Execute "INSERT ....."
            cn.Execute "UPDATE ......."
           
            cn.Execute "XA END 'mytrans'"
            cn2.Execute "XA END 'mytrans'"
           
            cn.Execute "XA PREPARE  'mytrans'"
            cn2.Execute "XA PREPARE  'mytrans'"
           
            cn2.Execute "XA COMMIT  'mytrans'"
            cn.Execute "XA COMMIT  'mytrans'"

Как использовать два соединения, чтобы они работали в одной транзакции ?

Неактивен

 

#2 03.03.2010 19:47:42

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: XA Transaction

XA используется не для того, чтобы два соединения работали в одной транзакции,
а для того, чтобы два сервера могли одновременно или применить, или откатить
какбы распределенную транзакцию.

В этом случае нужно делать нужно именно так, как у Вас написано.

Неактивен

 

#3 03.03.2010 20:16:01

SergeyCh
Участник
Зарегистрирован: 03.03.2010
Сообщений: 4

Re: XA Transaction

Спасибо за ответ. Возможно неправильно сформулировал, но в данном случае у меня оба сервера не одновременно приняли транзакцию. Тестировал с точками останова. Так вот , остановил между двумя коммитами и на одном из серверов изменилась информация, на втором, естественно нет. В этом случае ни о какой распределенной транзакции не может быть и речи.
Еше, несколько вопросов, чтобы прояснить ситуацию. Повторюсь, что ХА транзакции для меня новинка. 1) должны ли быть одной версии сервера MySQL ?  2) Сам сервер MySQL является какбы диспечером транзакций или нужно еще чтото дополнительно ставить, типа плагина ?
Если я всетаки делал все как надо, почему у меня НЕ одновременно на двух серверах принимаются транзакции ?
Спасибо

Отредактированно SergeyCh (03.03.2010 20:56:25)

Неактивен

 

#4 04.03.2010 19:39:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: XA Transaction

Как Вы отслеживаете одновременность?

Неактивен

 

#5 04.03.2010 20:32:22

SergeyCh
Участник
Зарегистрирован: 03.03.2010
Сообщений: 4

Re: XA Transaction

Проимитировав ситуацию отключения одного из серверов между коммитами. Тоесть выполнил вышеприведенный пример без последней строчки. Ситуация вполне реальна-- отключение интернета, перезагрузка и т.д. В этом случае данные на cn2 приняты были, на первом нет.

Неактивен

 

#6 04.03.2010 21:26:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: XA Transaction

К сожалению, в этом месте есть бага — корректно убитое соединение (пришедший
RST в пакете) полностью убивает все ассоциированные с соединением транзакции
(в том числе и XA). Если соединение убилось не целиком (например, моргнула сеть,
наиболее частое действие), то Вы можете восстановить транзакцию из другого со-
единения.

В ближайшее время, видимо, не починят. http://bugs.mysql.com/bug.php?id=12161

Неактивен

 

#7 05.03.2010 12:07:31

SergeyCh
Участник
Зарегистрирован: 03.03.2010
Сообщений: 4

Re: XA Transaction

Спасибо за разъяснение. Почитал по Вашей ссылке, перспектива не радужная. На мой взгляд подход не совсем верный . В логах можно поковырятся, если оба соединения к разным базам на одном сервере, но если сервера разные, то .... Было бы надежнее , имхо, делать менеджер транзакций, чтото вроде MS DTC. Кстати, есть ли для MySQL подобный менеджер ?
Спасибо.

Неактивен

 

#8 05.03.2010 15:23:18

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: XA Transaction

Подход нормальный, просто в документе Open group есть xa_forget, которого нет
в MySQL, и который надо бы доделать.

Менеджера транзакций готового нету. Если напишете — дайте знать, мы его будем
рекламировать smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson