Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.092 c
1-1089196662
Relaxxx
2004-07-07 14:37
2004.07.25
Ускорить построение TreeView, как???


3-1088767022
Анонимщик
2004-07-02 15:17
2004.07.25
Исключение при неустановленных драйверах


14-1089129012
Aplay
2004-07-06 19:50
2004.07.25
Еду в Москву. Подскажите


6-1085399228
besen-ok
2004-05-24 15:47
2004.07.25
Вопрос: есть API функция аналог команды NET SEND ? (-)


4-1086149145
Newbe
2004-06-02 08:05
2004.07.25
Именение рабочей области как это делает панель office





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский