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

Откуда:
Сообщений: 8
Доброго времени суток, форумчане!
Возникла такая ситуация:
Подключил linked server, назовём его ls. На нём в базе DB имеется процедура sp_print, которая выводит несколько print'ов.
create procedure sp_print
as
  print 1
  print 2
  print 3
go
При вызове этой процедуры на самом сервере получаю закономерный результат:
1
2
3

Однако, при вызове через линк:
exec ls.DB..sp_print
Получаю строки в обратном порядке:
3
2
1

Подскажите, почему так получается?

Оба сервера:
Microsoft SQL Server 2008 (SP2) - 10.0.4000.0 (X64)
Sep 16 2010 19:43:16
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (VM)
6 сен 11, 08:00    [11232003]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура через linked server  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
[quot Karramba]
Однако, при вызове через линк:
exec ls.DB..sp_print
Получаю строки в обратном порядке:
3
2
1


Хммм... Забавно. Поведение стабильное? Если 20 раз вызвать - всегда вот так, без вариантов?
6 сен 11, 10:54    [11232678]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура через linked server  [new]
Karramba
Member

Откуда:
Сообщений: 8
SamMan,

да. тут привожу упрощенную процедуру, которую делал для проверки. и рабочая и тестовая ведут себя одинаково.
6 сен 11, 11:38    [11233044]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура через linked server  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Karramba
SamMan,

да. тут привожу упрощенную процедуру, которую делал для проверки. и рабочая и тестовая ведут себя одинаково.


Хмм... Попробуйте так - возьмите одну машину с 2-мя инстансами, дефолтным и именованным. Последний сделайте линкованным сервером на первом. Повторите эксперимент. У меня он проходит отлично, 1-2-3 при любых раскладах.
6 сен 11, 12:22    [11233440]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура через linked server  [new]
Karramba
Member

Откуда:
Сообщений: 8
Хмм... Попробуйте так - возьмите одну машину с 2-мя инстансами, дефолтным и именованным. Последний сделайте линкованным сервером на первом. Повторите эксперимент. У меня он проходит отлично, 1-2-3 при любых раскладах.[/quot]
Попробовал. Создавал linked server как SQL Server с указанием именем инстанса. Так действительно сохраняется порядок. Возможно, дело в способе связи? Заскриптовал ls, с которым сложности:
EXEC master.dbo.sp_addlinkedserver @server = N'REAL_BASE', @srvproduct=N'REAL_BASE', @provider=N'SQLNCLI', @datasrc=N'server,port№', @catalog=N'DB'
sp_serveroption:
@optname=N'collation compatible', @optvalue=N'false'
@optname=N'data access', @optvalue=N'true'
@optname=N'dist', @optvalue=N'false'
@optname=N'pub', @optvalue=N'false'
@optname=N'rpc', @optvalue=N'true'
@optname=N'rpc out', @optvalue=N'true'
@optname=N'sub', @optvalue=N'false'
@optname=N'connect timeout', @optvalue=N'0'
@optname=N'collation name', @optvalue=null
@optname=N'lazy schema validation', @optvalue=N'true'
@optname=N'query timeout', @optvalue=N'0'
@optname=N'use remote collation', @optvalue=N'true'
@optname=N'remote proc transaction promotion', @optvalue=N'true'
6 сен 11, 14:00    [11234390]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура через linked server  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Karramba,

Ну... методом исключения приходим к тому что опции линк-серверов не совпадают? Попробуйте выставить на проблемном линк-сервере такие значения (все, без исключения):
EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'collation compatible', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'data access', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'dist', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'pub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'rpc', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'rpc out', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'sub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'connect timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'collation name', @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'lazy schema validation', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'query timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'use remote collation', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO

Имя только свое там не забудьте подставить...
6 сен 11, 15:09    [11235063]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура через linked server  [new]
Karramba
Member

Откуда:
Сообщений: 8
SamMan
Karramba,

Ну... методом исключения приходим к тому что опции линк-серверов не совпадают? Попробуйте выставить на проблемном линк-сервере такие значения (все, без исключения):
EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'rpc', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'WINR2\MSSQL2', @optname=N'lazy schema validation', @optvalue=N'false'
GO

Имеется расхождение только в этих двух параметрах. Как я и думал, замена их значений не изменила результат.
6 сен 11, 15:26    [11235260]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура через linked server  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Karramba
Имеется расхождение только в этих двух параметрах. Как я и думал, замена их значений не изменила результат.


Тады волей-неволей приходим к заключению что что-то не так (с настройками) самого удаленного сервера. Ибо удал. сервер в виде инстанса есть такой же удален. сервер, без исключений. Можете воспроизвести поведение 3-2-1 вообще на любом ином удаленном сервере (физическом, логическом) кроме проблемного? Почти уверен что нет, не получится это у вас.
6 сен 11, 17:25    [11236474]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура через linked server  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
И кстати, о птичках... Только сейчас заметил - у вас же уд. серв. ТОЖЕ MSSQL?? Тогда откуда в строке его определения провайдеры, датасорсы и прочая шелуха? И что за странный @srvproduct вместо положенного @srvproduct=N'SQL Server'?
6 сен 11, 17:31    [11236535]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура через linked server  [new]
Karramba
Member

Откуда:
Сообщений: 8
SamMan
Тады волей-неволей приходим к заключению что что-то не так (с настройками) самого удаленного сервера. Ибо удал. сервер в виде инстанса есть такой же удален. сервер, без исключений. Можете воспроизвести поведение 3-2-1 вообще на любом ином удаленном сервере (физическом, логическом) кроме проблемного? Почти уверен что нет, не получится это у вас.

В том-то и дело, что было подключено 2 linked server'а: один удалённый, второй к инстансу на той же машине. Создавал их наш dba, ls к локальному инстансу потом удалил(видимо, тестировал).
SamMan
И кстати, о птичках... Только сейчас заметил - у вас же уд. серв. ТОЖЕ MSSQL?? Тогда откуда в строке его определения провайдеры, датасорсы и прочая шелуха? И что за странный @srvproduct вместо положенного @srvproduct=N'SQL Server'?

dba он такой dba... Не раскрывает свою задумку. Да, все сервера MSSQL.

Тем не менее, попробовал создать ls с нормальной строкой:
EXEC master.dbo.sp_addlinkedserver @server = N'server_name', @srvproduct=N'SQL Server'
Результат вызова хранимой процедуры остался прежним.
Наверно, какая-то фишка транспортного уровня?
8 сен 11, 10:29    [11245422]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая процедура через linked server  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Karramba
Наверно, какая-то фишка транспортного уровня?


Очень похоже на то, что с конкретного LS клиент (т.е. "наш", "не-удаленный" сервер) получает пакеты (сетевые) не в том порядке как их отправляет LS. Вообще-то протокол TCP/IP гарантирует правильный порядок пакетов при получении, но в частном случае видимо удалось провести "тонкий тюнинг" (если не сказать просто - сломать) этого протокола. Как такое может быть и где можно "покрутить обратно" не скажу - не силен в низкоуровневых сетевых штучках-дрючках. Ясно одно - на "нормальном" LS будет все исполняться как 1-2-3 и никак иначе. Да вы и сами уже в том убедились...
8 сен 11, 18:26    [11250050]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить