Remover arquivo de Dados depois de ja preenchido – Erro: O arquivo ‘Arquivo’ não pode ser removido porque não está vazio.

Adicionar arquivos a uma base de dados, é até certo ponto, uma tarefa comum para qualquer DBA/DBM ultimamente, principalmente pelo ganho de I/O entre outras coisas, bom, adicionar um arquivo é extremamente facil, inclusive podendo ser feito até pela ferramenta grafica SQL Server Management Studio, todo caso, e a remoção? Bom, é simples, mas não tanto quando a adição, portanto, segue um post simples porem creio que possa ajudar muitas pessoas….

ADICIONAR ARQUIVO DE DADOS

USE [master]
GO
ALTER DATABASE [BaseDeTestes02] ADD FILE ( NAME = N'Teste', FILENAME = N'D:\SQLServerEnterprise\Data\Teste.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) TO FILEGROUP [PRIMARY]
GO

CRIAR TABELA

CREATE TABLE Teste(ID INT IDENTITY(1,1))

CARGA DE DADOS

INSERT INTO Teste DEFAULT VALUES
GO 100000

TENTATIVA DE REMOÇÃO DE ARQUIVO

ALTER DATABASE [BaseDeTestes02]  REMOVE FILE [Teste]

ERRO

Msg 5042, Level 16, State 1, Line 1
O arquivo 'Teste' não pode ser removido porque não está vazio.

Por que do erro: Como sabemos, o SQL Server ira dividir a carga em relação aos datafiles, tem-se como intenção isso, a diminuição de I/O e manter os arquivos nivelados, claro que caso o espaço de um arquivo esteja 100% preenchido, o mesmo não sera utlizado para uma nova carga.

O que fazer para remover este arquivo, uma vez que o mesmo não esta vazio?
Não podemos de forma simples dropar a tabela, e no caso, temos apenas uma, então o drop dela solucionaria, porem, e se tivessemos 1.000 tabelas

Bom, a solução é muito mais simples do que a gravidade do problema, felizmente isso pode ser feito facilmente por um comando DBCC, como segue abaixo:

BUSCANDO O ID DO ARQUIVO NA BASE QUE SERA EXCLUIDO

SELECT Name, File_ID FROM SYS.DATABASE_FILES

Portanto, temos que é o arquivo 3….

Comando para limpar o arquivo:

DBCC SHRINKFILE(3,EMPTYFILE)

NOVA TENTATIVA DE REMOÇÃO

ALTER DATABASE [BaseDeTestes02]  REMOVE FILE [Teste]

Sucesso

E outra, pode ficar tranquilo que o arquivo não é apenas zerado, para não haver perda de dados e consequentemente falta de integridade em sua base, todos os dados que estavam neste arquivo, foram migrados para arquivos do mesmo filegroup.
Tanto que, ao realizar essa ação, voce pode notar um crescimento dos outros arquivos.

Anúncios
Post a comment or leave a trackback: Trackback URL.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: