21 de mai. de 2020

[T-SQL] - SQL Server Mover arquivos mdf, ldf e ndf

Ontem tivemos uma novidade, a aplicação passou a retornar erro com excessão SqlException (0x80131904)

Could not allocate space for object 'dbo.TABELA'.'OBJETO' in database 'DATABASE' because the ’FILEGROUP' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup. or setting autogrowth on for existing files in the filegroup.

Neste caso, o disco não possuia mais espaço, então foi necessário mover um dos arquivos para outra unidade de disco.

Seguindo os seguintes passos:
  1. Parar todas as aplicações;
  2. Parar Jobs;
  3. Executar o seguinte comando T-SQL para colocar o banco de dados no modo offline:
    1. ALTER DATABASE database_name SET OFFLINE;
  4. Mover o arquivo para o disco/diretório desejado;
  5. Executar o comando que modifica a localização do arquivo, no SGBD:
    1. ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );
  6. Habilitar novamente o banco de dados com o seguinte comando:
    1. ALTER DATABASE database_name SET ONLINE;
  7. Concluido, faça o teste.

Consegui resolver o problema em cerca de 30 minutos, arquivos grandes e desespero, parecem transformar esse tempo numa eternidade.

Para obter o caminho dos arquivos e nome logico existem diversas formas, a mais simples é clicar com o botão direito no banco de dados em questão e seguir para configurações, daí então alternar para arquivos, como na imagem a seguir: