Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 linked mysql, trigger, unable to begin a distributed transaction.  [new]
Алексей Ку.
Member

Откуда: Дубна
Сообщений: 295
Пишу триггер для репликации MSSQL и MySQL.
USE [isau]
GO
/****** Object:  Trigger [dbo].[trg1]    Script Date: 11/28/2011 13:20:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[trg1]
   ON  [isau].[dbo].[clrtstngtbl]
   AFTER UPDATE
AS 
BEGIN
	--SET NOCOUNT ON;
	update openquery(BITRIX_5, 'select id, name from tmp_test_alex_424')
	set name = t.name_2
	from inserted as t
	where id = t.ID_2

END

Возникает ошибка:
unable to begin a distributed transaction.

Все настройки MSDTC выставил верные. Простое обновление проходит. Ошибка возникает именно в триггере.
Напоролся на эту тему:
https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=583576&hl=unable%20begin%20distributed%20transaction%20mysql
Я правильно понял, что из триггера вообще нельзя обращаться к линкед серверу?
Может ли кто-то рассказать более подробно решение этой проблемы, через временую таблицу или джоб?
Какая разница между локальной и распределённой транзакцией? (ссылка на BOL?)
28 ноя 11, 15:35    [11671832]     Ответить | Цитировать Сообщить модератору
 Re: linked mysql, trigger, unable to begin a distributed transaction.  [new]
Алексей Ку.
Member

Откуда: Дубна
Сообщений: 295
Пожалуй стоит добавить, что MySQL сервер стоит под линуксом или убунтой.... Вообщем не windows. PhpMyAdmin пишет 5.1.54-1ubuntu4.
28 ноя 11, 15:41    [11671892]     Ответить | Цитировать Сообщить модератору
 Re: linked mysql, trigger, unable to begin a distributed transaction.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Алексей Ку.
что MySQL сервер стоит под линуксом или убунтой

И как вы тогда сделали там "Все настройки MSDTC выставил верные" ?
28 ноя 11, 15:48    [11671989]     Ответить | Цитировать Сообщить модератору
 Re: linked mysql, trigger, unable to begin a distributed transaction.  [new]
Алексей Ку.
Member

Откуда: Дубна
Сообщений: 295


К сообщению приложен файл. Размер - 42Kb
28 ноя 11, 15:56    [11672105]     Ответить | Цитировать Сообщить модератору
 Re: linked mysql, trigger, unable to begin a distributed transaction.  [new]
Алексей Ку.
Member

Откуда: Дубна
Сообщений: 295
В том и дело, что на нём я ничего не настраивал.
Главный вопрос: Я правильно понял, что из триггера вообще нельзя обращаться к линкед серверу?

Если это всё же возможно, то как пограмотнее объснить админу машины, на которой стоит май, чтобы он настроил msdtc. Там вообще есть такие настройки? Может кто-то кинет ссыль про то как настраивать dtc на убунте?
28 ноя 11, 15:58    [11672128]     Ответить | Цитировать Сообщить модератору
 Re: linked mysql, trigger, unable to begin a distributed transaction.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Алексей Ку.
Главный вопрос: Я правильно понял, что из триггера вообще нельзя обращаться к линкед серверу?


Из триггера нельзя что то делать вне транзакции
Неважно с линкед сервером или без него
28 ноя 11, 16:01    [11672163]     Ответить | Цитировать Сообщить модератору
 Re: linked mysql, trigger, unable to begin a distributed transaction.  [new]
Алексей Ку.
Member

Откуда: Дубна
Сообщений: 295
Glory
Из триггера нельзя что то делать вне транзакции
Неважно с линкед сервером или без него


Я всё равно не пойму, это ограничивает обращение к линкед серверу?
28 ноя 11, 16:08    [11672254]     Ответить | Цитировать Сообщить модератору
 Re: linked mysql, trigger, unable to begin a distributed transaction.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Алексей Ку.
Я всё равно не пойму, это ограничивает обращение к линкед серверу?

Вы знаете, что такое транзакция ?
28 ноя 11, 16:09    [11672270]     Ответить | Цитировать Сообщить модератору
 Re: linked mysql, trigger, unable to begin a distributed transaction.  [new]
Алексей Ку.
Member

Откуда: Дубна
Сообщений: 295
Что такое транзакция и распределённая транзакция изучил. Главный вопрос тем не менее до конца для себя не осветил.

Попробовал создать хранимку, которая выполняет запрос. Если запускать чисто хранимку, то всё хорошо. Из тела триггера опять же ошибка. В связи с этим новые вопросы:

- Кто может подсказать как настраивать диспетчер удалённых транзакций на Убунту. Есть ли там это вообще? Можешь статья, ссылка. В убунте я полный ноль.
- Как зпустить хранимку сразу после триггера? Запланированый джоб? Как его делать. Очень прошу дать ссылку на BOL где описано как пользоваться этим планировщиком?
- Как можно создать временную таблицу, которая будет доступна некоторое время после завершения работы триггера и потом удалится(после отработки хранимки)?

Прошу не критиковать строго. Спасибо.
30 ноя 11, 23:42    [11686750]     Ответить | Цитировать Сообщить модератору
 Re: linked mysql, trigger, unable to begin a distributed transaction.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Алексей Ку.
- Кто может подсказать как настраивать диспетчер удалённых транзакций на Убунту. Есть ли там это вообще? Можешь статья, ссылка. В убунте я полный ноль.

Спросить у тех, кто ставил MySQL на Ubuntu ?

Алексей Ку.
- Как зпустить хранимку сразу после триггера? Запланированый джоб? Как его делать. Очень прошу дать ссылку на BOL где описано как пользоваться этим планировщиком?

Триггер вообще не сам по себе запускается
Триггер - это реакция на команду. В вашем случае - команду UPDATE

Алексей Ку.
- Как можно создать временную таблицу, которая будет доступна некоторое время после завершения работы триггера и потом удалится(после отработки хранимки)?

Никак

Алексей Ку.
Прошу не критиковать строго. Спасибо.

Прежде, чем бросаться реализовывать свою синхронизацию между разными СУБД, да еще на разных платформах, было бы хорошо провести исследование уже реализованных подобных задач
1 дек 11, 11:50    [11688260]     Ответить | Цитировать Сообщить модератору
 Re: linked mysql, trigger, unable to begin a distributed transaction.  [new]
Алексей Ку.
Member

Откуда: Дубна
Сообщений: 295
Glory
Триггер вообще не сам по себе запускается
Триггер - это реакция на команду. В вашем случае - команду UPDATE

Триггер-то понятно что сам по себе запускается. Я имел ввиду как запланировать хранимку после срабатывания триггера. Чтобы она запустилась вне триггера, а сама по себе. И ожно ли её передать параметры из триггера (id изменённых полей)?

Glory
Прежде, чем бросаться реализовывать свою синхронизацию между разными СУБД, да еще на разных платформах, было бы хорошо провести исследование уже реализованных подобных задач

С этого я и начинал, но мои мытарства по готовым продуктам результатов не принесли. Если бы кто-то носом ткнул в нужное место, тогда да...
1 дек 11, 12:58    [11688804]     Ответить | Цитировать Сообщить модератору
 Re: linked mysql, trigger, unable to begin a distributed transaction.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Алексей Ку.
Я имел ввиду как запланировать хранимку после срабатывания триггера.

А откуда вы знаете, когда сработает триггер ?
А если 100 пользователей разом выполнят команду UPDATE ?
А если 10000 ?
1 дек 11, 13:02    [11688834]     Ответить | Цитировать Сообщить модератору
 Re: linked mysql, trigger, unable to begin a distributed transaction.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Алексей Ку.
Если бы кто-то носом ткнул в нужное место, тогда да...

Начинается с разбора стандартных механизмов репликации
С выяснения необходимых для них технических возможностей.

А не с выяснения поддерживает ли MySQL на Ubuntu распределенные транзакции. Ибо половина написанного кода не работает.
1 дек 11, 13:05    [11688865]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить