
Essa é a segunda parte da série sobre como migramos mais de 50TB, nessa postagem vou explicar quais formas utilizamos para migrar as databases e as TempDB do SQL Server.
Para a migração das databases foi utilizado duas formas, backup/restore e detach/attach, logo abaixo vou detalhar sobre os dois:
Método Detach/Attach
O modelo Detach/Attach possui um tempo maior de indisponibilidade da database, sugiro esse procedimento para as databases que possuem menor impacto (um exemplo são bases históricas, e que não tem tanta consulta).
Vamos iniciar fazendo o detach da database que pode ser feito manualmente pelo SSMS ou utilizando o comando:
USE [master]
GO
ALTER DATABASE [databasename] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
USE [master]
GO
EXEC master.dbo.sp_detach_db @dbname = N'databasename'
GO
- Copie os arquivos .mdf, .ndf e .ldf para o novo disco (recomendo utilizar o ROBOCOPY, conforme falamos neste post).
Com o término da copia dos arquivos, pode ser feito o Attach, manualmente ou com o comando:
USE [master]
GO
CREATE DATABASE [databasename] ON
( FILENAME = N'G:\Dados\databasename.mdf' ),
( FILENAME = N'G:\Dados2\databasename_2.ndf' ),
( FILENAME = N'G:\Logs\databasename.ldf' )
FOR ATTACH
GO
Após isso o banco já vai estar online e no novo diretório.
Método Backup/Restore
A metodologia de backup/restore consegue reduzir muito o tempo de indisponibilidade, recomendo essa forma para databases muito grandes e principalmente para os de maior criticidade, em que a cópia após um detach vai ser demorada. A database deve estar com o Recovery Model FULL e após o restore do backup full ir restaurando os transactions logs.
Procedimentos:
- Realizar um backup full da database;
- Restaurar o backup full apontando para o novo diretório e utilizando um novo nome (EX: MeuDatabase_New), não pode esquecer de deixar a opção NO RECOVERY habilitada ou setada no comando de restore;
- Vai restaurando os backups de logs até o último disponível, sempre com a opção NO RECOVERY habilitada;
- Alterar a database atual para read-only e realize mais um backup de log;
- Agora você vai fazer um detach na database atual;
- Restaure o backup de log que foi feito após setar a base read-only utilizando a opção WITH RECOVERY ou utilize o comando RESTORE DATABASE [MeuDatabase] WITH RECOVERY.
- Agora é só renomear a sua database para o nome original.
Com todas as bases restauradas, é preciso alterar o local do TEMPDB, utilize a query abaixo (se seu tempdb tiver mais arquivos é só incrementar no script).
use master
go
alter database tempdb modify file (name = tempdev, filename = 'E:\Tempdb\tempdb.mdf')
go
alter database tempdb modify file (name = templog, filename = 'E:\Tempdb\templog.ldf')
go
Com a alteração do Tempdb, é necessário um restart do serviço para que o apontamento dele funcione.
Após restartar o SQL o procedimento de migração de toda sua instância está completo, incluindo system databases, databases e instalação do SQL Server.
Não é um procedimento muito complexo, porém exige muita atenção na hora de realizar devido à sua criticidade e riscos.
Sendo assim finalizamos a segunda parte sobre como migrar mais de 50TB de dados em um ambiente On Premises!
Caso possuam alguma dúvida sinta-se à vontade para entrar em contato comigo!
Abraços!
Pingback: Como migramos mais de 50TB de dados On Premises – Parte Final | Leonardo Fonseca