Eu tenho um banco de dados de desenvolvimento do SQL Server 2005 que é uma cópia de 30 GB do live. Excluímos alguns dados que não são necessários no dev, o que reduz o espaço no arquivo de dados usado para 20 GB. Portanto, temos cerca de 33% não utilizados.
Preciso recuperar o espaço, o que nos permitirá ter um segundo banco de dados de desenvolvimento no servidor (com base na versão reduzida); no entanto, não posso recuperar o espaço, fiz o seguinte:
O tamanho inicial do arquivo
SMS2_Data
é 30 GB.DBCC SHRINKFILE (N'SMS2_Data' , 0, TRUNCATEONLY)
Seguido por
DBCC SHRINKFILE (N'SMS2_Data' , 19500)
Sem alegria Eu tentei fazer um backup, criando um novo banco de dados com um tamanho inicial baixo e depois restaurando, sem alegria, pois o tamanho inicial é substituído. Também tentei:
ALTER DATABASE SMS2HazSub MODIFY FILE (NAME = 'SMS2_Data', SIZE = 20000)
Este erro, dizendo:
Falha na modificação do arquivo. O tamanho especificado é menor que o tamanho atual.
Eu tentei o 20800 e continuei subindo até 29000 (29GB) e ele ainda não me permitirá alterá-lo.
Ter feito o psiquiatra, em seguida, mudou o modo de recuperação de e FULL
para SIMPLE
trás novamente. Sem alegria
Eu pensei que tinha a ver com alguns TEXT
campos. Temos cerca de 6 em todo o sistema. Então, como teste, larguei todos eles e, em seguida, reduzi o arquivo e ainda não havia alterações.
A única opção que resta é reimportar os dados para outro banco de dados. Isso não é prático, pois teria que ser feito no banco de dados ativo, o que traz muito risco. Captamos semi-regularmente uma cópia do banco de dados ativo e sobrescrevemos o dev / test. Temos algo como 500 mesas. Eu gostaria de uma maneira de fazer isso que não corresse o risco de exportar dados para um novo banco de dados.
Tentei mover os dados para outro arquivo e ele copiou todos, exceto 5% dos dados. Foi isso que me levou a tentar soltar todas as colunas de texto.
O servidor está no modo de compatibilidade 90, mas é o SP2. Eu já fiz as seguintes três vezes: reindexar todas as tabelas, banco de dados de backup, arquivo de redução, banco de dados de redução. Ainda sem alegria.
EXECUTE sp_spaceused
retorna:
database_name database_size unallocated space
SMS2Tests 31453.94 MB 13903.16 MB
reserved data index_size unused
16545568 KB 10602264 KB 4254360 KB 1688944 KB
fonte
Suponho que você tenha um único arquivo de banco de dados com o nome lógico SMS2_Data. Você também tem um ou mais arquivos de log de transações no banco de dados.
Você tem um desafio que não pode ser corrigido na cópia atual do banco de dados. A informação importante que você declara é que o 'tamanho original do arquivo de banco de dados é de 30 GB'. Infelizmente, este arquivo não pode ser reduzido em tamanho menor que o tamanho original.
Como você já experimentou, SHRINKDB e SHRINKFILE não estão dando o que você deseja. Esses comandos seguem a regra não pode encolher menor que o tamanho original. Portanto, você só pode reduzir um banco de dados ao tamanho original e não menor.
O backup e a restauração do banco de dados em um banco de dados menor e existente também não funciona. Quando você faz uma restauração do banco de dados, os arquivos do banco de dados são restaurados para os tamanhos dos arquivos como estavam durante o backup. E, o modelo de recuperação (simples, completo etc.) não tem relevância para esse problema.
E, um último ponto de más notícias. Você pode adicionar outros arquivos de banco de dados menores ao banco de dados, transferir todos os dados do arquivo de 30 GB e soltá-lo. Infelizmente, isso também não funcionará porque você não pode excluir o arquivo inicial do banco de dados.
Portanto, a melhor solução é copiar os dados para outro banco de dados. Você tem algumas opções aqui e talvez já esteja ciente delas. A primeira etapa é criar um novo banco de dados com um tamanho menor que o tamanho dos dados. Em seguida, você pode expandir o tamanho do banco de dados para o tamanho necessário.
Você pode considerar o SSIS como uma maneira de transferir os dados de um banco de dados para outro. Você encontrará uma tarefa de cópia de banco de dados que o ajudará. Você pode usar as seguintes etapas:
Veja informações adicionais sobre a tarefa do banco de dados de transferência SSIS .
fonte
Algum espaço não utilizado no banco de dados é normal.
Se você tiver muitos registros grandes (digamos, cadeias longas), pode haver muito espaço não utilizado nas páginas de dados (porque um registro geralmente não é dividido entre as páginas).
Outra coisa é um fator de preenchimento - inicialmente, os índices agrupados não são criados 100% completos para evitar divisões de página (uma operação cara) nas inserções subsequentes.
Se muitos dados foram excluídos do banco de dados, o espaço anteriormente ocupado por esses dados não será recuperado automaticamente - ele permanecerá alocado para a tabela.
Tente chamar
DBCC DBREINDEX (table_name, '', 100)
todas as tabelas do seu banco de dados - ele reconstruirá todos os índices com fator de preenchimento de 100%, para que os dados sejam colocados da maneira mais compacta possível. Em seguida, tente reduzir o banco de dados novamente.fonte
Descobri que reduzir um banco de dados do SQL Server pode ser problemático. Parece que você precisa fazer uma rotina de música e dança.
Este é o processo pelo qual eu costumo passar:
Backup Shrink database Backup Shrink log e arquivos de banco de dados separadamente. Backup Repita até que finalmente encolha.
Eu tive que fazer esse processo algumas vezes até três vezes para finalmente funcionar. Tivemos um banco de dados com mais de 68 GB de tamanho, com algo em 98% de espaço não utilizado. Passou por essa rotina de música e dança várias vezes, mas finalmente diminuiu para menos de 1 GB.
fonte
Eu teria tentado reduzir o tamanho inicial do arquivo mdf para 29.000 MB primeiro, depois para 28.000 detectando o golpe.
Não é razoável esperar reduzir 30% no tamanho do arquivo do banco de dados excluindo 30% dos dados.
Você pode estimar quanto espaço não utilizado em seu banco de dados,
no contexto do seu banco de dados (use yourdatabaename;)
Você pode postar o resultado de sua execução?
Atualização:
postei minha pergunta relacionada:
fonte