Script de um movimento automatizado do SQLServer 2008 DR

4

Usamos o registro de log integrado no SQLServer para acessar nosso site de DR, mas uma vez por mês fazemos um teste de DR que nos obriga a alternar entre nossos servidores Live e BAckup. Nós rodamos múltiplos (30) bancos de dados no sistema, então fazer o backup manual dos logs finais e desabilitar os trabalhos é muito trabalhoso e leva muito tempo. Embora eu não tenha problema, vou fazer o script, mas tenho problemas com isso sempre afirmando que o log final é muito cedo para aplicar, embora eu não exporte o log final até colocar o banco de dados no modo de recuperação de dados. Em primeiro lugar, alguém não é uma maneira simples e confiável de fazer isso? Eu tenho loko em algum software de terceiros (redgate sqlbackup eu acho que foi), mas que didnt tornar mais fácil nesta situação também. O que eu quero ser capaz de fazer é basicamente rodar um script (uma série de procedimentos armazenados) para me levar ao DR e executar outro para me trazer de volta sem dataloss. Meus scripts são muito simplistas no momento, mas aqui estão eles:

2 servidores Paris principal Paris secundário

O StartAgentJobAndWait é um script escrito por outra pessoa (ta) e apenas verifica se as tarefas terminaram ou encerra se nunca termina.

No momento, estou apenas usando um banco de dados de teste chamado BOB2, mas se eu conseguir, o trabalho passará no banco de dados e nos nomes dos trabalhos.

de 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
    
por ItsAMystery 04.03.2010 / 14:41

2 respostas

0

Será que isso às vezes funciona? Eu tive que fazer o mesmo tipo de coisa para testes de DR, mas não corri para isso. O que você está fazendo deve funcionar tecnicamente.

Você verificou se o trabalho LSBackup está em execução no banco de dados antes de iniciar o trabalho LSCopy? Parece que você está perdendo o backup mais recente antes de seu backup de recuperação normal. O trabalho LSCopy pode não estar recebendo tudo.

Tente executar o LSCopy novamente depois de executar o backup do norecovery. Nesse momento, o agendador terá concluído todos os backups e você deverá estar bem. Além disso, se você definir o trabalho LSCopy para salvar a saída em um arquivo, acredito que você verá um erro se houver um backup de log que não possa ser copiado (como se estivesse em uso porque um backup está gravando nele) ).

    
por 13.01.2011 / 20:40
0

Só para você ter uma ideia sobre a criação de scripts de geração automática para restaurações, aqui está uma que eu escrevi para automatizar a geração de um script de restauração para um banco de dados específico.

link

Por favor, note que muito se não tudo que você quer fazer pode ser feito através de uma mistura de Powershell, SMO e T-SQL. Só depende se o tempo é melhor gasto em uma solução total ou parcial. Pessoalmente eu iria para parcial, então você sempre vai querer ter um elemento manual envolvido ao executar tarefas como essas.

Atenciosamente, Mark.

    
por 17.02.2011 / 20:26