Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 про linked server  [new]
plz
Guest
где бы кроме БОЛ почитать про linked servers?
вот например не могу понять, как лучше
выполнять запрос:
select * from ORCL..HR.EMPLOYEES e join ORCL..HR.JOBS j on e.job_id = j.job_id

или
select *
from openquery (ORCL, 'select * from HR.EMPLOYEES e, HR.JOBS j where e.job_id = j.job_id')


в примере выше какой сервер будет выполнять соединение, тот, в чьем синтаксице написан запрос, или нет?
т.е. вроде по логике, если соединение написано в оракловом стиле или с участием оракловых функций,
то и выполнять его может только оракл, ну и обратное верно для SQL Server-a.
и тогда вопрос, кого лучше заставлять работать, прилинкованный сервер или свой родной SQL Server?
31 июл 12, 15:54    [12941749]     Ответить | Цитировать Сообщить модератору
 Re: про linked server  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37200
Какое еще такое соединение с оракла? O_o
Соединение всегда будет выполнять MS SQL к серверу, указанному в параметрах подключения линкед-сервера.

plz
вот например не могу понять, как лучше

Второе лучше, поскольку есть нехилый шанс, что MSSQL сначала перетащит себе обе таблицы, а уже потом будет их соединять.
31 июл 12, 16:09    [12941858]     Ответить | Цитировать Сообщить модератору
 Re: про linked server  [new]
plz
Guest
Гавриленко Сергей Алексеевич,

имелось в виду соединение = join, а не соединение в смысле connection.
но вы уже и ответили, что в случае openquery соединение(join) выполнит оракл,
а во втором случае "есть нехилый шанс, что MSSQL сначала перетащит себе обе таблицы, а уже потом будет их соединять"
31 июл 12, 16:26    [12942012]     Ответить | Цитировать Сообщить модератору
 Re: про linked server  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37200
plz
Гавриленко Сергей Алексеевич,

имелось в виду соединение = join, а не соединение в смысле connection.
но вы уже и ответили, что в случае openquery соединение(join) выполнит оракл,
а во втором случае "есть нехилый шанс, что MSSQL сначала перетащит себе обе таблицы, а уже потом будет их соединять"
А, вы таки про join. В любом случае, план запроса никто не отменял.

Сообщение было отредактировано: 31 июл 12, 16:28
31 июл 12, 16:27    [12942027]     Ответить | Цитировать Сообщить модератору
 Re: про linked server  [new]
plz
Guest
блин, ну вроде "если соединение написано в оракловом стиле или с участием оракловых функций"
подразумевало перечисление таблиц через запятую, со звездями на полях если соединение внешнее

а для плана запроса надо бы еще иметь SHOWPLAN,
как раз этого у меня нет.
linked servers тоже созданы не мной, так что у меня даже не хватает сведений, чтоб их тут дать,
чтобы все мои непонятки спросить.
например еще имеется linked server к DB2,
в скрипте вот это:
+
EXEC master.dbo.sp_addlinkedserver @server = N'DB2SRVR', @srvproduct=N'DB2SRVR', @provider=N'MSDASQL', @datasrc=N'DB2SRVR'

GO

EXEC master.dbo.sp_serveroption @server=N'DB2SRVR', @optname=N'collation compatible', @optvalue=N'false'
GO

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

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

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

EXEC master.dbo.sp_serveroption @server=N'DB2SRVR', @optname=N'rpc', @optvalue=N'true'
GO

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

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

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

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

EXEC master.dbo.sp_serveroption @server=N'DB2SRVR', @optname=N'lazy schema validation', @optvalue=N'true'
GO

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

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

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


соединяется 1 раз из 10 попыток, когда не может соединиться, пишет вот такое:
OLE DB provider "MSDASQL" for linked server "DB2SRVR" returned message "[Microsoft][ODBC Driver Manager] Invalid connection string attribute".
OLE DB provider "MSDASQL" for linked server "DB2SRVR" returned message "[Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed".
OLE DB provider "MSDASQL" for linked server "DB2SRVR" returned message "[IBM][CLI Driver] SQL30081N  A communication error has been detected. Communication protocol being used: "TCP/IP".  Communication API being used: "SOCKETS".  Location where the error was detected: "10.182.242.134".  Communication function detecting the error: "recv".  Protocol specific error code(s): "10054", "*", "0".  SQLSTATE=08001
".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "DB2SRVR".


не подскажете ли, это вообще на чьей стороне ошибка: DB2, SQLServer или вообще это дело в сети?
судя по гуглу, это все же DB2,
но вдруг кто тут на форуме знает...
31 июл 12, 16:41    [12942131]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить