Bruno Perroni
DBA SQL Server com mais de 6 anos de experiência!

Shrink Databases

Fala pessoal, tudo certo com vocês?

Nessa postagem vou mostrar, como efetuar um shrink em um banco de dados.

Aí você me pergunta, mais o que é um Shrink?

Um shrink nada mais é do que reduzir o tamanho do Database, ou seja, recuperar espaço alocado e que não esteja em uso.

______________________________________________________________

Antes de iniciarmos seguem algumas recomendações.

1º Aconselho esse tipo de operação, somente em ambientes de teste.

2º Esse tipo de operação causa fragmentação nos arquivos do banco de dados.

3º Você não pode efetuar um Shrink, com o backup do banco de dados em andamento.

4º Sempre deixe espaço alocado, aconselho deixar 10% do tamanho do banco.

______________________________________________________________

Bom vamos lá para nossa demo!

Eu vou criar uma base chamada Shrink_DB

CREATE DATABASE Shrink_DB

E como podemos ver ela está com o seu tamanho inicial padrão, conforme definido pelo Model.


Após a criação da base iremos criar uma tabela chamada LogTable

CREATE TABLE dbo.LogTable (
	 ID INT identity(1, 1)     
	,Info NVARCHAR(1000)     
	);

E vamos popular essa tabela com dados da seguinte query.

INSERT INTO dbo.LogTable (Info)
SELECT REPLICATE('x', 1000)
FROM sys.objects o
	,sys.objects o1
	,sys.objects o2;

Após a conclusão da carga, podemos notar que o tamanho do banco de dados é de pouco mais de 4Gb e que de espaço disponível restam somente 22 megas.

Agora, vamos excluir a tabela LogTable

DROP TABLE LogTable

Após a exclusão da tabela o tamanho do banco de dados continua o mesmo, porém existem quase 2Gb de espaço alocado e que não está sendo utilizado, sendo assim vamos recuperar esse espaço alocado.

Para isso vamos efetuar um Shrink no Banco de Dados.

Podemos fazer tanto pelo modo gráfico, através do SSMS (SQL Server Management Studio) ou via Script.

Vamos ver primeiro como fazer pelo SSMS.

Clique com o botão direto do mouse em cima do banco de dados e selecione Tasks.

Posteriormente Shrink e Database.

Será aberta a tela para efetuarmos efetivamente o Shrink no banco de dados, inclusive podemos notar que o SQL Server te avisa qual a porcentagem de espaço alocado da base que será liberado, no nosso caso 41%.

Agora é só clicar em OK que o espaço será liberado e devolvido ao disco.

O tempo que a operação vai levar, depende de quanto espaço alocado vai ser liberado, bem como a velocidade do disco utilizado.

Podemos atingir o mesmo resultado, através do script a seguir:

USE [Shrink_DB]
GO

DBCC SHRINKDATABASE (N'Shrink_DB')
GO

Espero que tenham gostado.