Назад | Перейти на главную страницу

Создание сценария автоматического перемещения SQLServer 2008 DR

Мы используем встроенную в SQLServer отправку журналов для входа на наш сайт аварийного восстановления, но раз в месяц проводим тест аварийного восстановления, который требует, чтобы мы перемещались между нашими Live и BAckup серверами. Мы запускаем несколько (30) баз данных в системе, поэтому ручное резервное копирование окончательных журналов и отключение заданий - это слишком много работы и занимает слишком много времени. У меня нет проблем, я напишу его сценарий, но у меня возникли проблемы с ним, всегда жалуясь, что окончательное логирование слишком рано для применения, хотя я не экспортирую окончательный журнал, пока не переведу базу данных в режим без восстановления. Во-первых, нет ли у кого-нибудь простого и надежного способа сделать это? Я локализовался в каком-то стороннем программном обеспечении (я думаю, что это было redgate sqlbackup), но в этой ситуации это тоже не облегчило задачу. То, что я хочу сделать, это в основном запустить сценарий (серию хранимых процедур), чтобы привести меня к аварийному восстановлению, и запустить другой, чтобы вернуть меня без потери данных. На данный момент мои скрипты очень упрощены, но вот они:

2 сервера Primary Paris Secondary ParisT

StartAgentJobAndWait - это сценарий, написанный кем-то другим (ta), и он просто проверяет, закончились ли задания, или завершает их, если они никогда не заканчиваются.

На данный момент я просто использую тестовую базу данных под названием BOB2, но если я смогу заставить ее работать, я передам базу данных и имена вакансий.

из Парижа:

/* Disable backup job */
exec msdb..sp_update_job @job_name = 'LSBackup_BOB2', @enabled = 0
exec PARIST.msdb..sp_update_job @job_name = 'LSCopy_PARIS_BOB2', @enabled = 0
exec PARIST.msdb..sp_update_job @job_name = 'LSRestore_PARIS_BOB2', @enabled = 0

exec PARIST.master.dbo.DRStage2

ParisT DRStage2
DECLARE @RetValue varchar (10)

EXEC @RetValue = StartAgentJobAndWait  LSCopy_PARIS_BOB2 , 2
SELECT ReturnValue=@RetValue

if @RetValue = 1
 begin
  print 'The Copy Task completed Succesffuly'
 END

ELSE
 print 'The Copy task failed, This may or may not be a problem, check restore state of database'

SELECT @RetValue = 0

EXEC @RetValue = StartAgentJobAndWait  LSRestore_PARIS_BOB2 , 2
SELECT ReturnValue=@RetValue

if @RetValue = 1
 begin
  print 'The Restore Task completed Succesffuly'
 END

ELSE
 print 'The Copy task failed, This may or may not be a problem, check restore state of database'

exec PARIS.master.dbo.DRStage3

/* Do the last logship and move it to Trumpington */
BACKUP log "BOB2"
to disk='c:\drlogshipping\BOB2.bak'
with compression, norecovery
EXEC xp_cmdshell 'copy c:\drlogshipping \\192.168.7.11\drlogshipping'

EXEC PARIST.master.dbo.DRTransferFinish


AS
BEGIN

restore database "BOB2"
from disk='c:\drlogshipping\bob2.bak'
with recovery

Чтобы дать вам представление о создании сценариев автоматической генерации для восстановления, вот сценарий, который я написал для автоматизации создания сценария восстановления для конкретной базы данных.

http://tenbulls.co.uk/2011/02/08/t-sql-tuesday-015-%E2%80%93-spend-time-now-to-save-time-later/

Обратите внимание, что многое, если не все, что вы хотите сделать, можно сделать с помощью сочетания Powershell, SMO и T-SQL. Это просто зависит от того, лучше ли потратить время на полное или частичное решение. Лично я бы выбрал частичное, поэтому вам всегда нужно, чтобы при выполнении подобных задач использовался ручной элемент.

С уважением, Марк.

Является ли это иногда хоть работать? Мне приходилось делать то же самое для тестирования DR, но я не сталкивался с этим. То, что вы делаете, должно технически работать.

Проверяли ли вы, выполняется ли в настоящее время задание LSBackup в этой базе данных, прежде чем запускать задание LSCopy? Похоже, вам просто не хватает самой последней резервной копии до резервного копирования без восстановления. Работа LSCopy может просто не получить все.

Попробуйте снова запустить LSCopy после того, как вы запустите резервное копирование без восстановления, к тому времени планировщик завершит все резервные копии, и все будет в порядке. Кроме того, если вы установите задание LSCopy для сохранения вывода в файл, я считаю, что вы увидите ошибку, если есть резервная копия журнала, которую нельзя скопировать (например, если она используется, потому что резервная копия в настоящее время записывает в нее ).