none
SQL Restore RRS feed

  • Pergunta

  • Boa tarde,

    Antes de mais peço desculpa se este assunto já estiver tratado num outro tópico no entanto não encontrei (e os meus conhecimentos não são ainda tão profundos).

    Tenho a seguinte situação:

    Tenho um servidor que aloja sensivelmente 1200 BD's SQL (SQL 2005, SQL 2008 e SQL 2017) do qual são efetuados backups (2x dia).

    Regularmente, para verificação, necessito de efetuar uma reposição num outro servidor configurado exatamente igual ao primeiro.

    Alguém dispõe de um script que automatize este processo?

    Agradeço a vossa ajuda.

    terça-feira, 16 de julho de 2019 15:20

Respostas

Todas as Respostas

  • Deleted
    terça-feira, 16 de julho de 2019 15:46
  • Obrigado pela Resposta.

    O ideal seria a reposição do backup com verificação e relatório se possível.

    O segundo servidor é um servidor de backup que temos que está preparado para ser utilizado em caso de emergência. Está completamente offline desligado da rede.

    O que tenho de fazer é pegar num disco com os .bak ligar a este servidor e repor as BD's (fazendo attach das que não existirem). O antigo responsável por esta tarefa fazia de forma "manual" utilizando um software free mas é um processo demorado...

    Já encontrei na net alguns scripts mas não consigo por a funcionar.

    terça-feira, 16 de julho de 2019 17:35
  • Nuno,
    Boa tarde.

    Já testou o DBA Tools ?
    Acho que ele pode te ajudar nessa validação dos seus vários backups.

    https://docs.dbatools.io/#Test-DbaLastBackup

    terça-feira, 16 de julho de 2019 18:05
  • Nuno,

    Gostaria de fazer algumas perguntas para entender melhor:

    1 - Como você realiza o backup de todos estes bancos de dados?

    Eu elaborei a algum tempo uma Stored Procedure que me permite fazer backup de todos os bancos e armazenar em um local específico, acredito que para começar no que diz respeito ao processo de backup automatizado ela poderá lhe ajudar:

    -- Criando --
    Create Procedure P_BackupAllUsersDatabases
    As
    Begin
     Begin Try
      Select SD.DbId, 'Backup Database ['+sd.name + '] To Disk = '+'''S:\MSSQL-2017\Backup\'+sd.name+'.Bak'+''' With Init, NoFormat, Description = '+'''Backup para armazenamento - Database - '+sd.Name+''''+Char(13) As 'Command'
      Into #CommandBackupDatabases
      from Sys.SysDatabases SD
      WHERE  name NOT IN ('master', 'msdb', 'model', 'tempdb')
      and    status <> 66048
    
      Declare @Counter Int, @Command NVarchar(1000)
    
      Set @Counter = (Select MIN(DBID) from #CommandBackupDatabases)
    
      While @Counter < (Select COUNT(DBID) + Min(DBID) From #CommandBackupDatabases)
       Begin
     
        Set @Command = (Select Command From #CommandBackupDatabases Where dbid = @Counter) 
      
        Exec(@Command)
      
        Set @Counter +=1
      End
     End Try
     Begin Catch
       SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity,
                    ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure,
                    ERROR_MESSAGE() AS ErrorMessage, ERROR_LINE() AS ErrorLine;   
     End Catch
    End
    
    -- Executando --
    Exec P_BackupAllUsersDatabases

    2 - Em relação ao processo de transferência destes backups de um servidor para outro, como você realiza?

    Eu particularmente na última multinacional que trabalhei, tinhamos mais de 2000 bancos de dados espalhados entre diversos servidores, uma das estratégicas para realizar a transfêrencia destes arquivos era utilizar uma tarefa agendada que executava um .bat processamento a cópia dos arquivos através dos comandos Robocopy ou Xcopy em modo prompt-de-comando.

    Acho que isso poderá lhe ajudar.

    No que diz respeito ao processo de restauração, este processo de sobreescrever ou substituir os bancos, não precisa ser feito via attach, mas sim através de um Restore Database processando cada arquivo, mesmo que o banco exista ou não.

    Outro detalhe importante, o próprio SQL Server possui comandos que podem nos ajudar a validar toda estrutura, arquivos e até mesmo e legitimidade do conteúdo do backup, abaixo apresento como você poderia utilizar estes comandos:

    Use Master
    Go
    
    --Retorna Informações sobre as mídias de backup --
    Restore LabelOnly from Disk = 'C:\Backup\Backup-Simples-Criptografia.bak'
    Go
    
    --Retorna Informações sobre os backups --
    Restore HeaderOnly from Disk = 'C:\Backup\Backup-Simples-Criptografia.bak'
    Go
    
    /* O comando RESTORE VERIFYONLY realiza uma checagem na integridade dos backups de um 
    dispositivo, verificando se o mesmo é legível, este comando não verifica a estrutura de 
    dados existente dentro do backup. Se o backup for válido, o SQL Server retorna uma mensagem 
    de sucesso.*/
    Restore VerifyOnly from Disk = 'C:\Backup\Backup-Simples-Criptografia.bak'
    Go
    
    -- Retorna informações sobre os arquivos de dados e log (*.mdf, *.ndf e *.ldf) armazenados em um dispositivo --
    Restore FileListOnly from Disk = 'C:\Backup\Backup-Simples-Criptografia.bak'
    Go

    Espero que de alguma forma estes exemplos e meus questionamentos possam ajudar.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 16 de julho de 2019 18:25
    Moderador
  • Deleted
    terça-feira, 16 de julho de 2019 19:52
  • Olá.

    Boa tarde.

    Obrigado. 

    Não conhecia. Vou testar.

    quarta-feira, 17 de julho de 2019 13:33
  • Nuno,

    Gostaria de fazer algumas perguntas para entender melhor:

    1 - Como você realiza o backup de todos estes bancos de dados?

    Eu elaborei a algum tempo uma Stored Procedure que me permite fazer backup de todos os bancos e armazenar em um local específico, acredito que para começar no que diz respeito ao processo de backup automatizado ela poderá lhe ajudar:

    -- Criando --
    Create Procedure P_BackupAllUsersDatabases
    As
    Begin
     Begin Try
      Select SD.DbId, 'Backup Database ['+sd.name + '] To Disk = '+'''S:\MSSQL-2017\Backup\'+sd.name+'.Bak'+''' With Init, NoFormat, Description = '+'''Backup para armazenamento - Database - '+sd.Name+''''+Char(13) As 'Command'
      Into #CommandBackupDatabases
      from Sys.SysDatabases SD
      WHERE  name NOT IN ('master', 'msdb', 'model', 'tempdb')
      and    status <> 66048
    
      Declare @Counter Int, @Command NVarchar(1000)
    
      Set @Counter = (Select MIN(DBID) from #CommandBackupDatabases)
    
      While @Counter < (Select COUNT(DBID) + Min(DBID) From #CommandBackupDatabases)
       Begin
     
        Set @Command = (Select Command From #CommandBackupDatabases Where dbid = @Counter) 
      
        Exec(@Command)
      
        Set @Counter +=1
      End
     End Try
     Begin Catch
       SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity,
                    ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure,
                    ERROR_MESSAGE() AS ErrorMessage, ERROR_LINE() AS ErrorLine;   
     End Catch
    End
    
    -- Executando --
    Exec P_BackupAllUsersDatabases

    2 - Em relação ao processo de transferência destes backups de um servidor para outro, como você realiza?

    Eu particularmente na última multinacional que trabalhei, tinhamos mais de 2000 bancos de dados espalhados entre diversos servidores, uma das estratégicas para realizar a transfêrencia destes arquivos era utilizar uma tarefa agendada que executava um .bat processamento a cópia dos arquivos através dos comandos Robocopy ou Xcopy em modo prompt-de-comando.

    Acho que isso poderá lhe ajudar.

    No que diz respeito ao processo de restauração, este processo de sobreescrever ou substituir os bancos, não precisa ser feito via attach, mas sim através de um Restore Database processando cada arquivo, mesmo que o banco exista ou não.

    Outro detalhe importante, o próprio SQL Server possui comandos que podem nos ajudar a validar toda estrutura, arquivos e até mesmo e legitimidade do conteúdo do backup, abaixo apresento como você poderia utilizar estes comandos:

    Use Master
    Go
    
    --Retorna Informações sobre as mídias de backup --
    Restore LabelOnly from Disk = 'C:\Backup\Backup-Simples-Criptografia.bak'
    Go
    
    --Retorna Informações sobre os backups --
    Restore HeaderOnly from Disk = 'C:\Backup\Backup-Simples-Criptografia.bak'
    Go
    
    /* O comando RESTORE VERIFYONLY realiza uma checagem na integridade dos backups de um 
    dispositivo, verificando se o mesmo é legível, este comando não verifica a estrutura de 
    dados existente dentro do backup. Se o backup for válido, o SQL Server retorna uma mensagem 
    de sucesso.*/
    Restore VerifyOnly from Disk = 'C:\Backup\Backup-Simples-Criptografia.bak'
    Go
    
    -- Retorna informações sobre os arquivos de dados e log (*.mdf, *.ndf e *.ldf) armazenados em um dispositivo --
    Restore FileListOnly from Disk = 'C:\Backup\Backup-Simples-Criptografia.bak'
    Go

    Espero que de alguma forma estes exemplos e meus questionamentos possam ajudar.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    Pedro, Boa tarde.

    Obrigado pelas dicas.

    O backup atualmente está a ser efetuado por um software gratuito que efetua para vários suportes (um deles um HDD externo).

    vou testar também as opções apresentadas.

    Obrigado uma vez mais.

    quarta-feira, 17 de julho de 2019 13:38
  • Nuno,

    Ok, espero ter ajudado, o uso do HD Externo é pratico no que diz respeito a portabilidade e transporte dos dados, por outro lado pode se tornar perigoso justamente pela falta de cuidado e atenção no manuseio do mesmo.

    Isso, valide os comandos Restore apresentados, acredito que eles poderão lhe ajudar, ainda mais se pensar na construção de um script que pegue de forma automática a relação dos nomes dos arquivos e backup e verifique cada um deles.

    Avalie também a sugestão do meu amigo Dirceu Resende, a DBA Tools é uma fanstáticas ferramenta, eu já utilizei em alguns momentos, mas muito pouco.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    quarta-feira, 17 de julho de 2019 14:35
    Moderador
  • Nuno,
    Boa tarde.

    Já testou o DBA Tools ?
    Acho que ele pode te ajudar nessa validação dos seus vários backups.

    https://docs.dbatools.io/#Test-DbaLastBackup

    Boa tarde Dirceu,

    Estou o DBA Tools e, confesso, estou a gostar mas estou ainda um pouco perdido...

    Estou a pensar usar a opção Backup-dbaDatabase no entanto na descrição diz que é para uma instancia SQL. Tem como fazer para efectuar um backup de todas as Instancias Existentes? ou executo o comando para cada uma das Instancias?

    uma outra questão,   utilizando o Restore-dbaDatabase tem como restaurar as BD para a Instancia "original" substituindo caso exista?

    Agradeço imenso a ajuda.

    quarta-feira, 17 de julho de 2019 14:47
  • Nuno,

    O comando deverá ser executado para cada instância, você terá que passar o nome das referidas e específicas instâncias.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 17 de julho de 2019 14:50
    Moderador