SQL Server 2008: резервное копирование базы данных перед запуском хранимой процедуры - PullRequest
2 голосов
/ 06 августа 2010

У меня есть хранимая процедура, которая запускается раз в неделю и инициируется пользователем нажатием кнопки на нашем внутреннем веб-сайте.Я хотел бы автоматически выполнить резервное копирование базы данных, прежде чем код в процедуре будет фактически запущен.

Поэтому я создал отдельную хранимую процедуру со следующим кодом:

DECLARE @Path varchar(50)
SET @Path = '\\1.1.1.1\SQLBackup\DBName' + convert(varchar, getdate(), 10) +'.bak' 

BACKUP DATABASE [DBName] TO  DISK = @Path WITH NOFORMAT, NOINIT,  NAME = N'DBname-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

Затем я запускаювыше, из моей другой хранимой процедуры с использованием

EXEC GenerateRenewalBackup

Проблема заключается в том, что приложение выполняет резервное копирование базы данных еще до того, как оно выполнит код во второй хранимой процедуре.идти по этому пути правильно?Размер базы данных составляет всего 38 МБ.Будет ли лучше настроить базу данных как работу?Можете ли вы запустить задание из хранимой процедуры?Любое руководство будет очень полезным.Спасибо.

Ответы [ 5 ]

1 голос
/ 06 августа 2010

Прежде всего, добавьте в свою резервную копию предложение WITH COPY_ONLY, чтобы оно не мешало обычной цепочке резервного копирования для обслуживания (если это вашей цепочки резервного копирования, тогдав любом случае неправильно, и вам нужен правильный план обслуживания на месте).

Далее вы можете:

  • увеличить CommandTimeout в вашем приложении, чтобы оно ожидалодо завершения процедуры (время ожидания по умолчанию составляет 30 секунд).
  • Заставьте кнопку сразу создать / запустить задание агента SQL вместо запуска процедуры.
  • Использовать выполнение асинхронной процедуры .

Какой из них правильный выбор, зависит от многих факторов, только вы знаете.Могу поспорить, что это должна быть регулярная запланированная работа и не должно быть никакого взаимодействия с пользователем, но без понимания бизнес-процесса, управляющего этим, невозможно догадаться.

1 голос
/ 06 августа 2010

Запустите полное резервное копирование накануне вечером (почему бы не на таком маленьком дБ), а затем только разностное резервное копирование или резервное копирование журнала транзакций перед выполнением процедуры.

1 голос
/ 06 августа 2010

Можете ли вы запустить задание из хранимой процедуры?

Да, вы можете использовать sp_startjob , чтобы запустить задание или просто запланировать его выполнение один раздень

1 голос
/ 06 августа 2010

Создание задания агента SQL:.

  1. Первый шаг, Резервное копирование базы данных.
  2. Второй шаг, запустите хранимую процедуру
  3. Определение расписания для запуска задания.
0 голосов
/ 06 августа 2010

SQL, вероятно, в порядке, но не имеет смысла для синхронной операции в веб-приложении. Выключите SP асинхронно, затем сделайте что-то вроде отправки пользователю электронного письма, чтобы сообщить ему, что его действие завершено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...