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

Откуда: Питер
Сообщений: 80
Всем привет.

Такая проблема.

Есть база (MSSQL 2005), установленная на нескольких площадках. Крайне важно иметь одинаковую схему на всех площадках.

При этом на одной из площадок работает уникальный функционал, реализованный в нескольких ХП, в которых идет обращение к прилинкованному серверу прямо хардкодом, грубо говоря: SELECT col1 from SrvName.DbName.dbo.Tbl1. На остальных площадках этот функционал не нужен, но ХП просто так туда накатить не дает, так как сервер с именем SrvName там отсутствует.

Какие есть варианты решения проблемы? Сразу говорю, динамический SQL (вроде бы, очевидное решение) использовать очень не хочется, так как придется переписывать кучу кода в этих хранимках (в т.ч. в курсорах), ухудшая его читаемость и т.п.

Фейковый линкед сервер делать пробовали. При попытке создания ХП идет попытка установить соединение с ним, и отказ.

Хранимки, что важно, накатываем обычно не руками, а с помощью разных редгейтовских тулзов.

Спасибо.
16 июл 15, 12:11    [17898842]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к отсутствующим серверам  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8577
Elias33, существуют и другие способы передачи данных, например, репликация.
16 июл 15, 12:22    [17898893]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к отсутствующим серверам  [new]
Elias33
Member

Откуда: Питер
Сообщений: 80
Владислав Колосов,

А при чем тут передача данных и репликация? Речь-то идет о синхронизации схемы.
16 июл 15, 12:26    [17898913]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к отсутствующим серверам  [new]
o-o
Guest
Elias33
Фейковый линкед сервер делать пробовали. При попытке создания ХП идет попытка установить соединение с ним, и отказ.

не делайте фейковый, сделайте свой же сервер линкованным. loopback на себя
16 июл 15, 12:28    [17898923]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к отсутствующим серверам  [new]
Elias33
Member

Откуда: Питер
Сообщений: 80
o-o,

Последние полчаса копаем именно в этом направлении :) Что-то получается. Спасибо.
16 июл 15, 12:29    [17898934]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к отсутствующим серверам  [new]
o-o
Guest
Elias33,

а что с ним не то, почему полчаса?
EXEC master.dbo.sp_addlinkedserver 
@server = N'fake_server_name', 
@srvproduct=N'loopback', 
@provider=N'SQLNCLI', 
@datasrc=N'real_server_name'
16 июл 15, 12:33    [17898949]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к отсутствующим серверам  [new]
Elias33
Member

Откуда: Питер
Сообщений: 80
o-o,

Фейкового сервера пока мало, так как на нем должна быть еще фейковая база :)
16 июл 15, 12:40    [17898975]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к отсутствующим серверам  [new]
<>
Guest
А в тексте создания хранимки нельзя проверку существования сервера вставить?
16 июл 15, 13:00    [17899090]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к отсутствующим серверам  [new]
iap
Member

Откуда: Москва
Сообщений: 47084
Когда-то тут статью написали: Определение недоступности линкед-сервера

Не поможет?
16 июл 15, 13:11    [17899162]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к отсутствующим серверам  [new]
o-o
Guest
iap,

он не может процедуры на сервере сохранить, т.к. там обращение к несуществующим объектам.
просто тупо сохранить, не выполнить.
потому что если процедура вида
create proc dbo.fake_proc
as 
select * from fake_base.dbo.t;

то даже при отсутствии базы процедура сохраняется все равно,
а если
create proc dbo.fake_proc
as 
select * from fake_server.fake_base.dbo.t;


то все, даже если сервер и база есть, докапывается до каждого объекта в отельности:
Msg 7314, Level 16, State 1, Procedure fake_proc, Line 3
The OLE DB provider "SQLNCLI10" for linked server "fake_server" does not contain the table ""fake_base"."dbo"."t"". The table either does not exist or the current user does not have permissions on that table.
16 июл 15, 13:20    [17899217]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к отсутствующим серверам  [new]
andrey odegov
Member

Откуда:
Сообщений: 473
через синоним?
16 июл 15, 13:24    [17899239]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к отсутствующим серверам  [new]
o-o
Guest
похоже, надо было ситуацию продумывать заранее и не хардкодить с именем линкованного сервера,
а использовать синонимы, к-ые потом переопределить, чтобы указывали на удаленный сервер.
ну или не указывали, когда его нет.
т.е. не сейчас править ситуацию остальных, а надо было писать все, обращаясь к локальным именам,
и потом на том единственном сервере наделать синонимов, глядящих на linked.
Erland Sommarskog
SQL Server has deferred name resolution, so that when you create a procedure that refers to a table that does not exist, SQL Server stays silent.
Except, when you access an object on a linked server. Isn't that marvellous?

I haven't test this, but maybe it works if you replace the references to the table in the linked server with a synonym.
When you create the procedure, the synonym points to a local table.
In fact, from what I said above, the synonym does not even have to exist at that point.
Once the procedure has been created, you define the synonym to point to the linked server.

по ссылке разговор о другом, но решение как раз сюда бы подошло
Linked Server Stored Procedure Creation And Remote User Permissions
16 июл 15, 13:31    [17899294]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к отсутствующим серверам  [new]
Elias33
Member

Откуда: Питер
Сообщений: 80
Сделали через синонимы. Всем спасибо :)
16 июл 15, 13:55    [17899501]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить