No SQL Server (2008, neste caso), como posso reduzir rapidamente todos os arquivos, log e dados, para todos os bancos de dados em uma instância? Eu poderia passar pelo SSMS e clicar com o botão direito do mouse em cada um e escolher Tarefas -> Diminuir, mas estou procurando algo mais rápido.
Eu escrevi alguns scripts "Criar banco de dados" e esqueci que eles tinham tamanhos de balão para os padrões e não precisam de muito espaço reservado para esses arquivos neste projeto.
fonte
SELECT 'USE [' + d.name + N']' + CHAR(13) + CHAR(10) + 'DBCC SHRINKFILE (N''' + mf.name + N''' , 0, TRUNCATEONLY)' + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) FROM sys.master_files mf JOIN sys.databases d ON mf.database_id = d.database_id WHERE d.database_id > 4
Mas descobrir isso me deu um novo problema. Desligado para postar outra pergunta.Que tal uma única linha de instrução sql?
Leia este post de blog muito interessante antes de executar a seguinte instrução sql.
fonte
DBCC SHRINKDB (e seu primo SHRINKFILE) são extremamente lentos, porque há muita execução de encadeamento único acontecendo nesse código.
Uma maneira muito mais rápida de reduzir um arquivo de banco de dados é:
sp_spaceused
para determinar o tamanho)Como as recriações de índice são massivamente paralelas, essa técnica geralmente resulta em um encolhimento muito mais rápido do banco de dados. Obviamente, é necessário um espaço extra para o novo grupo de arquivos enquanto o processo está em andamento. No entanto, você só precisa de espaço suficiente no novo grupo de arquivos para armazenar o maior grupo de arquivos da instância (pois estará recuperando espaço à medida que avança).
Essa técnica também possui o benefício adicional de desfragmentar seus índices no processo.
fonte
Ajustei um pouco a consulta para encolher apenas o LOG conforme solicitado:
fonte
O código abaixo, obtém uma lista de bancos de dados que não são do sistema, defina o banco de dados como somente leitura e reduza o arquivo. Eu mantive esse código em algumas caixas do SQL Server usando o SQL Agent Job, onde o espaço é sempre um problema. Na noite de sábado / domingo, toda semana, ele começa a ser executado e reduz todos os bancos de dados em poucas horas (dependendo do tamanho dos bancos de dados).
fonte
Reduza todos os arquivos de log, exceto mestre, modelo, msdb:
fonte
Este estende a resposta acima, usando um cursor para percorrer as instruções SQL uma a uma. Não é tão curta quanto a resposta de Emrah, mas permite lógica adicional dentro do loop while do cursor.
fonte
Podemos repetir
SHRINKDB
eSHRINKFILE
para todos os bancos de dados dinamicamente:Você pode encontrar detalhes neste artigo .
fonte