Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 openrowset или sp_addlinkedserver  [new]
нуб987
Guest
микрософт рекомендует вместо использования openrowset линковать сервер:
автор
Это альтернативный метод для доступа к таблицам на связанном сервере и является однократным нерегламентированным методом соединения и удаленного доступа к данным с помощью OLE DB. Вместо этого для более частых ссылок на источники данных OLE DB используйте связанные серверы.


У меня есть куча процедур, написанных еще в СКЛ2000, с динамическими запросами. И там очень активно используются openrowset'ы, подключаясь к различным серверам и базам.
Если все переделывать на современный лад, получается в начале процедуры нужно прилинковывать нужный сервер, а в конце отлинковывать.
При этом, если одновременно работает несколько таких процедур, то будет трындец: одна процедура уже прилинковала сервер, тут вдруг вторая пытается прилинковать его же. Потом первая процедура сделала свои дела и отлинковывает сервер. А вторая еще не закончила получать данные от него.

А чтобы нормально пользоваться openrowset'ом, микрософт советует лезть в реестр:
автор
Использовать функцию OPENROWSET для доступа к удаленным данным из источников данных OLE DB можно только в случае, если параметр реестра DisallowAdhocAccess явно установлен в значение 0 для указанного поставщика и включен дополнительный параметр конфигурации Ad Hoc Distributed Queries. Если эти параметры не установлены, поведение по умолчанию запрещает нерегламентированный доступ.


Каким образом правильней забирать данные с разных серверов, используя динамические запросы (обращение к разным базам и таблицам в зависимости от входных параметров и прочих условий)?
22 авг 16, 02:53    [19571139]     Ответить | Цитировать Сообщить модератору
 Re: openrowset или sp_addlinkedserver  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
нуб987
Если все переделывать на современный лад, получается в начале процедуры нужно прилинковывать нужный сервер, а в конце отлинковывать.

А зачем отлинковывать?
22 авг 16, 07:20    [19571188]     Ответить | Цитировать Сообщить модератору
 Re: openrowset или sp_addlinkedserver  [new]
нуб987
Guest
Pavel1211
нуб987
Если все переделывать на современный лад, получается в начале процедуры нужно прилинковывать нужный сервер, а в конце отлинковывать.

А зачем отлинковывать?

потому что:
- серверов много,
- они не всегда нужны,
- добавляются новые
22 авг 16, 12:47    [19572505]     Ответить | Цитировать Сообщить модератору
 Re: openrowset или sp_addlinkedserver  [new]
TaPaK
Member

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

мешают? чем?
22 авг 16, 12:48    [19572510]     Ответить | Цитировать Сообщить модератору
 Re: openrowset или sp_addlinkedserver  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
автор
Если все переделывать на современный лад, получается в начале процедуры нужно прилинковывать нужный сервер, а в конце отлинковывать.

а где вы про такой "современный лад" узнали?
22 авг 16, 12:50    [19572525]     Ответить | Цитировать Сообщить модератору
 Re: openrowset или sp_addlinkedserver  [new]
нуб987
Guest
TaPaK
а где вы про такой "современный лад" узнали?

с сайта микрософта. Я же выше цитаты выкладывал.
22 авг 16, 13:05    [19572669]     Ответить | Цитировать Сообщить модератору
 Re: openrowset или sp_addlinkedserver  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
нуб987
TaPaK
а где вы про такой "современный лад" узнали?

с сайта микрософта. Я же выше цитаты выкладывал.

так а где там про удаление линков ?? и вообще делать это на уровне процедур...
22 авг 16, 13:06    [19572681]     Ответить | Цитировать Сообщить модератору
 Re: openrowset или sp_addlinkedserver  [new]
нуб987
Guest
TaPaK
нуб987,

мешают? чем?

незакрытые подключения наверняка чем-то помешают.
это как создать дескриптор и оставить его "на всякий случай". А потом начинаются утечки памяти, конфликты.....

да и раньше было: написал openrowset(...), получил данные и все.
а теперь нужно проверять, прилинкован ли сервер. Если нет, то прилинковать. И так в каждой процедуре.
Либо делать свою процедуру-обертку - аналог openrowset'а, который все это будет проделывать.
22 авг 16, 13:08    [19572697]     Ответить | Цитировать Сообщить модератору
 Re: openrowset или sp_addlinkedserver  [new]
TaPaK
Member

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

мешают? чем?

незакрытые подключения наверняка чем-то помешают.
это как создать дескриптор и оставить его "на всякий случай". А потом начинаются утечки памяти, конфликты.....

да и раньше было: написал openrowset(...), получил данные и все.
а теперь нужно проверять, прилинкован ли сервер. Если нет, то прилинковать. И так в каждой процедуре.
Либо делать свою процедуру-обертку - аналог openrowset'а, который все это будет проделывать.

откуда вы такой бред взяли? создание линка это не создание подключения/дескриптора и всего чего вы там ещё придумали
22 авг 16, 13:09    [19572708]     Ответить | Цитировать Сообщить модератору
 Re: openrowset или sp_addlinkedserver  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
и вообще вопрос
автор
openrowset или sp_addlinkedserver

это как синий или твёрдый.
22 авг 16, 13:11    [19572725]     Ответить | Цитировать Сообщить модератору
 Re: openrowset или sp_addlinkedserver  [new]
нуб987
Guest
TaPaK
откуда вы такой бред взяли?

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

тогда правильно ли я понял, что прилинковывая какой-то сервер или текстовый файл, или базу Access, или екселевский файл, мы просто создаем где-то запись с информацией об этом подключении? Т.е. никаких дискрипторов и т.п. при этом НЕ создается.
Чтобы потом, когда в запросе напишем
select Field1, Field2
from Server1...Table1

сервер знал, кто такой Server1 и где лежит таблица Table1.
И что, сильно упрощая, вместо приведенного выше запроса, сервер сам (по информации о линкованных серверах) сформирует запрос типа
select Field1, Field2
from openrowset(...)


Так?
22 авг 16, 13:29    [19572899]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить