SQL Server, удаленная хранимая процедура и транзакции DTC

Наша организация хранит много важных данных в базе данных Adabas для мэйнфреймов. У нас есть ODBC-доступ к этим данным, и мы успешно запросили / обновили их из C#, используя ODBC / Natural «хранимые процедуры».

Что мы хотели бы сделать сейчас, так это запросить таблицу мэйнфрейма из хранимых процедур SQL Server 2005, записать результаты в табличную переменную, обработать ее и объединить результат с собственными данными SQL в качестве набора результатов.

Выполнение Natural proc из SQL работает нормально, когда мы просто выбираем его; однако, когда мы вставляем результат в табличную переменную, кажется, что SQL запускает распределенную транзакцию, которая, в свою очередь, наносит ущерб нашим соединениям.

Учитывая, что мы не выполняем обновления, можно ли отключить это поведение DTC-эскалации?

Есть какие-нибудь советы по правильной настройке DTC для взаимодействия с драйвером Shadow ODBC DataDirect (ранее Neon Systems)?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
0
7 648
4

Ответы 4

Я не уверен насчет DTC, но DTSX (службы интеграции) могут быть полезны для перемещения данных. Однако, если вы можете просто запросить данные, вы можете посмотреть на добавление связанного сервера для прямого доступа. Затем вы можете просто написать простой запрос для заполнения таблицы на основе выбора из таблицы связанного сервера.

Это правда. Как вы могли догадаться, процедуры Natural, которые мы хотим вызвать, выполняют поиск и вычисления, которые мы хотели бы сохранить на этом уровне, если это возможно.

Проверьте SET REMOTE_PROC_TRANSACTIONS OFF, который должен его отключить. Или sp_serveroption, чтобы настроить связанный сервер в целом, а не на пакет.

Поскольку вы пишете на стороне MS SQL, вы запускаете транзакцию. По умолчанию он увеличивается независимо от того, нужно это или нет. Даже если переменная таблицы не участвует в транзакции.

Раньше у меня были аналогичные проблемы, когда сторона MS SQL ведет себя по-разному в зависимости от того, пишет ли MS SQL, в хранимой процедуре и других материалах. Самый надежный способ, который я нашел, - использовать динамические вызовы SQL на моем связанном сервере Sybase ...

У меня не сработало на SQL Server 2008. (Выдал ту же ошибку «удаленный сервер не поддерживает распределенные транзакции».) Однако изменение параметра «продвижение удаленной транзакции» на странице свойств «параметры сервера» для связанного сервера сработало. .

Christian Hudon 26.03.2013 00:10

Следующий код устанавливает «Включить продвижение распределенных транзакций» для связанных серверов:

USE [master]
GO
EXEC master.dbo.sp_serveroption @server=N'REMOTE_SERVER', @optname=N'remote proc transaction promotion', @optvalue=N'false'
GO

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

Другие вопросы по теме