Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Linked server pros and cons

Уважаемый форум!

Академический вопрос: "за" и "против" linked server для обмена данными между двумя базами на раздельных SQL серверах?
Какие есть альтернативы?

Спасибо большое!
Ответ: IFK,

используйте Integration Services в таком случае.
Вопрос: Linked server DBF

Добрый день.
Возникла у меня такая ситуация: создал связанный сервер
USE master
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1

EXEC sp_addlinkedserver
@server = 'dbf',
@srvproduct=N'OLE DB Provider for ACE',
@provider = 'Microsoft.ACE.OLEDB.12.0',
@datasrc = 'C:\My\OKATO',
@provstr = 'DBASE IV'
Настроил безопасность - всё работало, делал запросы - короче всё ОК, прошло время возникла снова необходимость и в результате запросов следующая ошибка

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "dbf" returned message "Неопознанная ошибка".
Msg 7303, Level 16, State 1, Line 2
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "dbf".
Что это может быть. Заранее благодарен.
Ответ:
patrick1968
Добрый день.
Возникла у меня такая ситуация: создал связанный сервер
USE master
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1

EXEC sp_addlinkedserver
@server = 'dbf',
@srvproduct=N'OLE DB Provider for ACE',
@provider = 'Microsoft.ACE.OLEDB.12.0',
@datasrc = 'C:\My\OKATO',
@provstr = 'DBASE IV'
Настроил безопасность - всё работало, делал запросы - короче всё ОК, прошло время возникла снова необходимость и в результате запросов следующая ошибка

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "dbf" returned message "Неопознанная ошибка".
Msg 7303, Level 16, State 1, Line 2
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "dbf".
Что это может быть. Заранее благодарен.


сначала надо получит разрешения драйвера чтобы работат для вас ха ха

USE master
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 



и потом илползуйте ваш скрипт

EXEC sp_addlinkedserver
   @server = 'dbf',
   @srvproduct=N'OLE DB Provider for ACE', 
   @provider = 'Microsoft.ACE.OLEDB.12.0',
   @datasrc = 'C:\My\OKATO',
   @provstr = 'DBASE IV'
Вопрос: Как создать в MS SQL Server 2008 R2 linked server к Teradata Database?

Просьба уточнить:
а) какие драйверы и провайдеры данных для этого необходимо установить;
б) какие DSN создать;
в) и какие настройки провайдеров сделать перед тем, как можно будет создать linked server.
Ответ: odin2000,

Вот здесь - довольно подробно изложено, как и что делать.
З.Ы. Если забить в гугле фразу "sql server linked server teradata" то это второй сверху результат.
Вопрос: Linked Server работает из под dbo но не работает у пользователей

select @@VERSION
Microsoft SQL Server 2005 - 9.00.5057.00 (X64) Mar 25 2011 13:33:31 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Evaluation Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)


создал Linked Server, скрипт:
EXEC master.dbo.sp_addlinkedserver @server = N'xlsFile', @srvproduct=N'MS ACE OLEDB 12.0', @provider=N'Microsoft.ACE.OLEDB.12.0', @datasrc=N'D:\Test.xls', @provstr=N'Excel 12.0;'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'xlsFile',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

GO
EXEC master.dbo.sp_serveroption @server=N'xlsFile', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'xlsFile', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'xlsFile', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'xlsFile', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'xlsFile', @optname=N'rpc', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'xlsFile', @optname=N'rpc out', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'xlsFile', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'xlsFile', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'xlsFile', @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'xlsFile', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'xlsFile', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'xlsFile', @optname=N'use remote collation', @optvalue=N'true'


делаю запрос под админом (dbo)
SELECT * FROM [xlsFile]...[Лист1$]

все работает, все отлично

пытаюсь то же самое выполнить под обычным пользователем - не выходит
cannot initialize the data source object of ole db provider "microsoft.ace.oledb.12.0" for linked server "xlsFile"


понимаю, что скорее всего где то накосячил с правами, где то что то не недовключил, но никак не могу понять где.

авторизация в сети доменная, на sql - windows authentication
Ответ: меня смутила в т.ч. фраза про 32 бита

Grant rights to TEMP directory
This step is required only for 32-bit SQL Server with any OLE DB provider.

сервак х64, Провайдер MS ACE OLEDB 12.0 так же х64

х32 нигде не пахнет. однако, доступ к TEMP-у админа(под ним работают все службы скуля) пришлось таки давать юзерам. Поэтому и называю пляской с бубном >> и вроде не надо, а на всякий случай давай дадим, вдруг поможет. помогло :)
Вопрос: Ошибка при подключении к linked server-у "Время ожидания входа в систему истекло"

Дано: пытаюсь подключиться к linked server-у. Получаю ошибку:

Поставщик OLE DB "SQLNCLI11" для связанного сервера "192.168.17.210" вернул сообщение "Время ожидания входа в систему истекло".
Поставщик OLE DB "SQLNCLI11" для связанного сервера "192.168.17.210" вернул сообщение "Не удается завершить вход в систему из-за задержки ответа на этапе предварительного согласования параметров".
Сообщение 258, уровень 16, состояние 1, строка 7
Поставщик TCP: Ошибка времени ожидания [258].

Мне прислали настройки удалённого сервера. Те, что со словом remote, следующие:
name minimum maximum config_value run_value
remote access 0 1 1 1
remote admin connections 0 1 0 0
remote login timeout (s) 0 2147483647 10 10
remote proc trans 0 1 0 0
remote query timeout (s) 0 2147483647 600 600


Куда копать и что менять в настройках серверов, чтобы решить проблему?
Ответ:
Дедушка
подобное сообщение ошибки может означать "всё что угодно".
попробуйте увеличить remote login timeout с 10 сек до ...
под какой учёткой подключаетесь (есть имперсонация)?


Выполнил код:
EXEC sp_configure 'remote login timeout', 60;
GO
RECONFIGURE;
GO


Затем попробовал снова запустить запрос на сервере, получил следующее сообщение:
Поставщик OLE DB "SQLNCLI11" для связанного сервера "192.168.17.210" вернул сообщение "Клиенту не удалось установить подключение из-за сбоя на этапе предварительного согласования параметров".
Сообщение 64, уровень 16, состояние 1, строка 7
Поставщик TCP: Указанное сетевое имя более недоступно.
Поставщик OLE DB "SQLNCLI11" для связанного сервера "192.168.17.210" вернул сообщение "Клиенту не удается установить связь".
Сообщение 26, уровень 16, состояние 1, строка 7
Клиенту не удалось установить соединение, поскольку произошла ошибка при подтверждении соединения перед входом в систему. Чаще всего такие проблемы возникают в том случае, когда клиент пытается подключиться к неподдерживаемой версии SQL Server или сервер не может принимать новые соединения по причине перегруженности или превышения ограничений на использование ресурсов (объем памяти или число соединений).

Теперь уточнять, существует ли сервер и не поменялось ли его имя / ip-адрес?
Вопрос: Linked server to RainStor

Коллеги, есть такая задача: достать данные из RainStor. Делать это нужно в сиквеле.
На сиквел сервере ODBC драйвера для RainStor стоят. Создаю ODBC коннект, все прописываю, тест на коннект успешен.
Создаю Линкованый сервер на сиквеле.
+

/****** Object: LinkedServer [RAINSTOR] Script Date: 07/29/2016 11:09:27 ******/
EXEC master.dbo.sp_addlinkedserver @server = N'RAINSTOR', @srvproduct=N'RainStor', @provider=N'MSDASQL', @provstr=N'dsn=RainStor'
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'RAINSTOR',@useself=N'False',@locallogin=NULL,@rmtuser=N'sv_mercury_read',@rmtpassword='########'

GO

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

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

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

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

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

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

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

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

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

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

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

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

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


Тест линкованого сервера тоже успешный.

Но при выполнении запроса например:
select * from OPENQUERY(PLNSEMER30,'select count(*) from AuditHistory')

я получаю ошибку:
Msg 7357, Level 16, State 2, Line 2
Cannot process the object "select top count(*) from mer001.AuditHistory". The OLE DB provider "MSDASQL" for linked server "RAINSTOR" indicates that either the object has no columns or the current user does not have permissions on that object.


Права на той стороне я проверил. Они есть, более того я могу зацепиться простоя тузой через ODBC и выполнить этот запрос и он выполнится.

Поставил последний MDAC, тоже не помогло.

На сервере есть и другие линки в Oracle, SybASE, SybASE IQ. Везде они работаю нормально.

Кто-нибудь сталкивался с таким?

Win 2008R2, MSSQL Server 2008R2 SP3
Ответ:
TaPaK
Dan Khatskevich,

предположу глупость :) SET NOCOUNT ON; SELECT 1 as Col



Не взлетел:)
Вопрос: linked server с oracle

Добрый день!

При обращении к представлению Oracle из под MS SQL , выдается ошибка
OLE DB provider "OraOLEDB.Oracle" for linked server "ASTUE" returned message "Table does not exist.".
OLE DB provider "OraOLEDB.Oracle" for linked server "ASTUE" returned message "Table does not exist.".
OLE DB provider "OraOLEDB.Oracle" for linked server "ASTUE" returned message "ORA-01861: literal does not match format string".
Msg 7306, Level 16, State 2, Line 1
Cannot open the table ""RSDU2CLARH"."V_73T_CELL_248"" from OLE DB provider "OraOLEDB.Oracle" for linked server "ASTUE". The specified table or view does not exist or contains errors.


Право select на представление дано.

Экспериментальным путем было выяснено, что не отрабатывают стандартные функции oracle, которые зашиты в представлении, такие как to_date, +, -, *.

В чем может быть дело ?
Ответ:
Руслан Дамирович
Простите, а зачем применять преобразование к формату даты того, что и так имеет формат даты?
to_date(sysdate-1,'DD.MM.RR') - это масло масляное.
sysdate -> date, implicit cast -> date to char, explicit cast -> char to date

Ну и очевидно, что implicit cast -> date to char на выходе дает то, что 'DD.MM.RR' не распознает, как валидную дату
Вопрос: Гляньте, трабл SQL 2005 + Oracle 10, Linked server

Доброго времени суток!

Провайдер: OraOLEDB.Oracle.
Запрос возвращает одну строку и собщение:

Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "OraOLEDB.Oracle" for linked server "ORCLDB" reported an error. The provider reported an unexpected catastrophic failure.
Msg 7330, Level 16, State 2, Line 1
Cannot fetch a row from OLE DB provider "OraOLEDB.Oracle" for linked server "ORCLDB".
Ответ: Решил проблему использовав дургой оракловый драйвер

exec sp_addlinkedserver
@server = 'ORALINK'
,@srvproduct = 'Oracle'
--,@provider = 'OraOLEDB.Oracle'
,@provider = 'MSDAORA'
--,@provider = 'MSDAORA.1'
,@datasrc = 'name servera';

exec sp_addlinkedsrvlogin
@rmtsrvname = 'ORALINK'
,@useself = 'FALSE'
,@locallogin = NULL
,@rmtuser = 'x'
,@rmtpassword = 'x';
Вопрос: Linked server по разному себя ведет в зависимости от места где запустили management studio

Всем добрый день.

Настроили linked server вот так, как на картинке ниже.
Все работает если management studio запущен непосредственно на самом сервере (там где тот sql в котором настроен linked server).

Но если management studio запустить на локальной машине, то я не вижу баз в этом сервере, и получаю
Msg 18456, Level 14, State 1, Line 1
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

Кто может объяснить, в чем собственно разница?
То есть, почему ему не безразлично где management studio запущен?
И как сделать так, чтобы работало все на локалке?

Скриншоты ниже.

К сообщению приложен файл. Размер - 59Kb
Ответ: Игорь Бобак,

Вопрос: ошибка linked server

проверяю тест коннекшен на другой сервер показывает такую ошибку с юзером kokota2
но этот юзер kokota2 добавлен на другой сервер
обратный linked server с другого сервера на этот работает

этот другой сервер заново устанавливали и до этого этот linked server коннекшен работал
что тут не так?
что-то надо может добавить на другой сервер?

К сообщению приложен файл. Размер - 63Kb
Ответ: поменял на SQL and Windows
сейчас работает
спасибо