|
|
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть MSSQL 12.0.5000.0 SP2 на этом сервере настроен Linked Server "смотрящий" на MySQL На MSSQL сервере есть ДВЕ хранимые процедуры: SBO_SP_TransactionNotification sp_ewUpdate_DynamicField Из SBO_SP_TransactionNotification вызывается sp_ewUpdate_DynamicField . В sp_ewUpdate_DynamicField вызывается хранимая процедура из MySQL: Код: sql 1. т.е. в итоге получаем такую структуру вызовов: SBO_SP_TransactionNotification -> sp_ewUpdate_DynamicField -> exec ('call update_PrjCode(1)') at mysql Теперь суть проблемы: Если я из SSMS выполняю связки: exec ('call update_PrjCode(1)') at mysql - ОК sp_ewUpdate_DynamicField -> exec ('call update_PrjCode(1)') at mysql - ОК ДАЛЕЕ САМОЕ ИНТЕРЕСНОЕ: Самую длинную связку выполняет приложение (назовем его SAP): SBO_SP_TransactionNotification -> sp_ewUpdate_DynamicField -> exec ('call update_PrjCode(1)') at mysql Последняя ХП не выполняется. т.е. именно та, что физически лежит в прилинкованном MySQL. Пробовал сразу после выполнения писать во временную таблицу @@Error - таблица пустая. Пробовал try - catch блоками выловить ошибку - НИЧЕГО. Подскажите что ещё можо посмотреть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 10:08:59 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
MAULER, Пользователи, под которыми выполняете процедуру Вы и приложение одинаковы? Владельцы обоих процедур одинаковы или нет? В заголовках процедур нет EXECUTE AS? Как настроен Link Server - через керберос или в нем прописан логин/пароль к MySQL? Ну и просто "не выполнятся" процедура тоже не может. Что видно в профайлере по этому поводу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 10:47:30 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
ptr128, Пользователи, под которыми выполняете процедуру Вы и приложение одинаковы? - Да Владельцы обоих процедур одинаковы или нет? - Одинаковы В заголовках процедур нет EXECUTE AS? - нет Как настроен Link Server - через керберос или в нем прописан логин/пароль к MySQL? - прописан логин и пароль. Ну и просто "не выполнятся" процедура тоже не может. Что видно в профайлере по этому поводу? а вот тут интересно. Смогли таки выловить ошибку, воспользовавшись немного другим функционалом (по сути той же операции) Ошибка такая: "" The operation could not be performed because OLE DB provider "MSDASQL" for linked server "mysql" was unable to begin a distributed transaction. (CINF) CINF - это табоица настроек приложения. И это ошибку выводит само приложение в статусной строке. Очень похоже на то, что приложуха, читает настройки таблицы и согласно прочитанному вываливает алерты, один из которых я поймал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 11:39:08 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
MAULER, ну хочет dtc. Или дать или думать зачем :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 11:43:46 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
TaPaKну хочет dtc. Или дать или думать зачем :) У меня большие сомнения в том, что к MySQL можно малой кровью прикрутить поддержку MSDTC. Так что предпочтительный вариант - это закрывать транзакцию перед обращением к Linked Server. Видимо, транзакция открывается еще в процедуре SBO_SP_TransactionNotification до вызова sp_ewUpdate_DynamicField. Вот там, до вызова sp_ewUpdate_DynamicField ее и следует закрывать, выкручиваясь, если необходимо, логической транзакцией в пользовательской таблице транзакций и всем соответствующим ее обвесом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 11:58:38 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
MAULER, на провайдере Allow inprocess включен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 12:32:18 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
У SAP, вроде обычно, set implicit_transactions on ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 12:43:29 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
MAULER В sp_ewUpdate_DynamicField вызывается хранимая процедура из MySQL: Код: sql 1. т.е. в итоге получаем такую структуру вызовов: SBO_SP_TransactionNotification -> sp_ewUpdate_DynamicField -> exec ('call update_PrjCode(1)') at mysql Подскажите что ещё можо посмотреть? Коллега, есть крайне некошерный извращенный путь. Внутри sp_ewUpdate_DynamicField формировать динамик SQL, подставлять нужный код mysql и выполнять через xp_CMDShell и вызов mysql клиента для отработки вызова с нужным параметром на mysql сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 12:47:00 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
Andy_OLAP, То есть у Вас сам вызов "call update_PrjCode(1)" выполнится mysql клиентом, который будет запущен шеллом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 12:48:04 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
Попробовать Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 12:54:32 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
qeiugh, Вы поясните что это такое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 12:59:20 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
https://docs.microsoft.com/ru-ru/sql/relational-databases/system-stored-procedures/sp-serveroption-transact-sql Если этот параметр имеет значение FALSE (или OFF), локальная транзакция не станет распределенной при удаленном вызове процедуры на связанном сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 13:07:06 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
qeiugh, Так из SSMS всё же выполняется! Проблема в приложениии. Оно что-то мутит.. или я Вас не правильно понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 13:19:31 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
MAULERqeiugh, Оно что-то мутит.. или я Вас не правильно понимаю? Так я же писал выше - оно просто открывает транзакцию. А MySQL MSDTC не поддерживает. На том все и заканчивается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 13:34:47 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
ptr128, Проблема решилась внезапно: В свойствах Linked Server изменил опцию: Enable Promotion of Distributed Transactions for RPC c TRUE на FALSE Проверил, работает. Даже не знаю откуда ждать косяков? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 14:00:54 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
MAULERПроверил, работает. Даже не знаю откуда ждать косяков? Если процедура, вызываемая на MySQL модифицирует какие-то данные в БД MySQL, то эта модификация не будет откачена при откате транзакции на стороне MS SQL. Если же процдура никаких данных не модифицирует, то ни к каким ощутимым последствиям это не приведет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 14:05:44 |
|
||
|
Помогите найти ошибку с вызовом exec
|
|||
|---|---|---|---|
|
#18+
ptr128, Она обновляет единственное поле в таблице на MySQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.12.2017, 14:13:19 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39572000&tid=1690646]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
212ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 522ms |

| 0 / 0 |
