powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / не удалось начать распределенную транзакцию(( help
16 сообщений из 16, страница 1 из 1
не удалось начать распределенную транзакцию(( help
    #39946668
belik_lch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здрувствуйте, Ситуация следующая:
Пытаюсь выполнить простой запрос(пример) на удаленном сервере -
Код: sql
1.
2.
3.
4.
5.
DECLARE @serv nvarchar(50) = QUOTENAME('LinkedServ')+N'.'+'database'+N'.sys.sp_executesql'
DECLARE @tbl table (id int, name varchar(50));
DECLARE @sql nvarchar(4000) = 'select id, name from someTable'
insert into @tbl 
EXECUTE @serv  @sql


Получаю следующую ошибку:

1. Поставщик OLE DB "SQLNCLI11" для связанного сервера "LinkedServ" вернул сообщение "Партнерский диспетчер транзакций отключил поддержку удаленных и сетевых транзакций.".
2. Операция не может быть выполнена, так как поставщику OLE DB "SQLNCLI11" для связанного сервера "LinkedServ" не удалось начать распределенную транзакцию.


Много перечитал на эту тему, делал следущ.:
1 Менял параметры линка:

2 Менял параметры поставщика "SQLNCLI":

3 Менял на сервере(клиенте) параметры DTC:

На сервере источнике не менял параметры DTC т.к. с ним работают люди(не хочу повлечь каких то неприятностей ибо нужно перезапускать службу SQLSERVER)

Скажите:
1) можно ли как то обойти данную ошибку,либо решить ее?
2) Обазательно ли после изменений свойств DTC, перезапускать SQLSERVER?
3) Почему при использовании почти аналогичного механизма OPENROWSETнету данной ошибки, он что не начинает распределенную транзакцию? (До этого истользовал OPENROWSET, но кавычки задрали уже, а sp_executesql делает красиво)
4) Может можно как-то вытащить данные с помощью АУТ параметра?
Код: sql
1.
2.
3.
4.
5.
declare @serv nvarchar(50) = QUOTENAME('LinkedServer')+N'.'+'Database'+N'.sys.sp_executesql'
declare @tbl table (id int, name varchar(50));
DECLARE @sql nvarchar(4000) = '
insert into @tbl select id, name  from someTable'
EXECUTE @serv  @sql, N'@tbl table(id int, name varchar(50)) OUTPUT', @tbl = @tbl OUTPUT 


Но, к сожалению:
Проверьте число, порядок и значения переданных параметров.

А мне ведь просто нужно обработать и забрать данные с других серверов, ресурсами сервера-источника(((
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946676
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946681
belik_lch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, ошибка осталась
Код: sql
1.
EXECUTE @serv  @sql, @optname = 'remote proc transaction promotion', @optvalue = 'false'
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946691
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belik_lch,

может безопасность DTC неверно настроена, может порты перекрыты.

Если вы напишете простой запрос, использую имя из четырех частей, то распределенная транзакция не будет подниматься.
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946695
belik_lch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
Код: sql
1.
2.
3.
4.
DECLARE @serv nvarchar(50) = QUOTENAME('LinkedServ')+N'.'+'database'+N'.sys.sp_executesql'
DECLARE @tbl table (id int, name varchar(50));
DECLARE @sql nvarchar(4000) = 'select id, name from someTable'
EXECUTE @serv  @sql

-- так все работает, я вижу результат запроса
Код: sql
1.
2.
3.
4.
5.
DECLARE @serv nvarchar(50) = QUOTENAME('LinkedServ')+N'.'+'database'+N'.sys.sp_executesql'
DECLARE @tbl table (id int, name varchar(50));
DECLARE @sql nvarchar(4000) = 'select id, name from someTable'
insert into @tbl -- после добавления данной строки...
EXECUTE @serv  @sql

-- получаю ту самую ошибку
То есть Основная проблема в том, что я не могу забрать эти данные с удаленного сервера на сервер-клиент
Я так понимаю данная операция "insert into @tbl" как раз таки и поднимает распределенный запрос
Настраивать DTC не особо горю, так как серверов 30(Боевые) и один централизованный для сбора инфы
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946701
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belik_lch
Настраивать DTC не особо горю, так как серверов 30(Боевые) и один централизованный для сбора инфы
Так вам нужна распределённая транзакция или нет?

Если нет, то вам invm дал ответ.
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946704
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belik_lch,

вообще если не хотите использовать DTC то отключение опции на линке должно решить проблему.

вы ее точно отключили? покажите результат
Код: sql
1.
select is_remote_proc_transaction_promotion_enabled from sys.servers where [name] = 'LinkedServ'
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946714
belik_lch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff,

result - 1
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946716
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belik_lch,

ну так вы ее не отключили:

Код: sql
1.
2.
3.
4.
USE [master]
GO
EXEC master.dbo.sp_serveroption @server=N'LinkedServ', @optname=N'remote proc transaction promotion', @optvalue=N'false'
GO



и пробуйте свой insert exec
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946717
belik_lch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff, Отключил, работает), спасибо большое!!!
А какой толк тогда в распределенной транзакции если она не нужна?
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946720
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belik_lch,

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

я обычно в таких случаях создаю два линка на один и тот же сервер, один с разрешением распределенки, другой без.
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946721
belik_lch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff,
Я нашел такой ответ на просторах интернета
кто-то"This is the same problem as you posted before. The key here is that
INSERT (local table) EXEC (remote SP)
doesn't work when the remote SP is executed against loopback server."
И уже пригрустил
А оказалось все так просто)
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946723
belik_lch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff, А в каких случаях может потребоваться использование распределенной транзакции??
Если это не обычный селект?
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946725
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belik_lch,

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

если грубо:
1) открытие локальной транзакции на сервере А
2) изменение статуса карточной транзакции на in_processing
3) изменение остатка по счету на сервере Б (при этом при обращении к линку автоматически происходит продвижение транзакции до распредленной)
4) при ходе каких либо логических проверок на сервере А необходимо откатить локальную транзакцию
5) локальный rollback повлечет откат и распределнки
6) консистентное состояние обоих баз серверов А и Б
7) profit

без распределенки у вас бы был целых ворох проблем в плане контроля целостности "общей системы учета" для различных серверов.
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946733
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belik_lch
А какой толк тогда в распределенной транзакции если она не нужна?
Если она не нужна, то никакого. Странный вопрос :-)
...
Рейтинг: 0 / 0
не удалось начать распределенную транзакцию(( help
    #39946756
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
belik_lch,

За время всей этой дискуссии можно было бы освоить SSIS и научиться копировать из точки А в точку Б не соединяя сервера.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / не удалось начать распределенную транзакцию(( help
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]