Scripting an automated SQLServer 2008 DR move

Posted by ItsAMystery on Server Fault See other posts from Server Fault or by ItsAMystery
Published on 2010-03-04T13:41:01Z Indexed on 2011/01/13 19:55 UTC
Read the original article Hit count: 708

Hi All

We use the built in logshipping in SQLServer to logship to our DR site but once in a month do a DR test which requires us to move back and forth between our Live and BAckup servers. We run multiple (30) databases on the system so manually backing up the final logs and disabling the jobs is too much work and takes too long. I though no problem, I will script it but have run into trouble with it always complaninig that the final logship is too early to apply even though I dont export the final log until putting the database into norecovery mode. Firstly, does any one no a simple and reliable way of doing this? I have lokoed at some 3rd party software (redgate sqlbackup I think it was) but that didnt make it easy in this situation either. What I want to be able to do is basically run a script (a series of stored procedures) to get me to DR and run another to get me back with no dataloss. My scripts are very simplistic at the moment but here they are:

2 servers Primary Paris Secondary ParisT

The StartAgentJobAndWait is a script written by someone else (ta) and just checks the jobs have finished or quits it if it never ends.

At the moment I am just using a test database called BOB2 but if I can get it working will pass in the database and job names.

from PARIS:

/* 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

© Server Fault or respective owner

Related posts about sql-server-2008

Related posts about disaster-recovery