Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
komrad
r77
Microsoft SQL Server Management Studio 10.50.1600.1, само собой у меня тоже не сработал (


а что именно не сработало?
есть текст ошибки?


к сожалению сортировка не работает все равно, полное ассорти
27 ноя 18, 16:56    [21746348]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Владислав Колосов
Member

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

но ведь реально нет ни первых не вторых. Они все равноценны.
27 ноя 18, 17:00    [21746353]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27428
komrad
r77
Microsoft SQL Server Management Studio 10.50.1600.1, само собой у меня тоже не сработал (


а что именно не сработало?
есть текст ошибки?
Ошибки нет, просто не сортирует. Есть какой то непонятный мне порядок вывода, вот он и остаётся, независимо от проставленных значений задержки (как я понимаю, по идее сортировать должен в соответствии с ними). Ставлю 5 и 10 сек для соответственно 2х серверов.
27 ноя 18, 17:01    [21746355]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
alexeyvg
komrad
пропущено...

а что именно не сработало?
есть текст ошибки?
Ошибки нет, просто не сортирует. Есть какой то непонятный мне порядок вывода, вот он и остаётся, независимо от проставленных значений задержки (как я понимаю, по идее сортировать должен в соответствии с ними). Ставлю 5 и 10 сек для соответственно 2х серверов.


у меня точно также,просто не сортирует
27 ноя 18, 17:02    [21746358]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27428
r77
alexeyvg
пропущено...
Ошибки нет, просто не сортирует. Есть какой то непонятный мне порядок вывода, вот он и остаётся, независимо от проставленных значений задержки (как я понимаю, по идее сортировать должен в соответствии с ними). Ставлю 5 и 10 сек для соответственно 2х серверов.


у меня точно также,просто не сортирует
А, ошибся, @@servername же не обязательно равно имени зарегистрированного сервера :-)
27 ноя 18, 17:08    [21746364]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 2746
r77
komrad
пропущено...

а что именно не сработало?
есть текст ошибки?


к сожалению сортировка не работает все равно, полное ассорти

Сделать себе скрипт на PowerShell типа такого:

Set-Location SQLSERVER:\SQLRegistration\Database Engine Server Group\<your group name>
$servers = get-childitem | Sort столбец_с_именами_серверов_в_local_group -desc
foreach ($server in $server) {<do something herer>}
27 ноя 18, 17:15    [21746373]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 2746
Andy_OLAP,

Настройки для Local Server Groups обычно лежат в простом текстовом файле типа C:\Users\r77_username\AppData\Roaming\Microsoft\Microsoft SQL Server\100\Tools\Shell\RegSrvr.xml
27 ноя 18, 17:16    [21746377]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 2746
Andy_OLAP
Sort столбец_с_именами_серверов_в_local_group -desc

Или Sort столбец_с_именами_серверов_в_local_group -asc, это по вкусу.
27 ноя 18, 17:17    [21746379]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
alexeyvg
komrad
пропущено...

а что именно не сработало?
есть текст ошибки?
Ошибки нет, просто не сортирует. Есть какой то непонятный мне порядок вывода, вот он и остаётся, независимо от проставленных значений задержки (как я понимаю, по идее сортировать должен в соответствии с ними). Ставлю 5 и 10 сек для соответственно 2х серверов.


+вот такой скрипт

declare @delay varchar(10) ;
with servers as 
(
select 'nlc1prodci01' [name], '05' [seconds] union all 
select 'nlc1pdbscops\sc2016', '02' [seconds] union all 
select 'nlc1pdbscdwh\scdwh16', '03' [seconds] union all 
select 'nlc1itsql05', '04' [seconds] union all 
select 'nlc1itsql03\nlc1prodsql43', '01' [seconds] union all 
select 'nlc1itsql01\nlc1prodsql41', '06' [seconds] union all 
select 'nlc1devsqlmon01', '07' [seconds] 
)

select @delay = '00:00:'+seconds
from servers 
where name=@@servername 

select @delay=isnull(@delay,'00:00:00')

waitfor delay @delay 

/*your query*/
select @delay [delay], @@servername [@@servername]



у меня выдает такой результат - см картинку

К сообщению приложен файл. Размер - 33Kb
27 ноя 18, 17:35    [21746408]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
Microsoft SQL Server Management Studio 14.0.17285.0
27 ноя 18, 17:51    [21746435]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
komrad
alexeyvg
пропущено...
Ошибки нет, просто не сортирует. Есть какой то непонятный мне порядок вывода, вот он и остаётся, независимо от проставленных значений задержки (как я понимаю, по идее сортировать должен в соответствии с ними). Ставлю 5 и 10 сек для соответственно 2х серверов.


+ вот такой скрипт

declare @delay varchar(10) ;
with servers as 
(
select 'nlc1prodci01' [name], '05' [seconds] union all 
select 'nlc1pdbscops\sc2016', '02' [seconds] union all 
select 'nlc1pdbscdwh\scdwh16', '03' [seconds] union all 
select 'nlc1itsql05', '04' [seconds] union all 
select 'nlc1itsql03\nlc1prodsql43', '01' [seconds] union all 
select 'nlc1itsql01\nlc1prodsql41', '06' [seconds] union all 
select 'nlc1devsqlmon01', '07' [seconds] 
)

select @delay = '00:00:'+seconds
from servers 
where name=@@servername 

select @delay=isnull(@delay,'00:00:00')

waitfor delay @delay 

/*your query*/
select @delay [delay], @@servername [@@servername]



у меня выдает такой результат - см картинку


у меня все delay по нулям, потому что как и написали выше
name<>@@servername
27 ноя 18, 17:53    [21746436]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
r77

у меня все delay по нулям, потому что как и написали выше
name<>@@servername


так соберите сначала реальные имена серверов, присвойте им желаемую очередность, занесите в скрипт и запускайте его
27 ноя 18, 17:57    [21746445]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
r77
Member

Откуда: Краснодар
Сообщений: 270
komrad
r77
у меня все delay по нулям, потому что как и написали выше
name<>@@servername


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


ясно,их просто много,с другой стороны это вроде как 1 раз сделать.
Благодарю за помощь, интересный подход!
27 ноя 18, 18:02    [21746454]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27428
r77
ясно,их просто много,с другой стороны это вроде как 1 раз сделать.
Скрипт komrad выше как раз выдайт и name, и @@servername, так что нужно просто скопировать результат.
28 ноя 18, 01:58    [21746744]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2116
У меня есть набор CLR процедур которые запускают запрос на любом количестве серверов и складируют результат в таблицу на локальном сервере. Потом можно что угодно делать, сортировать, фильтровать, джойнить и т.д. Сервера передаются либо списком через ; либо запросом где первой колонкой должно быть имя сервера. Запросы запускаются многопоточно так что работает весьма быстро, но медленне чем SSMS, потому что SSMS держит все соединения открытыми пока не закроешь окно, процедуры же открывают/закрывают коннекшн каждый раз при запуске. Зато не падает как SSMS при большом количестве серверов. На паре тысяч работало нормально. Ну и намного быстрее чем в цикле через линкованные сервера.

Сохранется все в постоянную таблицу, а не во временную, потому что из других потоков очень сложно получить доступ в текущую сессию (context connection). Немного не удобно, но нормального решения пока не нашел.

Запускается по умолчанию от учетки SQL Server-а с windows авторизацией, соответственно "главный" сервер должен иметь права на всех остальных серверах. При желании можно передать логин/пароль для каждого сервера.

Если кому интересно, могу прислать, но только AS IS. Никаких гарантий :) Успешно работает последние пару лет собирая даныне с 1,600 серверов.

+ Запуск выглядит примерно так:
-- Drop "temp" tables. If the table exists the error will be raised.
-- The new tables will be created automatically based on the schema of the query result 
IF OBJECT_ID('dbo.tmp_Test')		IS NOT NULL DROP TABLE dbo.tmp_Test
IF OBJECT_ID('dbo.tmp_TestError')	IS NOT NULL DROP TABLE dbo.tmp_TestError	-- Special table to keep all the errors

	-- This sp doesn't return any resultset, but saves the result into 2 tables
	-- Parameters:
	-- @serverNames			-- Either semicolon separated list or a valid SQL query
	-- @sqlquery			-- Query that will be executed on the servers. If the schema of resultset is different on the servers the procedure will fail
	-- @targetTable			-- Table to store the result. Will be created automatically
	-- @targetErrorTable	-- Table to store all the errors. Will be created automatically or reused if already exists
EXEC dbo.sp_RunQuerySQLServers
	@serverNames = 'select name, server_id as id from msdb.dbo.sysmanagement_shared_registered_servers_internal',
--  SQL Auth
--	@serverNames = 'select name, server_id as id, ''sa'' as login, ''###%%%$$$$'' as password from msdb.dbo.sysmanagement_shared_registered_servers_internal',
	@sqlquery = 'select sum(size/1024)*8/1024 GB from sys.master_files', 
	@targetTable = 'dbo.tmp_Test', 
	@targetErrorTable = 'dbo.tmp_TestError'

-- Results
SELECT * FROM dbo.tmp_Test ORDER BY [@ServerName]
SELECT * FROM dbo.tmp_TestError

-- Drop "temp" tables
IF OBJECT_ID('dbo.tmp_Test')		IS NOT NULL DROP TABLE dbo.tmp_Test
IF OBJECT_ID('dbo.tmp_TestError')	IS NOT NULL DROP TABLE dbo.tmp_TestError	-- Special table to keep all the errors
6 дек 18, 01:00    [21755179]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
Mind

Сохранется все в постоянную таблицу, а не во временную, потому что из других потоков очень сложно получить доступ в текущую сессию (context connection). Немного не удобно, но нормального решения пока не нашел.



думали про ##table в родительской сессии?
6 дек 18, 12:22    [21755628]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2116
komrad
Mind
Сохранется все в постоянную таблицу, а не во временную, потому что из других потоков очень сложно получить доступ в текущую сессию (context connection). Немного не удобно, но нормального решения пока не нашел.



думали про ##table в родительской сессии?
Думал. Но тогда во-первых нужно передать скрипт создания таблицы из одного из потоков в родительский, а во-вторых основной проблемы все равно не решает, что если вдруг два пользователя запустят один и тот же скрипт, то они будут конфликтовать за одну и ту же таблицу. Короче работы много чтобы это переписать, выхлоп не большой да и C# лишний раз открывать мне для этого лень. Так что пока работает как есть.

Хотя тут подумал, есть еще вариант, сохранять в глобальную временную как вы предложили, но с рандомным именем, а после того как все потоки отработают, создавать локальную временную, переливать данные и грохать глобальную. Вроде должно работать, хотя и не очень элегантно выглядит.
11 дек 18, 01:37    [21759714]     Ответить | Цитировать Сообщить модератору
 Re: Группа локальных серверов  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 4594
Mind
Хотя тут подумал, есть еще вариант, сохранять в глобальную временную как вы предложили, но с рандомным именем, а после того как все потоки отработают, создавать локальную временную, переливать данные и грохать глобальную. Вроде должно работать, хотя и не очень элегантно выглядит.


еще вариант: использовать одну глобальную временную + уникальный идентификатор запуска
это позволит нескольким сессиям использовать одну и ту же таблицу и идентифицировать свои записи по идентификатору
11 дек 18, 11:50    [21760034]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Microsoft SQL Server Ответить