Eu tenho um arquivo de dados com os seguintes parâmetros:
Quando executo DBCC SHRINKFILE (DBAtools_data,1) , ele mostra os seguintes resultados:
Eu estou bem com isso. Minha reclamação é sobre o comando DBCC SHRINKFILE (DBAtools_data,0) . Quando executo nada muda. Eu pensei que isso reduziria o arquivo de dados até a última extensão alocada, em palavras de ordem, o mesmo resultado acima. Alguém poderia me esclarecer?
Sem ter acesso ao código-fonte do SQL Server, podemos apenas adivinhar. Então,
Editar: 0 significa reduzir para o tamanho inicial conforme o cabeçalho da página. Minha especulação de que isso significa manequim, abaixo, está incorreta.
LIGUE O MODO DE ESPECULAÇÃO
0 não faz sentido. Se você quiser se livrar do arquivo, você tem a opção EMPTYFILE. Ou seja, por que você deseja ter um arquivo com 0 MB de tamanho.
Acabei de fazer um teste e, de fato, 0 significa que não faz nada. Poderíamos argumentar que uma mensagem de erro seria melhor: "0 MB não é um tamanho de arquivo válido.", ou algo assim. Mas aparentemente a MS decidiu deixar 0 como válido para o comando e implementá-lo como dummy.
DEFINIR MODO DE ESPECULAÇÃO DESLIGADO
Eu sugiro que você registre uma solicitação com a MS para documentar que 0 significa "dummy" ou alterar o comportamento para que possamos receber uma mensagem de erro (menos provável de acontecer).
Bem, acho que descobri o motivo, embora não consegui encontrar nada sobre isso no BOL. É óbvio que qualquer coisa diferente de 0 (no meu caso é 1) tentará reduzir o arquivo até esse valor e, como afirma BOL, também tentará redefinir o tamanho do arquivo para esse valor (1 MB). Em caso de 0, apenas reduz e redimensiona o arquivo de dados para o tamanho INICIAL do arquivo no momento da criação . Esse valor ( minSize ) é armazenado na página de cabeçalho do arquivo, encontrei-o com o comando DBCC Page não documentado:
Podemos concluir que o comando DBCC SHRINKFILE (Data_File, 0) reduzirá o arquivo de dados até o valor indicado no momento da criação do arquivo de dados. Em palavras de ordem DBCC SHRINKFILE (Data_File, 0) é o mesmo que DBCC SHRINKFILE (Data_File)