Папка базы данных только в случае успешного выполнения резервного копирования
Это может быть легко для кого-то, но я пока не нашел простого решения.
На данный момент я автоматизирую более крупный процесс, и один шаг – создать резервную копию, а затем сбросить базу данных, прежде чем воссоздавать ее с нуля.
У меня есть сценарий, который сделает резервную копию и упадет следующим образом:
- Журналы транзакций резервного копирования SQL Server 2008
- Длительность запросов SQL больше для меньшего набора данных?
- Как базы данных физически хранят данные в файловой системе?
- Моделирование размеров: должна ли таблица фактов иметь внешний ключ?
- Жалобы на пользователя, которого нет
Use [Master] BACKUP DATABASE [databaseName] TO DISK='D:\Backup\databaseName\20100122.bak' ALTER DATABASE [databaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE DROP DATABASE [databaseName]
но я беспокоюсь, что DROP произойдет, даже если BACKUP завершится с ошибкой.
Как я могу изменить сценарий, поэтому, если BACKUP завершится с ошибкой, DROP не произойдет?
Заранее спасибо!
- Что такое альтернатива SQL Server 2008 R2 для Oracle 11g RAC?
- Как вы нажимаете локальную базу данных (dev) загрузки dev?
- Хранение файла в базе данных в отличие от файловой системы?
- SQL Server: varbinary или int для хранения битовой маски?
- Аудит полей (CreatedBy, UpdateBy) в таблицах. Это хорошая идея?
- Методы старения данных
- Несколько баз данных Vs Single Database с логически разделенными данными
- База данных SQL Server - скрытые поля?
Если ваша версия SQL Server равна 2005 году или выше, вы можете обернуть свои заявления с помощью try catch. Если резервное копирование не удастся, оно перейдет к catch, не отбрасывая базу данных …
Use [Master] BEGIN TRY BACKUP DATABASE [databaseName] TO DISK='D:\Backup\databaseName\20100122.bak' ALTER DATABASE [databaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE DROP DATABASE [databaseName] END TRY BEGIN CATCH PRINT 'Unable to backup and drop database' END CATCH
Вы можете уловить любые коды ошибок, которые происходят с переменной ошибки SQL Server, следующим образом. Ноль указывает на отсутствие ошибки. Обратите внимание, что значение устанавливается каждый раз, когда выполняется инструкция T-SQL, поэтому вам нужно поймать его, как только вы выполнили резервное копирование:
USE [Master] DECLARE @errorCode int BACKUP DATABASE [databaseName] TO DISK='D:\Backup\databaseName\20100122.bak' SET @errorCode = @@ERROR IF (@errorCode = 0) BEGIN ALTER DATABASE [databaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE DROP DATABASE [databaseName] END
Это самый простой способ, о котором я могу думать, а также позволяющий вам распознавать известные коды ошибок и обрабатывать их по-разному, если вам нужно. SELECT * FROM master.sys.messages
дает вам список всех известных кодов ошибок и сообщений, если вы хотите их продолжить.