Array
(
)

E quando o SHRINK não funciona?

Ignez_mt
   - 10 fev 2006

Colegas, boa tarde.

Preciso de ajuda para diminuir o tamanho de um banco de dados, que está com quase 5,7 Gb de espaço reservado e não utilizado. Será que alguém pode me ajudar? Já utilizei o o Shrink Database, mas não resolveu.

Sobre o BD, o sp_spaceused informa:
Size....................: 6,829,81 mb
Unallocated Space: 108.46 MB
Reserved.............: 6,780,264 KB
Data....................: 983,016 KB
Index Size...........: 90,880 KB
Unused................: 5,706,368 KB

Como exemplo de uma das tabelas do BD:
Quantidade Linhas: 112.198
Espaço Reservado: 1.932,680 Mb
Espaço de Dados..: 225,544 Mb
Espaço de índice...: 21,600 Mb
Espaço Livre.........: 1.685,536 Mb

Como podem perceber, há uma grande quantidade de espaço reservado e não utilizado. Executando o SHRINK, não consigo liberar este espaço. Já efetuei diversas verificações no banco, mas nada resolveu, entre elas:
- Desligar e eliminar estatísticas
- Eliminar índices com chave duplicada
- Checar integridade do BD
- Atualizar as informações dos índices (dbcc updateusage)
- Ativar o autoshrink do BD
- Rodar dbcc shrinkdatabase via Query Analyser
- Rodar dbcc shrinkfile via Query Analyser
- Rodar o Shrink via Enterprise Manager

Depois de todos esses procedimentos, o banco de dados não liberou nada deste espaço reservado. Fiz um teste, copiando as tabelas e índices de um BD para outro, e no novo BD o tamanho final do arquivo ficou em 1Gb. Porém, essa saída é apenas um peleativo. O que eu realmente gostaria de saber é como esse espaço todo ficou reservado e como fazer para liberá-lo. Será que alguém pode me ajudar?

Obrigada,

Ignez

Aroldo Zanela
   - 15 fev 2006

Colega,

Faça um backup e aplique o Shrink.

Ignez_mt
   - 15 fev 2006

Colega, bom dia.

Já fiz este teste anteriormente: backup e depois o shrink. Também não funcionou. Inclusive, teste configurar o BD com os diferentes tipos de recovery (simple, bulk-logged e full), fazer o backup e o shrink, e mesmo assim o BD não diminuiu de tamanho.

O único jeito de diminuir o arquivo foi recriar as tabelas para, finalmente, conseguir liberar o espaço reservado para elas. E em seguida rodar o Shrink. O problema é esse espaço reservado que eu não consigo liberar.

Obrigado,

Ignez

Ignez_mt
   - 08 jun 2007

Colegas, bom dia.

Consegui resolver o problema de diminuir o tamanho do banco de dados, e o caso não tinha nada a ver com o Shrink. O caso foi o seguinte. Tínhamos uma tabela de LOG de sistema no BD, e esta tabela não possuía chave primária. Por isso, havia uma entrada na tabela sysindexes, com IndId = 0 (zero), e espaço reservado (reserved) superior ao tamanho da tabela. Detalhe, eu não consigo excluir índices com IndID igual a 0, por isso não conseguia liberar o espaço reservado.

Quando eu criei uma PK nesta tabela (IndId = 1), o índice com IndID = 0 desapareceu, e o espaço reservado nesta tabela foi liberado. Assim, eu consegui diminuir o tamanho dos arquivos.

Por tratar-se de um BD com modelagem beeeem antiga, encontrei diversas tabelas na mesma situação. Então, criei uma PK identity em cada uma delas, apagando os respectivos índices com IndId = 0. No final das contas, diminui o tamanho do BD para menos da metade que tinha no início.

Obrigada,