Usuário com melhor resposta
SQL Restore

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.
Respostas
-
Nuno,
Boa tarde.Já testou o DBA Tools ?
Acho que ele pode te ajudar nessa validação dos seus vários backups.- Marcado como Resposta Junior Galvão - MVPMVP, Moderator domingo, 15 de setembro de 2019 12:38
Todas as Respostas
-
-
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.
-
Nuno,
Boa tarde.Já testou o DBA Tools ?
Acho que ele pode te ajudar nessa validação dos seus vários backups.- Marcado como Resposta Junior Galvão - MVPMVP, Moderator domingo, 15 de setembro de 2019 12:38
-
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]
-
-
-
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.
-
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]
- Editado Junior Galvão - MVPMVP, Moderator quarta-feira, 17 de julho de 2019 14:36 Atualização do conteúdo da resposta.
-
Nuno,
Boa tarde.Já testou o DBA Tools ?
Acho que ele pode te ajudar nessa validação dos seus vários backups.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.
-
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]