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

Откуда:
Сообщений: 5
Добрый день! Ситуация следующая:
Есть 30 серваков с sql server все они разбросаны по разным районам неважно какой области. Структура баз одинаковая везде.
И отдельный сервак с репорСервером и sql server
Часто для отчетов нужно пробежать по всем базам и собрать к примеру оплаты.
Насоздавал линков на каждую из 30ти баз и в цикле с основного сервера динамическим запросом собираю данные.
Запара в том что запрос по сбору данных я пишу на одном из этих 30 баз. Позже пишу скрипт по отработке по всем, и это занимает время, т.к. нужно статический запрос экранировать(правильно причем) и превратить в динамику. Этот метод бесит, т.к иногда нужно быстро для себя что-то посчитать по всем базам.
Может есть способы попроще это делать, что то типа статический запрос, но пробегает по всем базам???
26 мар 20, 12:09    [22106238]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30701
belik_lch
Может есть способы попроще это делать, что то типа статический запрос, но пробегает по всем базам???
https://www.mssqltips.com/sqlservertip/2855/sql-server-multi-database-query-with-registered-servers/
26 мар 20, 12:52    [22106261]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
Владислав Колосов
Member

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

задача решается средствами SSIS. Создайте таблицу с адресами сервером, потом контейнером цикла проходите по таблице, подменяете строку подключения в коннекторе и забираете с каждого сервера. Изучайте Integration Services.
26 мар 20, 13:07    [22106273]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
belik_lch
Member

Откуда:
Сообщений: 5
alexeyvg, читал об этих возможностях SSMS, и это решает мою проблему, даже так как я хочу. Но на сколько я понял, это доступно только в SSMS т.к. это фича самого приложения. Я использую Azure Data Studio, и там тоже есть возможность группировать сервера, но без возможности выполнения запросов по самой группе. Если бы такие вещи можно было бы творить скриптом, к примеру: "USE [servGroup] select...", то было бы прекрасно.
26 мар 20, 14:44    [22106342]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
belik_lch
Member

Откуда:
Сообщений: 5
Владислав Колосов, спасибо за ответ. Узнал немного нового, инструмент очень полезный, но скорее не решает моей проблемы т.к. мне не нужно перекачивать данные в одну базу. Данных очень много, и насколько я понял синхронизация данных происходит по расписанию.
26 мар 20, 14:49    [22106346]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
belik_lch
Member

Откуда:
Сообщений: 5
Держу вариант в голове, но не знаю насколько он адекватный:
Создать вьюху vPay со след. содержимым
select col1, col2... from server1.database.dbo.Pay
UNION ALL
select col1, col2... from server2.database.dbo.Pay
UNION ALL
...
select col1, col2... from server30.database.dbo.Pay
И с нее уже под определенными условиями тянуть данные
Насколько это тормознутая вещь выйдет, не знаю, может вы подскажете?
26 мар 20, 14:55    [22106355]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
belik_lch,

Там, откуда выполняете все эти запросы, заведите таблицу
create table MyDataSources (server_name sysname, [database_name] sysname, primary key (server_name, [database_name]));

Тогда выполнить один запрос на всех источниках можно так
declare s cursor local fast_forward for
 select
  quotename(server_name) + N'.' + quotename([database_name]) + N'.sys.sp_executesql'
 from
  MyDataSources;

declare @proc sysname;

open s;
while 1 = 1
 begin
  fetch next from s into @proc;
  if @@fetch_status <> 0
   break;

  exec @proc @query;
 end;
close s;
deallocate s;
26 мар 20, 15:03    [22106360]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2298
belik_lch,

если это не регулярно, чаще всего "прямщас" и всегда что-то разное, то:
Execute Statements Against Multiple Servers Simultaneously

если регулярное, заставьте все сервера работать на Вас по команде с центра - СервисБрокер в помощь

а от SSIS в этом случае я отказался, по-моему push всегда лучше чем pull.
26 мар 20, 15:04    [22106363]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
Владислав Колосов
Member

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

не всегда лучше, т.к. ресурсы принимающей стороны часто ограничены и она решает в какой момент какую загрузку выполнять. Часто выполняют комбинированный способ - данные передают по готовности в промежуточное хранилище, файловое, FTP или иное, а принимающая сторона обрабатывает это хранилище по своей готовности. Т.е. PUSH-PULL.
26 мар 20, 15:08    [22106366]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
Владислав Колосов
Member

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

данные для отчета собирайте не запросом "на лету", а подготовьте таблицу - витрину, которая будет источником отчета. Витрину можно заполнить средствами SSIS или какими будет удобно. Витрина может хранить исторические "срезы", что позволит немедленно формировать отчеты за нужную дату.
26 мар 20, 15:10    [22106372]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2298
Владислав Колосов,

я не против, и если уж по микроскопом рассматривать, то и работу сервис-брокера можно подогнать под Ваше описание.
клиент пушнул, а вот когда оно доставится и уж тем более обработается это уж как напишешь..
26 мар 20, 15:16    [22106377]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30701
belik_lch
alexeyvg, читал об этих возможностях SSMS, и это решает мою проблему, даже так как я хочу. Но на сколько я понял, это доступно только в SSMS т.к. это фича самого приложения. Я использую Azure Data Studio, и там тоже есть возможность группировать сервера, но без возможности выполнения запросов по самой группе. Если бы такие вещи можно было бы творить скриптом, к примеру: "USE [servGroup] select...", то было бы прекрасно.
Понятно, что это может быть только функциональностью клиента.

Я думал, у вас вопрос про возможности SSMS, но если нет, то либо программируйте сами (динамику, свой исполнитель запросов, вьюхи), либо ищите удобный инструмент работы с сиквелом, который умеет то, что вам нужно.
26 мар 20, 15:48    [22106405]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33229
Блог
belik_lch,

делайте уж по-нормальному - консолидированное хранилище
26 мар 20, 15:58    [22106411]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
belik_lch
Member

Откуда:
Сообщений: 5
Спасибо всем за ответы! Обязательно вернусь к еще к ним(когда будет время на изучение вышеописанных инструментов). А пока для себя решил проверять данные запросами по группе серверов SSMS. Для других случаев напишу приблуду которая будет принимать статику и выплевывать уже динамику. Временное решение я думаю не плохое. А дальше буду расширять обзор своих знаний
27 мар 20, 09:38    [22106704]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 742
belik_lch,
Такие решения прекрасно делаются либо группой серверов, PowerShell, SSIS-пакетом + ForEachLoop

Есть все шаблоны под все решения и варианты, могу помочь во всем в реализации, если надо

Пишите в личку

P.S. - да, идеальный ответ на форуме, я знаю :)
27 мар 20, 13:29    [22106887]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
Mr. X
Member

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

Как вариант - использовать SSMS в SQLCMD mode.
27 мар 20, 15:14    [22106963]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
aleks222
Member

Откуда:
Сообщений: 846
belik_lch

Может есть способы попроще это делать, что то типа статический запрос, но пробегает по всем базам???


Ну... обучись пользоваться синонимами.
27 мар 20, 15:27    [22106970]     Ответить | Цитировать Сообщить модератору
 Re: Multiple Database Query sql server  [new]
uaggster
Member

Откуда:
Сообщений: 757
Отправка запроса на указанные базы данных MS SQL Server всех указанных серверов подручными средствами
вчера, 07:18    [22107233]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить