locked
Restore automático de base de dados em sites diferentes RRS feed

  • Pergunta

  • Prezados, tenho o seguinte script abaixo, no qual o mesmo utilizo para restaurar base de dados diariamente, porém utilizo para fazer restores em bases que fazem parte da mesma instância, ou seja, um restore local. Surgiu a necessidade de fazer restores da base em ambientes diferentes, no qual a base A esteja no servidor 192.168.0.1 e a base B esteja num servidor 192.168.0.2. Na tentativa de adaptar a consulta que já utilizo percebo o mesmo não retornar nenhum erro na execução, porém não é chegado ao que pretendo, restauração da base no servidor 2. Gostaria do help dos colegas para compreensão melhor.

    Agradeço desde já!

    DECLARE @DBOrigem nvarchar(128), @DBDestino nvarchar(128)
    DECLARE @BackupFile nvarchar(260), @LogicNameDBDBDestino nvarchar(128), @LogicNameLogDBDestino nvarchar(128)
    DECLARE @CamDBDestino nvarchar(128), @CamLogDestino nvarchar(128)
    DECLARE @TSQL varchar(1000)
    
    SET @DBOrigem='base_principal'
    SET @DBDestino='base_secundaria'
    
    SELECT @LogicNameDBDBDestino=name, @CamDBDestino=physical_name FROM sys.master_files WHERE database_id = db_id(@DBDestino) AND type=0
    SELECT @LogicNameLogDBDestino=name, @CamLogDestino=physical_name FROM sys.master_files WHERE database_id = db_id(@DBDestino) AND type=1
    CREATE TABLE #FileList(Name varchar(200), depth numeric, IsFile numeric) 
    INSERT INTO #FileList exec master.dbo.xp_dirtree 'C:\Program Files\Microsoft SQL Server\MSSQL11.CONSULTI\MSSQL\Backup', 1, 1 
    SELECT @BackupFile = Name from #filelist
    SET @TSQL='RESTORE DATABASE ' + @DBDestino + ' FROM DISK = C:\Program Files\Microsoft SQL Server\MSSQL11.CONSULTI\MSSQL\Backup\''' + @BackupFile + ''' WITH REPLACE, MOVE ''' + @LogicNameLogDBDestino + ''' TO ''' + @CamLogDestino + ''' , MOVE ''' + @LogicNameDBDBDestino + ''' TO ''' + @CamDBDestino + ''''
    drop table #filelist
    EXEC(@TSQL)
    
    
    

      
    terça-feira, 13 de setembro de 2016 21:23

Respostas

  • Jerfeson,

    Na verdade a partir do SQL Server 2012 no processo de instalação do SQL Server você já consegui definir o local padrão de backup!!!

    Isso é possível ser alterado também através do Management Studio após o SQL Server esta instalado, o que você deveria fazer é justamente pensar em definir um local padrão.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 20 de setembro de 2016 15:11
    Moderador

Todas as Respostas

  • Jerfeson,

    Ok, não vejo muitos problemas em realiazar este procedimento, mas algumas perguntas são importantes:

    1 - Estes servidores possuem a mesma versão e edição do SQL Server?

    2 - A capacidade de disco dos servidores é igual?

    3 - As configurações de armazenamento dos bancos é a mesma? Por exemplo no servidor A você armazena na Unidade D:\ na pasta Banco, para facilitar o processo de restore seria legal que o servidor B tenha a mesma estrutura.

    4 - Os bancos de dados já existem no servidor B?

    5 - Estes scripts será configurados para ser executados de maneira programada?

    6 - Existe algum tipo de comunicação entre os servidores?


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 14 de setembro de 2016 16:10
    Moderador
  • 1 - Estes servidores possuem a mesma versão e edição do SQL Server?

    Possuem sim a mesma versão e edição (SQL Server 2008 R2 SP3).

    2 - A capacidade de disco dos servidores é igual?

    Não, porém no cenário atual o servidor A tem uma rotina que realizar os backups diariamente full e log (intervalo de 10 minutos), posteriormente exporta os arquivos para o servidor B e ao final uma rotina expurga os arquivos mais antigos de backups full e log do disco do servidor A. 

    3 - As configurações de armazenamento dos bancos é a mesma? Por exemplo no servidor A você armazena na Unidade D:\ na pasta Banco, para facilitar o processo de restore seria legal que o servidor B tenha a mesma estrutura.

    Não tem a mesma configuração, pois além de cada um ter capacidades distintas, os mesmos está em sites diferentes. O servidor B apenas alocar esses arquivos para testes através de restores e armazenamento de segurança. 

    4 - Os bancos de dados já existem no servidor B?

    No servidor B já existe uma estrutura construída com banco de dados para realizar os testes dos arquivos e oferecer cenário de homologação da equipe de suporte do sistema.

    5 - Estes scripts será configurados para ser executados de maneira programada?

    Sim, pretendo colocar como já utilizo em outros ambientes. Configurar um job para diariamente ser executado e ter a base_teste sempre atualizada, sendo assim ter os arquivos de backups testados com o restore.

    6 - Existe algum tipo de comunicação entre os servidores?

    Sim, além dos mesmos estarem na mesma rede e domínio, configurei um linkserver para ter a comunicação entre os extremos.

    quarta-feira, 14 de setembro de 2016 20:09
  • Jerfeson,

    Certo, o único detalhe então que você vai ter que se atender é a diferença na estrutura dos seus discos rígidos existentes no servidor B, esse será um cuidado que você teria que adotar, especificando no seu script os locais e unidades de disco que devem ser restaurados os bancos, bem como, utilizar a opção Move no comando Restore detalhando cada arquivo que compõem o banco de dados.

    Será que para o seu cenário, o espelhamento de banco de dados ou até mesmo replicação não poderia ser uma solução ao invês de ficar utilizando os scripts?

    Uma curiosidade porque realizar um backup de log a cada 10 minutos?

    Você realmente tem uma manipulação tão grande de dados então pouco tempo?


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 16 de setembro de 2016 15:50
    Moderador
  • Na verdade o problema está na definição da localização dos arquivos de backups que foram exportado para o servidor B. Esse novo diretório que estão alocados os arquivos de backup que não ficam registrados na coluna physical_device_name do objeto backupmediafamily.

    Será que para o seu cenário, o espelhamento de banco de dados ou até mesmo replicação não poderia ser uma solução ao invés de ficar utilizando os scripts?

    O objetivo está nos testes dos aquivos de backups restaurando no servidor B. A replicação Mirroring já existe, mas com efeito de alta disponibilidade do ambiente de dados.

    Uma curiosidade porque realizar um backup de log a cada 10 minutos?

    Seguindo as características do ambiente  da perca de dados menor possível, além de que à uma manipulação intensa de transações. Não se tem arquivos de Tlogs muitos grandes para esse ambiente, mas foi exigência de auditoria. 

    Você realmente tem uma manipulação tão grande de dados então pouco tempo?

    Sim, mesmo o read sendo maior que o writes é intensa o expediente produtivo da empresa.

     
    sábado, 17 de setembro de 2016 21:08
  • Jerfeson,

    Na verdade a partir do SQL Server 2012 no processo de instalação do SQL Server você já consegui definir o local padrão de backup!!!

    Isso é possível ser alterado também através do Management Studio após o SQL Server esta instalado, o que você deveria fazer é justamente pensar em definir um local padrão.


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 20 de setembro de 2016 15:11
    Moderador