Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / не удалось начать распределенную транзакцию(( help / 16 сообщений из 16, страница 1 из 1
13.04.2020, 16:34
    #39946668
belik_lch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не удалось начать распределенную транзакцию(( help
Здрувствуйте, Ситуация следующая:
Пытаюсь выполнить простой запрос(пример) на удаленном сервере -
Код: 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
13.04.2020, 16:56
    #39946676
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не удалось начать распределенную транзакцию(( help
...
Рейтинг: 0 / 0
13.04.2020, 17:08
    #39946681
belik_lch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не удалось начать распределенную транзакцию(( help
invm, ошибка осталась
Код: sql
1.
EXECUTE @serv  @sql, @optname = 'remote proc transaction promotion', @optvalue = 'false'
...
Рейтинг: 0 / 0
13.04.2020, 17:52
    #39946691
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не удалось начать распределенную транзакцию(( help
belik_lch,

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

Если вы напишете простой запрос, использую имя из четырех частей, то распределенная транзакция не будет подниматься.
...
Рейтинг: 0 / 0
13.04.2020, 18:04
    #39946695
belik_lch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не удалось начать распределенную транзакцию(( help
Владислав Колосов,
Код: 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
13.04.2020, 18:21
    #39946701
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не удалось начать распределенную транзакцию(( help
belik_lch
Настраивать DTC не особо горю, так как серверов 30(Боевые) и один централизованный для сбора инфы
Так вам нужна распределённая транзакция или нет?

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

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

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

result - 1
...
Рейтинг: 0 / 0
13.04.2020, 18:50
    #39946716
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не удалось начать распределенную транзакцию(( help
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
13.04.2020, 18:52
    #39946717
belik_lch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не удалось начать распределенную транзакцию(( help
felix_ff, Отключил, работает), спасибо большое!!!
А какой толк тогда в распределенной транзакции если она не нужна?
...
Рейтинг: 0 / 0
13.04.2020, 18:56
    #39946720
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не удалось начать распределенную транзакцию(( help
belik_lch,

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

я обычно в таких случаях создаю два линка на один и тот же сервер, один с разрешением распределенки, другой без.
...
Рейтинг: 0 / 0
13.04.2020, 18:56
    #39946721
belik_lch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не удалось начать распределенную транзакцию(( help
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
13.04.2020, 18:58
    #39946723
belik_lch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не удалось начать распределенную транзакцию(( help
felix_ff, А в каких случаях может потребоваться использование распределенной транзакции??
Если это не обычный селект?
...
Рейтинг: 0 / 0
13.04.2020, 19:03
    #39946725
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
не удалось начать распределенную транзакцию(( help
belik_lch,

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

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

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

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


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