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

Откуда: Москва
Сообщений: 93
Здравствуйте! проблема следующая. Сервер SQL Express 2008 R2, бэкапирование осуществляю посредством батника и хранимой процедуры. Встал вопрос о ведении определенной таблицы-аудита завершившихся операций резервирования, как успешных, так и нет. Поля таблицы вроде: дата, продолжительность и сообщение (то, которое появляется на вкладке "Сообщения" области результатов.). Гуглил много, но, увы, так и не нашел каким образом этот текст можно поймать в переменную, например. Пожалуйста, подскажите. Возможно, я изначально выбрал неверный подход?! Или все же можно пойти таким путем? Буду очень благодарен за хотя бы маааленькую помощь! Вот сообщение об ошибке (или там же сообщение об успехе операции):

Сообщение 3201, уровень 16, состояние 1, строка 1
Cannot open backup device 'C:\Users\kochkin\Desktop\DeskTop'. Operating system error 5(Отказано в доступе.).
Сообщение 3013, уровень 16, состояние 1, строка 1
BACKUP DATABASE is terminating abnormally.
19 май 14, 19:51    [16039242]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а на планировщик это повесить? и задействовать штатную систему оповещений?
хоть на планировщик ОС, хоть на планировщик СУБД?
19 май 14, 20:03    [16039289]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
или вы про это:

@sqlcmd -S .\R2 -E -b -Q "declare @i int; set @i = 1"
@Echo %errorlevel%

@sqlcmd -S .\R2 -E -b -Q "declare @i int; set @i = 1/0"
@Echo %errorlevel%

в первом случае %errorlevel% = 0, во втором, как и просили (-b + ошибка), = 1 - стройте обработку ошибок в своем батнике..
19 май 14, 20:34    [16039409]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
gerogekochkin
Member

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

хочу вести таблицу аудита. Можно ли вот второй ваш вариант как-то реализовать в процедуре, и строку с сообщением об ошибке/успехе записывать в определенное поле таблицы? Спасибо.
20 май 14, 10:30    [16041024]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
Glory
Member

Откуда:
Сообщений: 104751
gerogekochkin
хочу вести таблицу аудита.

Аудита чего ? всех ошибок на сервере ?

gerogekochkin
Можно ли вот второй ваш вариант как-то реализовать в процедуре, и строку с сообщением об ошибке/успехе записывать в определенное поле таблицы?

Откройте для себя
- maintenance plan-ы с их логированием
- TRY CATCH
20 май 14, 10:34    [16041040]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
gerogekochkin
Member

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

таблицу с датами и результатами резервного копирования.
в express edition к сожалению планы отсутствуют...
20 май 14, 10:45    [16041126]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а зачем вам "таблица аудита", извините?
поставьте ваше задание на планировщик ОС и настройте уведомления
собственно, там и будет вам и история и все плюшки
а как сделать, чтобы облом с выполнением генерировал ошибку - вы уже знаете
или редакцию скуля поднимайте или в разработку чуть ныряйте, что ли )
20 май 14, 11:27    [16041375]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
difed
Member

Откуда:
Сообщений: 9
А таблица msdb.dbo.backupset вам не поможет?
Вроде там храниться информация об успешном бэкапировании.
Для диагностики создания бекапов должна подойти.
20 май 14, 12:54    [16042104]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
gerogekochkin
Member

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

да, там есть некая информация, однако - об успешных бэкапах. Вопрос изначально был о том, можно ли в процедуре вытащить текстовое сообщение и изагнать его в таблицу. В любом случае, спасибо.
20 май 14, 13:05    [16042162]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8815
Сообщения об ошибках ловятся через BEGIN TRY и т.д. Выше писали об этом.
20 май 14, 13:11    [16042196]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
можно XEvents использовать для мониторинга бэкапирования
20 май 14, 13:13    [16042219]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Владислав Колосов
Сообщения об ошибках ловятся через BEGIN TRY и т.д. Выше писали об этом.




безусловно. вот только на коннекте уже 100 лет про это мусолят ибо:

backup database not_existing_db to disk = 'c:\not_existing_folder\not_existing_file.bak'

Server: Msg 911, Level 16, State 11, Line 1
Database 'not_existing_db' does not exist. Make sure that the name is entered correctly.
Server: Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.


но при этом, что примечательно:

begin try
backup database not_existing_db to disk = 'c:\not_existing_folder\not_existing_file.bak'
end try
begin catch
if @@trancount <> 0 rollback
print error_message()
end catch

BACKUP DATABASE is terminating abnormally.


да, очень информативно! а вот использование агента / того же sqlcmd и т.д. позволит взять таки полный output от команды и после в логе нормально все прочитать. а не под редакцией кепа
20 май 14, 13:24    [16042298]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
gerogekochkin
Member

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

просветите в каком логе читать и каким образом?
20 май 14, 17:41    [16044174]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
Crimean
Member

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

в том, который вы собираетесь писать
самый простой вариант - в том же батнике писать результат в файл протокола
файлы протоколов бить по дням, что ли
ну и т.д.
вы бы подняли свой сервер до "экспресса с адвансед сервисами" - там бы и планировщик сиквельный уже был со всеми вытекающими, что ли
20 май 14, 19:04    [16044586]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
gerogekochkin
Member

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

результат пишется в файл через использование параметра "-o" в батнике. Затем файл считывается на наличие фразы "successfully processed", если ее нет - отправка почты с именем компьютера и сообщением, что следует обратить внимание. А SQL, кстати, with advanced services, но насчет планировщика сиквельного я и не знал
20 май 14, 19:27    [16044671]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать в переменную сообщение об успешном завершении резервного копирования?  [new]
Crimean
Member

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

жуть какая. зачем парсить, если выполнение и так явно ставит %errorlevel%? на него и "реагируйте"!
а дальше - включайте воображение :)
20 май 14, 19:31    [16044687]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить