Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como remover um arquivo de dados de um banco de dados SQL Server (T-SQL)


Os bancos de dados do SQL Server armazenam seus dados e objetos em arquivos. Cada banco de dados possui pelo menos um arquivo de dados (e um arquivo de log), mas não se restringe a apenas um – pode ter muitos arquivos de dados. Se você se encontrar na situação em que precisa remover um arquivo de dados de um banco de dados, precisará esvaziar esse arquivo primeiro, antes de removê-lo.

Mas não se preocupe, esvaziar um arquivo não exclui os dados. Ele simplesmente migra os dados do arquivo para outros arquivos dentro do mesmo grupo de arquivos.

Os exemplos abaixo demonstram como esvaziar um arquivo de dados e removê-lo do banco de dados usando o Transact-SQL.


Exemplo rápido


Aqui está um exemplo rápido para mostrar como esvaziar um arquivo de dados e removê-lo do banco de dados:
-- Empty the file
DBCC SHRINKFILE (Solutions2, EMPTYFILE);  
GO 

-- Remove the file
ALTER DATABASE Solutions  
REMOVE FILE Solutions2;  
GO

Então, conforme explicado, isso esvazia o arquivo e o remove completamente do banco de dados. Quando você usa EMPTYFILE , isso move todos os dados do arquivo para outros arquivos no mesmo grupo de arquivos. Portanto, você precisará ter certeza de que este não é o único arquivo no grupo de arquivos (caso contrário, você receberá um erro). EmptyFile também garante que nenhum dado novo será adicionado ao arquivo.

Um exemplo mais longo


Caso você esteja confuso com o exemplo anterior, vamos percorrer o processo de criação de um novo banco de dados, adicionar um novo arquivo de dados, esvaziá-lo e removê-lo.

Criar um banco de dados e visualizar suas informações de arquivo de dados

-- Switch to the master database
USE master;
GO

-- Create a new database
CREATE DATABASE Test;
GO

-- View it's data file and log file info
USE Test;  
GO  
SELECT file_id, name, type_desc, physical_name, size, max_size  
FROM sys.database_files ;  
GO

Primeiro, mudamos para o banco de dados mestre antes de criar um novo banco de dados chamado Test . Em seguida, mudamos para o novo banco de dados e selecionamos determinadas informações sobre seus arquivos de banco de dados em sys.database_files visualização do catálogo do sistema.

Adicionar um novo arquivo de dados

-- Add a new data file
ALTER DATABASE Test   
ADD FILE (  
    NAME = Test2,  
    FILENAME = '/var/opt/mssql/data/Test2.mdf',  
    SIZE = 8MB
    );  
GO

-- View it's data file and log file info
USE Test;  
GO  
SELECT file_id, name, type_desc, physical_name, size, max_size  
FROM sys.database_files ;  
GO

Agora adicionamos um novo arquivo de dados com um nome lógico de Test2 e um caminho físico de /var/opt/mssql/data/Test2.mdf (observe que este é um caminho Linux/Mac. Se estiver usando Windows, use barras invertidas em vez de barras). Novamente, consultamos os sys.database_files visualização do catálogo do sistema para que possamos ver os detalhes do nosso novo arquivo.

Esvazie o arquivo de dados e remova-o


Para os propósitos deste exemplo, vamos supor que o banco de dados foi colocado em produção e o arquivo de dados que acabamos de criar foi carregado com dados. Agora queremos remover esse arquivo (por qualquer motivo). Mas antes de removermos o arquivo, precisamos esvaziá-lo (migrar seus dados para outro arquivo).

Veja como fazer isso:
-- Empty the new data file
DBCC SHRINKFILE (Test2, EMPTYFILE);  
GO

-- Remove the file
ALTER DATABASE Test  
REMOVE FILE Test2;  
GO 

-- View it's data file and log file info
USE Test;  
GO  
SELECT file_id, name, type_desc, physical_name, size, max_size  
FROM sys.database_files ;  
GO

Este é exatamente como o primeiro exemplo nesta página, exceto que nosso banco de dados tem um nome diferente. E neste exemplo, consultamos sys.database_files para confirmar que o arquivo foi realmente excluído.