Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

Получение выходного параметра   Найти похожие ветки 

 
overstep   (2004-06-23 17:24) [0]

Добрый день. Подскажите пожалуйста. Выполняю комманду RESTORE VERIFYONLY, в лучшем случае она возвращает "The backup set is valid.", но как мне перехватить это сообщение и обработать, то есть при неудаче повторить резервирование.


 
Ega23 ©   (2004-06-23 17:45) [1]

А в чём проблема?

If the backup is valid, Microsoft® SQL Server™ returns the message: “The backup set is valid.”


 
overstep   (2004-06-24 11:57) [2]

Проблема в том, что я это сообщение вижу, но мне его надо обработать автоматически. То есть обратиться к какой-то переменнной, которая хранит последнее сообщение и сравнить её с “The backup set is valid.” Ну короче говоря если backup окончился неудачей то повторить его заново и не более 3-ех раз.


 
bushmen ©   (2004-06-24 13:30) [3]

Если есть строка ответа, то заключить ее в цикл и поставить счетчик - не такое уж и сложное дело :)


 
overstep   (2004-06-24 16:22) [4]

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


 
Ega23 ©   (2004-06-24 16:23) [5]

Ты откуда её выполняешь? С клиента?


 
bushmen ©   (2004-06-24 16:42) [6]

>что за ответ был после выполнения команды

какими компонентами пользуешься для доступа?


 
overstep   (2004-06-24 17:26) [7]

Команда выполняется как задание SQL Server Agent-а, на сервере. Задача написана на Transact-SQL. Ответ всегда одинаковый в положительном случае. Заранее ответ неизвестен, да и потом я ж не буду сидеть и смотреть какой выдаст ответ. Это (решение дальнейших действий) должно происходить без моего участия.


 
Ega23 ©   (2004-06-24 17:42) [8]

Стоп, это у тебя job такой написан, так?


 
Ega23 ©   (2004-06-24 17:44) [9]

Полный текст на TSQL можешь привести?


 
overstep   (2004-06-25 12:51) [10]

Далее приведен текст как это все организовано
-----------------------------------------------------------
--full backup all databases to separate archive files "dbname_backup.rar"
DECLARE @DBName     varchar(128),
       @BackupPath varchar(29)
SET @BackupPath="D:\MSSQL\BACKUP\F_"+CONVERT(varchar(10),GETDATE(),126)+"\"
EXEC("xp_cmdshell ""mkdir "+@BackupPath+"""")

--declare main cursor
DECLARE main_cur CURSOR FOR
SELECT name
FROM sysdatabases
WHERE name<>"tempdb"
ORDER BY name

--backup all databases to archive files in main cursor
OPEN main_cur
FETCH NEXT FROM main_cur INTO @DBName
WHILE @@FETCH_STATUS=0
BEGIN
 EXEC("BACKUP DATABASE ["+@DBName+"] TO DISK = N"""+@BackupPath+@DBName+"_backup.BAK"""+" WITH INIT, NOUNLOAD, NAME = N"""+@DBName+" backup"""+", NOSKIP, STATS = 10, NOFORMAT")
--  EXEC("RESTORE VERIFYONLY FROM DISK = N"""+@BackupPath+@DBName+"_backup.BAK""")
--  эта строка забанина потому как не знаю что делать с ответом
 EXEC("xp_cmdshell ""C:\Program Files\WinRAR\WinRAR M -rr3p -ep -k "+@BackupPath+@DBName+"_backup.rar "+@BackupPath+@DBName+"_backup.BAK""")
 FETCH NEXT FROM main_cur INTO @DBName
END  

--close and deallocate main cursor
CLOSE main_cur
DEALLOCATE main_cur
------------------------------------------------------------
Базы backup-ятся в цикле все кроме tempdb, а потом архивируются и удаляются bak-файлы. Впринципе можно сделать, то что я хотел через job в SQL Server Agent, но прийдется переделывать, кучу шагов делать, а так я использовал бы только его шедулер и все. Да и гибкости по более.


 
Ega23 ©   (2004-06-25 13:51) [11]

Блин, вот ты озадачил! Полчаса бьюсь - и никак!


 
Ega23 ©   (2004-06-25 14:01) [12]

Слушай, а @@FETCH_STATUS если проверять?

Как в этом примере:

WHILE (@@FETCH_STATUS <> -1)
BEGIN
   /* A @@FETCH_STATUS of -2 means that the row has been deleted.
   There is no need to test for this because this loop drops all
   user-defined tables.    */.
   EXEC ("DROP TABLE " + @tablename)
   FETCH NEXT FROM tables_cursor INTO @tablename
END


 
bushmen ©   (2004-06-25 16:07) [13]

>Да и гибкости по более.

Напиши скриптом в DTS - вот и гибкость будет :) А потом запускай ее уже из хранимой процедуры, а на выход передавай результат выполнения DTS.


 
overstep   (2004-06-29 12:25) [14]

Я нашел одну фичу - @@ERROR (возвращает код ошибки или ноль(если успешно) последнего выполненного Transact-SQL указателя (statement))
После неё проверка выглядет так:
EXEC("BACKUP DATABASE ["+@DBName+"] TO DISK = N"""+@BackupPath+@DBName+"_backup.BAK"""+" WITH INIT, NOUNLOAD, NAME = N"""+@DBName+" backup"""+", NOSKIP, STATS = 10, NOFORMAT")
EXEC("RESTORE VERIFYONLY FROM DISK = N"""+@BackupPath+@DBName+"_backup.BAK""")
IF (@@ERROR <> 0)
BEGIN
...
END
------------------------------------------------
Но становится другая проблема, переменная то глобальная, я не знаю как поведет она себя при многопользовательском режиме.
Смотрел примеры microsoft, так они добавляют @ReturnCode:
EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id.
Опять проблема, не смог получить @ReturnCode от EXEC("RESTORE VERIFYONLY FROM DISK = N"""+@BackupPath+@DBName+"_backup.BAK""").
Стало быть это работает с хранимы процедурами.
------------------------------------------------
А теперь по сути. После удачного RESTORE VERIFYONLY выдается сообщение "The backup set is valid." с кодом error=3262 из master.sysmessages. @@ERROR опять таки возвратит ноль, но как мне узнать, что такое сообщение было. Ведь даже в многопользовательской системе это делает только один пользователь. Вероятность ошибки будет очень мала.

>Напиши скриптом в DTS - вот и гибкость будет
bushmen подкинь пожалуйста ссылку или что нибудь про DTS. Я скрипты в нем никогда не пробовал



Страницы: 1 вся ветка

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.044 c
1-1089546125
Optimizator
2004-07-11 15:42
2004.07.25
Компонент label


14-1089085236
jb
2004-07-06 07:40
2004.07.25
Чего бы плохого шефу сделать


14-1088939043
Nick Denry
2004-07-04 15:04
2004.07.25
Windows .VBS (WSH) как альтернатива Linux .SH


9-1081803894
Werwolf
2004-04-13 01:04
2004.07.25
Люди кто знает .................


14-1089123566
sniknik
2004-07-06 18:19
2004.07.25
Диалог у монитора