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

Откуда:
Сообщений: 36
Добрый день, гуру!
подскажите пожалуйста
пытаюсь сделать такой запрос
use srv_intellect
EXEC sp_addlinkedserver '192.168.20.11','SQL Server';
EXEC sp_addlinkedsrvlogin '192.168.20.11', 'false', NULL, 'sa', 'XXX';
IF EXISTS (SELECT * FROM sys.servers WHERE name = ('192.168.20.11') )
BEGIN 
	select * into PROTOCOL_TEMP  from [192.168.20.11].srv_os.dbo.protocol 
	where pk not in (select pk from protocol) ;
	EXEC sp_droplinkedsrvlogin '192.168.20.11', NULL;
	EXEC sp_dropserver '192.168.20.11';
end

появляется ошибка
could not find server '192.168.20.11' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.
но если делать по отдельности
EXEC sp_addlinkedserver '192.168.20.11','SQL Server';
EXEC sp_addlinkedsrvlogin '192.168.20.11', 'false', NULL, 'sa', 'XXX';

а потом всё остальное , происходит всё удачно.
думал что не успевает сервер залинковаться, добавлял задержку WAITFOR DELAY '00:00:05.000';
но не помогает, такое впечатление что при выполнении в mms запрос с начало пре-выполняется и не видит ещё не созданный линк с удалённому серверу

в итоге хочу такой запрос поставить в jobs для пополнения таблицы локального сервера событиями которые почему то не дошли с удалённого сервера(есть механизм синхронизации на уровне стороннего ПО, но ПО может быть выключено и как следствие события не дойти)
22 фев 17, 10:27    [20236004]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
shilll1,

GO после создания

автор
такое впечатление что при выполнении в mms запрос с начало пре-выполняется и не видит ещё не созданный линк с удалённому серверу
краткой описание компиляции запроса :)
22 фев 17, 10:32    [20236022]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
shilll1
Member

Откуда:
Сообщений: 36
СПАСИБО)
22 фев 17, 11:59    [20236428]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
Lokli
Member

Откуда:
Сообщений: 28
После выполнения запроса остаются линки на сервера. Это плохо?
23 фев 17, 19:12    [20240293]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
shilll1
Member

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

Спасибо, а разве
EXEC sp_droplinkedsrvlogin '192.168.20.11', NULL;
EXEC sp_dropserver '192.168.20.11';
Недостаточно ?
23 фев 17, 19:30    [20240313]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
Lokli
Member

Откуда:
Сообщений: 28
shilll1, У меня нет гарантии, что в конкретный момент времени этим линком пользуюсь только я. Может другой пользователь сейчас формирует запрос к северу по данному линку, а я его разорву.
23 фев 17, 19:47    [20240352]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Lokli
После выполнения запроса остаются линки на сервера. Это плохо?

Делайте линкед-сервер раз и навсегда, плохо его создавать и удалять в обычном коде.
24 фев 17, 02:39    [20240950]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35374
Блог
или OPENDATASOURCE, вместо создания-удаления
24 фев 17, 03:27    [20240965]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
Lokli
Member

Откуда:
Сообщений: 28
alexeyvg, что значит плохо? почему плохо?
24 фев 17, 07:41    [20241006]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Lokli
У меня нет гарантии, что в конкретный момент времени этим линком пользуюсь только я. Может другой пользователь сейчас формирует запрос к северу по данному линку, а я его разорву

Вы что-то не понимаете. Линкед сервер - это allias сервера, к подключению не имеет ничего общего. То, что вы задаёте название и адрес в сокращённой форме ещё не значит, что имя '192.168.20.11' не может быть произвольным, или что все подключения к 192.168.20.11 будут только через созданый вами allias '192.168.20.11'. Но линкед серверы обычно делают более-менее постоянными, чтобы всем удобно было обращаться к заранее известному alias'у сервера.

Для установлен одноразовых соединений по требованию есть же OPENDATASOURCE и OPENROWSET. Те же уши, только одной строкой.

Lokli
что значит плохо? почему плохо?

потому что без Go не работает :)
24 фев 17, 11:32    [20241249]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
shilll1
Member

Откуда:
Сообщений: 36
Понял спасибо, буду изучать
24 фев 17, 11:38    [20241266]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
komrad
Member

Откуда:
Сообщений: 5735
Шыфл
потому что без Go не работает :)

что не работает?
dynamic sql еще никто не отменял

+ у меня такая конструкция замечательно работает


declare @cmd varchar(2048)
declare @SQLServer varchar(50)
declare @LSName varchar(50) 

select @SQLServer=convert(varchar(50),@@servername)--'xxxxxxx'

select @cmd='
if exists (select 1 from sys.servers where name=N''[replaceme]'' and is_linked=1)
EXEC master.dbo.sp_dropserver @server=N''[replaceme]'', @droplogins=''droplogins'';
EXEC master.dbo.sp_addlinkedserver @server = N''[replaceme]'', @srvproduct=N''!REMOTESQL!'', @provider=N''SQLNCLI'', @datasrc=N''!REMOTESQL!'', @catalog=N''master'';
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N''[replaceme]'',@useself=N''True'',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL; 

EXEC master.dbo.sp_serveroption @server=N''[replaceme]'', @optname=N''rpc'', @optvalue=N''true''
EXEC master.dbo.sp_serveroption @server=N''[replaceme]'', @optname=N''rpc out'', @optvalue=N''true''
'

select @LSName=isnull(@LSName,'MY_LINKED_SERVER')
select @cmd=replace(@cmd,'[replaceme]',@LSName)

select @cmd= replace(@cmd,'!REMOTESQL!',@SQLServer)

exec (@cmd)


24 фев 17, 12:21    [20241366]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
Lokli
Member

Откуда:
Сообщений: 28
Шыфл
потому что без Go не работает :)

GO мне картину мира не портит, т.к. у меня собственное приложение.
Первоначально я выполняю запрос:
SELECT name, product, is_data_access_enabled 
FROM sys.servers 
WHERE name = @NameServ and product = 'SQL Server'

Если запрос не возвращает данные, то линкую сервер командами:
EXEC sp_addlinkedserver @server = N'NameServ', @srvproduct=N'SQL Server'
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'NameServ',@useself=N'False',@locallogin=NULL,@rmtuser='sa',@rmtpassword='gfhjkm'

Если линк уже есть, то проверяю значение is_data_access_enabled. Если оно равно нулю (такое может быть, если на сервере есть репликация), то выполню команду:
EXEC sp_serveroption @server=N'NameServ', @optname=N'data access', @optvalue=N'true'


Моим приложением пользуется несколько пользователей. Мне вот интересно, что будет, если один пользователь попытается дропнуть линк, если в этот момент времени другой пользователь выполняет запрос с использованием этого линка?
24 фев 17, 18:40    [20242002]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
o-o
Guest
Lokli
что будет, если один пользователь попытается дропнуть линк, если в этот момент времени другой пользователь выполняет запрос с использованием этого линка?

линкед дропнется, а тот запрос так и будет выполняться, пока не завершится
26 фев 17, 10:06    [20244133]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Lokli
Мне вот интересно, что будет, если один пользователь попытается дропнуть линк, если в этот момент времени другой пользователь выполняет запрос с использованием этого линка?
При выполнении запроса накладывается блокировка стабильности схемы Sch-S на метаданные "линка". При удалении на эти же метаданные накладывается блокировка модификации схемы Sch-M. Они друг с другом не совместимы.
Ответ на ваш вопрос - дропальщик будет ждать завершения запроса к "линкеду".
26 фев 17, 12:23    [20244358]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Точнее, будет ждать, пока читатель не отпустит метаданные "линкеда".
26 фев 17, 12:30    [20244370]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
Lokli
Member

Откуда:
Сообщений: 28
invm, понял, спасибо.
26 фев 17, 14:41    [20244568]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
o-o
Guest
invm
Ответ на ваш вопрос - дропальщик будет ждать завершения запроса к "линкеду".

как раз не будет.
ибо то самое Sch-S не накладывается до окончания запроса,
а отпускается моментально.
иными словами, пустите долгоиграющий селект с линкеда
и дропните линкед в соседнем окне, не дожидаясь завершения запроса.
дропнется, ничего не ожидая,
Sch-S давно отпущено
26 фев 17, 17:07    [20244777]     Ответить | Цитировать Сообщить модератору
 Re: лин к удалённому серверу БД и работа с ней  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Lokli
alexeyvg, что значит плохо? почему плохо?
Да по многим причинам.
Это сложное действие, требующее ресурсов.
Это требует соотв прав, не позволяет разделить администрирование серверов и использование их данных.
Это вызывает коллизии при многопользовательской работе.

Всё равно, что создавать постоянные таблицы, вьюхи, процедуры внутри пользовательской процедуры для выполнения одного запроса.

Зачем это?
Можно, конечно, так делать, но это извращение.
27 фев 17, 09:54    [20246011]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить