Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Теряю бинарные данные при передаче по linked server  [new]
любитель линкованных серверов
Guest
Доброго дня!
Проблема примерно такая.

Есть два сиквела С1 и С2.
+ сервера

С1
Microsoft SQL Server 2005 - 9.00.4309.00 (Intel X86) Aug 9 2010 15:00:05 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
С2
Microsoft SQL Server 2005 - 9.00.4053.00 (Intel X86) May 26 2009 14:24:20 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Соединены по линкованному серверу
+ линк.сервер
@provider=N'SQLNCLI'
@useself=N'False', @rmtuser=N'sa'
При использовании Login's current security context в плане ошибки ничего не меняется.
При использовании OLE DB провайдера также ничего не меняется.


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

Сервер С1 периодически обращается к серверу С2 с запросом типа
select top 1 id, field1, field2, ... field_byn from view
Поля - nvarchar небольшой длины, datetime, int, всего 17 штук. field_byn - поле varbinary(max). View примерно такая -
select f1, f2, f3, FileByn 
from TableFilesDescription 
 inner join TableFilesByn on id = id

Трудность в следующем - периодически (от раз в неделю до неск. раз в день) в поле field_byn возвращается значение 0x. При этом реально в БД на сервере С2 лежит нормальный бинарник.
Проявляется на файлах размером в 7-10Мб и более. Хотя это происходит не всегда, никакой зависимости не нашли. Как правило файлы и бОльшего размера "проскакивают" на ура.

Был раз, когда работа встала совсем - файлы размером более 6Мб передаваться перестали вообще.
Пробовали пересоздавать линкованный сервер. С разными провайдерами, разной аутентификацией и т.п.
Перезагрузка сервера (!) спасла.
Как представляется, проблема в линкованном сервере. Видимо, где-то утечка памяти или нечто подобное. Поставили последний найденный CU (в списке фиксов всех CU, более поздних того, что был, подобных проблем не нашли) - проблема сохраняется.

Подняли тестовый стенд - ошибку не получили, хотя нагрузку давали бОльшую, чем в продакшене.

Итого - Хелп!
Что можно проверить на предмет источника ошибки, какие меры к устранению можно предпринять?
10 ноя 10, 13:10    [9754099]     Ответить | Цитировать Сообщить модератору
 Re: Теряю бинарные данные при передаче по linked server  [new]
любитель линкованных серверов
Guest
Вот гад, сегодня опять "упал".
Сообщение на клиенте такое :

OLE DB provider "SQLNCLI" for linked server "pararuram" returned message "Операция отменена".
OLE DB provider "SQLNCLI" for linked server "pararuram" returned message "Ошибка связи".
Cannot fetch a row from OLE DB provider "SQLNCLI" for linked server "pararuram".

При селекте (из SSMS, например) из view возвращается одна строка. В столбце с бинарником - 0x.
Реально при этом view возвращает полсотни записей.
Если создать линкованные сервера с других инстансов на сервер С2 - все строки возвращаются полностью.
Такое ощущение, что при выборке данных с удалённой машины как только объём переданных данных превышает некоторый лимит, выборка строк просто останавливается.

Рестарт сервиса все вернул в рабочее состояние.
Хрень какая то.
10 ноя 10, 15:15    [9755410]     Ответить | Цитировать Сообщить модератору
 Re: Теряю бинарные данные при передаче по linked server  [new]
любитель линкованных серверов
Guest
Up!

Товарищи, есть какие нибудь идеи, как устранить такое поведение? Пока мысль одна - ждать "окно" и переустанавливать весь сиквел.
Может как провайдера переустановить или ещё какие мысли кто подкинет?
12 ноя 10, 09:28    [9765069]     Ответить | Цитировать Сообщить модератору
 Re: Теряю бинарные данные при передаче по linked server  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
любитель линкованных серверов, запрос покажите
12 ноя 10, 10:10    [9765328]     Ответить | Цитировать Сообщить модератору
 Re: Теряю бинарные данные при передаче по linked server  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
любитель линкованных серверов,
если обращаетесь к Linked Server напрямую, попробуйте
через OPENQUERY.
12 ноя 10, 10:25    [9765434]     Ответить | Цитировать Сообщить модератору
 Re: Теряю бинарные данные при передаче по linked server  [new]
любитель линкованных серверов
Guest
Geep
любитель линкованных серверов, запрос покажите

Пожалуйста.
Вот запрос из рабочего кода :
select
	  @SED_Doc_Id		= SED_Doc_Id
	, @User_Id		= [User_Id]
	, @Node_Id		= [Node_Id]
	, @AltCode		= [AltCode]
	, @SED_DocNum		= [SED_DocNum]
	, @FileName		= [FileName]
	, @FileExt		= [FileExt]
	, @FileSize		= [FileSize]
	, @Sed_System		= [Sed_System]
	, @IsFormalized		= [IsFormalized]
	, @IF_File		= [IF_File]
	, @_isFileReceived	= cast(1 as bit)
from _BUFFERDB._BUFFER_DB.spd.v_Exchange_TKM E
where E.Exchange_Id = @Exchange_Id
Из студии, при повторении ситуации выполняется такой же запрос, только без условия where.

spd.v_Exchange_TKM - это вьюха.
	select
	  E.Exchange_Id
	, cast(buff.Get_DocId_bySpDocId(60,E.SpDoc_Id) as int)				as [SED_Doc_Id]
	, E.Ex_Message.value('(TKM/User_Id)[1]','int')					as [User_Id]
	, E.Ex_Message.value('(TKM/Node_Id)[1]','int')					as [Node_Id]
	, E.Ex_Message.value('(TKM/AltCode)[1]','nvarchar(127)')			as [AltCode]
	, E.Ex_Message.value('(TKM/DocNum)[1]','nvarchar(255)')				as [SED_DocNum]
	, E.Ex_Message.value('(TKM/FileName)[1]','nvarchar(255)')			as [FileName]
	, E.Ex_Message.value('(TKM/FileExt)[1]','nvarchar(31)')				as [FileExt]
	, E.Ex_Message.value('(TKM/FileSize)[1]','int')					as [FileSize]
	, E.Ex_Message.value('(TKM/OuterSystem)[1]','smallint')				as [Sed_System]
	, E.Ex_Message.value('(TKM/IsFormalized)[1]','bit')				as [IsFormalized]
	, EFD.ExFD_FileData								as [IF_File]
from buff.Exchange E
	inner join buff.Exchange_FileData EFD on EFD.Exchange_Id = E.Exchange_Id
where
	E.Sys_Recepient_Id = 40

buff.Get_DocId_bySpDocId - скалярная функция, в общем случае возвращает varchar(127), который для E.Sys_Recepient_Id = 40 является числом - посему cast as int.
12 ноя 10, 10:29    [9765459]     Ответить | Цитировать Сообщить модератору
 Re: Теряю бинарные данные при передаче по linked server  [new]
любитель линкованных серверов
Guest
Geep
любитель линкованных серверов,
если обращаетесь к Linked Server напрямую, попробуйте
через OPENQUERY.
OPENQUERY не пробовал. Попробую как опять такая штука будет, хотя не понимаю, что это может дать. Поясни пожалуйста.
Пробовал OPENROWSET. Не помогло.
12 ноя 10, 10:32    [9765483]     Ответить | Цитировать Сообщить модератору
 Re: Теряю бинарные данные при передаче по linked server  [new]
любитель линкованных серверов
Guest
Ну и ещё разик апну перед выходными :)
13 ноя 10, 11:40    [9772453]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Теряю бинарные данные при передаче по linked server  [new]
aa1122
Guest
Столкнулся с такой же проблемой после переезда на новое железо.
Microsoft SQL Server 2005 - 9.00.4035

Мелкие файлы перекачиваются, крупные нет ( 0x в поле nvarchar(max)).

Похоже проблема в сервере который тянет данные.
25 ноя 11, 10:01    [11656415]     Ответить | Цитировать Сообщить модератору
 Re: Теряю бинарные данные при передаче по linked server  [new]
RouR
Member

Откуда:
Сообщений: 174
До перезагрузки прокачивались файлы < 30 Mb.
После перезагрузки SQL (только сервер который тянет данные), прокачиваются файлы < 130 Mb.

Из-за чего ограничение?
25 ноя 11, 12:18    [11657623]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить