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

Откуда: СПб
Сообщений: 126
Доброго времени суток!
Существует служебная таблица, хранящая данные о серверах, находящихся на них БД и хранимых процедурах.

Примерно выглядит так:
SERVER DATABASE STORED_PROCEDURE AVAILIBLE
server1 database1 sp1 1
server2 database1 sp1 1
server2 database2 sp1 1
server2 database2 sp2 0

Табличка используется для проверки доступности БД перед выгрузкой.
Механизм проверки следующий:
1. получаю DISTINCT имена всех серверов и при помощи xp_cmdshell пингую их
2. проверяю наличие LINKED SERVER-ов для каждого сервера
3. проверяю наличие БД на сервере и STATE = 0
4. проверяю наличие хранимой процедуры и т.д.

Вопрос заключается в следующем:
для проверки наличия БД на сервере(пункт №3) получаю DATABASE (SYSNAME) и SERVER (SYSNAME) в курсор и выполняю
EXEC
('
IF EXISTS (SELECT * FROM ['+@SERVER+'].[master].[sys].[databases] where [name] = '''+@DATABASE+''')
SELECT 1
ELSE
SELECT 0
')

Подскажите пожалуйста как правильно организовывать запросы такого типа!
или такого типа (select * from @table где @table - переменная типа SYSNAME)
29 июл 13, 19:11    [14633993]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно организовать курсор!  [new]
PavluxaF
Member

Откуда: СПб
Сообщений: 126
Поясню еще немного более подробно что меня не устраивает
1. мне не нравиться внешний вид запросов типа
EXEC
('
IF EXISTS (SELECT * FROM ['+@SERVER+'].[master].[sys].[databases] where [name] = '''+@DATABASE+''')
SELECT 1
ELSE
SELECT 0
')
2. У меня отваливается динамический компилятор TSQL т.е. запрос он выполняет, но чтобы увидеть текст динамического запроса приходиться использовать PRINT
3. Я почти уверен что есть более удобный способ
4. невозможно проUPDATEить временную таблицу
5. неудобно получать данные из запроса (приходиться создавать временную таблицу и пользоваться INSERT EXEC)

(ПО ПОВОДУ ПУНКТОВ 4 и 5 я не уверен, вполне возможно я просто не знаю как это правильно делать)
29 июл 13, 19:32    [14634082]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно организовать курсор!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
PavluxaF
Существует служебная таблица...


Огласите задачу, а не придуманный способ её решения.
29 июл 13, 20:05    [14634191]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно организовать курсор!  [new]
PavluxaF
Member

Откуда: СПб
Сообщений: 126
Есть около 70 БД на 15 серваках. Сервера периодически бывают недоступны, при этом необходимо организовать получение данных в пользовательский АРМ из всех доступных экземпляров БД. Есть сервер управления системой. Задача заключается в организации проверки доступности всех экземпляров БД со стороны сервера управления системой.
Основные причины недоступности экземпляра БД:
1. Сервер выключен или не подключен к сети
2. БД удалена (а запись в таблице экземпляров БД осталась) или находиться в состоянии IN RECOVERY,OFFLINE и т.д.
3. Отсутствует хранимая процедура, возвращающая данные в АРМ, или права конкретного пользователя на ее вызов

высокая нестабильность обусловлена заменой 2-3 серверов в неделю. Отсюда вытекают вышеперечисленные причины
29 июл 13, 21:46    [14634463]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно организовать курсор!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
SCOM + немного настроек прикладных мониторов и алертов.
29 июл 13, 21:58    [14634496]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно организовать курсор!  [new]
PavluxaF
Member

Откуда: СПб
Сообщений: 126
дорогая штука + поучиться бы ей надо + сисадмина в команде нет
29 июл 13, 22:19    [14634558]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно организовать курсор!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
PavluxaF,

Наколенными поделками в виде линкованных серверов такое хозяйство не мониторят. Можно, конечно, поизгаляться скриптами в связке с sqlcmd, но это больше будет похоже на извращение, IMHO.
29 июл 13, 22:34    [14634603]     Ответить | Цитировать Сообщить модератору
 Re: Помогите правильно организовать курсор!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
PavluxaF
Поясню еще немного более подробно что меня не устраивает
Да в общем по другому нельзя, если делать именно из MSSQL на T-SQL
PavluxaF
4. невозможно проUPDATEить временную таблицу
Почему, можно обновлять...

Непонятно, чем не нравятся отальные пункты, вроде ничего страшного.
Ну конечно, нужно код сделать поудобнее, допустим, тексты запросов формировать в переменных, а не непосредственно в EXEC

Ещё для динамики можно пользоваться процедурой sp_executesql, а не EXEC, это будет удобнее.
29 июл 13, 23:13    [14634749]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить