Recentemente, fui designado para um projeto – nosso cliente comprou uma nova SAN e queria que substituíssemos a antiga por uma nova SAN. Os bancos de dados do usuário e do sistema utilizaram SAN, enquanto o sistema operacional e o SQL foram instalados nos discos locais do servidor. Sorte a nossa..!! A ideia era mover os bancos de dados de usuários e sistemas existentes para uma nova SAN e manter o tempo de inatividade o mínimo possível. Portanto, para minimizar o tempo de inatividade, em vez de reinstalar o SO e o SQL, decidimos usar a seguinte abordagem.
- Anexe uma nova SAN a um servidor existente, crie novas unidades nela e adicione essas unidades a uma instância de cluster de failover existente.
- Interrompa o SQL Server, copie os bancos de dados mestre, modelo e msdb em novas unidades e inicie os serviços SQL.
- Mova os bancos de dados do usuário para novas unidades e remova a SAN antiga.
Em meu artigo anterior, expliquei o processo passo a passo de adicionar novo armazenamento a um cluster de failover existente. Além disso, demonstrei o processo de mover bancos de dados de usuários para novas unidades.
Neste artigo, vou demonstrar o processo de mover os bancos de dados do sistema para novas unidades que utilizei em meu projeto. Em meu artigo anterior, adicionamos a unidade a um cluster de failover existente e, neste artigo, usaremos a mesma unidade. O rótulo do volume da unidade é “E:\ ”, então criei um diretório chamado “SystemDatabases ” em E:\ dirigir. Veja a seguinte imagem:
Atualmente, os bancos de dados do sistema estão em “F:\MSSQL14.MSSQLSERVER\MSSQL\DATA ” diretório. Queremos mover esses bancos de dados para o “E:\SystemDatabases ” diretório. Ao contrário dos bancos de dados do usuário, mover os bancos de dados do sistema não é um processo simples. Devemos seguir a sequência e as etapas corretas, caso contrário, a instância SQL não será iniciada.
Primeiro, vamos revisar a localização atual dos bancos de dados do sistema. Execute a seguinte consulta para obter a localização atual do banco de dados do sistema.
USE MASTER GO SELECT DB_NAME(DATABASE_ID) AS [DATABASE NAME], NAME AS [LOGICAL NAME], PHYSICAL_NAME AS [FILE PATH] FROM SYS.MASTER_FILES WHERE DATABASE_ID < 4
Segue a saída:
DatabaseName Logical Name File Path -------------- ------------------- -------------------------------------------- master master F:\MSSQL14.MSSQLSERVER\MSSQL\DAT\master.mdf master mastlog F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\mastlog.ldf tempdb tempdev F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb.mdf tempdb templog F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\templog.ldf model modeldev F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\model.mdf model modellog F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\modellog.ldf msdb msdbdata F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\msdbdata.mdf msdb msdblog F:\MSSQL14.MSSQLSERVER\MSSQL\DATA\msdblog.ldf
Agora vou explicar o processo de mover bancos de dados para outro diretório da seguinte maneira.
- Explicar as etapas de movimentação de bancos de dados msdb e modelo.
- Explicar as etapas para mover o banco de dados tempdb.
- Explicar as etapas para mover o banco de dados mestre.
Esta demonstração mostrará como mover todos os bancos de dados do sistema para E:\ drive, portanto, para reduzir o tempo de inatividade, reiniciarei os serviços SQL no final do processo.
Etapas para mover os bancos de dados msdb e model
Para mover os bancos de dados msdb e model, primeiro precisamos atualizar os locais dos arquivos no catálogo do sistema executando a consulta ALTER Database. Para fazer isso, execute a seguinte consulta no PowerShell ou SSMS.
USE MASTER; GO ALTER DATABASE MODEL MODIFY FILE (NAME = MODELDEV, FILENAME = 'E:\SYSTEMDATABASES\MODEL.MDF'); GO ALTER DATABASE MODEL MODIFY FILE (NAME = MODELLOG, FILENAME = 'E:\SYSTEMDATABASES\MODELLOG.LDF'); GO ALTER DATABASE MSDB MODIFY FILE (NAME = MSDBDATA, FILENAME = 'E:\SYSTEMDATABASES\MSDBDATA.MDF'); GO ALTER DATABASE MSDB MODIFY FILE (NAME = MSDBLOG, FILENAME = 'E:\SYSTEMDATABASES\MSDBLOG.LDF'); GO
A saída é a seguinte:
The file "MODELDEV" has been modified in the system catalog. The new path will be used the next time the database is started. The file "MODELLOG" has been modified in the system catalog. The new path will be used the next time the database is started. The file "MSDBDATA" has been modified in the system catalog. The new path will be used the next time the database is started. The file "MSDBLOG" has been modified in the system catalog. The new path will be used the next time the database is started.
Agora execute a seguinte consulta para verificar se os caminhos estão atualizados no catálogo do sistema. Para isso, execute a seguinte consulta:
SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], PHYSICAL_NAME AS [FILE LOCATION] FROM SYS.MASTER_FILES WHERE DB_NAME(DATABASE_ID) IN ('MSDB', 'MODEL') GO
Segue a saída:
DatabaseName Logical Name File Path -------------- ------------------- -------------------------------------------- model modeldev E:\SystemDatabases\model.mdf model modellog E:\SystemDatabases\modellog.ldf msdb msdbdata E:\SystemDatabases\msdbdata.mdf msdb msdblog E:\SystemDatabases\msdblog.ldf
Etapas para mover o banco de dados tempDB
Quando reiniciamos o SQL Server - ele recriará automaticamente os arquivos tempdb e log, portanto, não precisamos mover os arquivos tempdb manualmente - tudo o que precisamos fazer é alterar o caminho dos arquivos do banco de dados. Para alterar o caminho dos arquivos de banco de dados tempdb, execute a seguinte consulta no PowerShell/SSMS.
USE MASTER; GO ALTER DATABASE TEMPDB MODIFY FILE (NAME = TEMPDEV, FILENAME = 'E:\SYSTEMDATABASES\TEMPDB.MDF'); GO ALTER DATABASE TEMPDB MODIFY FILE (NAME = TEMPLOG, FILENAME = 'E:\SYSTEMDATABASES\TEMPLOG.LDF'); GO
A saída é a seguinte:
The file "tempdev" has been modified in the system catalog. The new path will be used the next time the database is started. The file "templog" has been modified in the system catalog. The new path will be used the next time the database is started.
Agora execute a seguinte consulta para verificar se os caminhos estão atualizados no catálogo do sistema:
SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], PHYSICAL_NAME AS [FILE LOCATION] FROM SYS.MASTER_FILES WHERE DB_NAME(DATABASE_ID) = 'TEMPDB' GO
Segue a saída:
DatabaseName Logical Name File Path -------------- ------------------- -------------------------------------------- tempdb tempdev E:\SystemDatabases\tempdb.mdf tempdb templog E:\SystemDatabases\templog.ldf
Etapas para mover o banco de dados mestre
O processo de mover o banco de dados mestre para outra unidade é diferente de mover outros bancos de dados do sistema. Para mover o banco de dados do sistema, realizaremos as seguintes etapas:
- Abra o Gerenciador de configuração do SQL Server 2017 e expanda, clique em SQL Server Services . Veja a imagem a seguir:
- Clique com o botão direito do mouse em SQL Server (MSSQLSERVER) e clique em propriedades. Na caixa de diálogo de propriedades, selecione “Parâmetros de inicialização " aba. Veja a imagem a seguir:
- Como você pode ver na imagem acima, nos parâmetros existentes a caixa de texto contém o local padrão do arquivo de dados, arquivo de log e log de erros. Aqui -d indica o caminho padrão do arquivo de dados do banco de dados mestre da mesma forma, -l indica o caminho padrão do arquivo de log do banco de dados mestre. Devemos substituir esses parâmetros por um novo local. Portanto, clique no parâmetro datafile e substitua-o por “– dE:\Systemdatabases\master.mdf ” e clique em Atualizar. Da mesma forma, clique no parâmetro do arquivo de registro e substitua-o por “-lE:\Systemdatabases\mastlog.ldf” valor e clique em atualizar. Veja a imagem a seguir:
4. Clique em OK para fechar a caixa de diálogo.
Observação:
Como estamos realizando esta tarefa na instância de failover do SQL Server, devemos realizar todas as alterações acima nos nós secundários (SQL02.Dc.Local)
Reinicie os serviços do SQL Server.
Depois que o novo caminho de msdb, model e tempdb for atualizado no catálogo do SQL Server, devemos interromper os serviços para copiar os arquivos de banco de dados em novas unidades. Para isso, abra o SQL Server configuration manager 2017>> Clique em Services>> Clique com o botão direito do mouse em SQL Server (MSSQLSERVER) e clique em “Stop”. Veja a seguinte imagem:
Agora copie todos os arquivos de banco de dados do sistema na nova unidade. Veja a seguinte imagem:
Agora inicie o serviço no gerenciador de configuração do SQL Server. Se os serviços foram iniciados com sucesso, o caminho do sistema e os bancos de dados foram atualizados com sucesso. Execute a seguinte consulta para revisar o caminho do banco de dados mestre:
SELECT DB_NAME(DATABASE_ID)AS [DATABASE NAME], PHYSICAL_NAME AS [FILE LOCATION] FROM SYS.MASTER_FILES WHERE DB_NAME(DATABASE_ID) = 'MASTER' GO
Segue a saída:
DatabaseName Logical Name File Path -------------- ------------------- -------------------------------------------- master master E:\SystemDatabases\master.mdf master mastlog E:\SystemDatabases\mastlog.ldf
Resumo
Neste artigo, expliquei o processo passo a passo de mover bancos de dados do sistema para um novo disco em cluster.