Estou um pouco confuso. O TRUNCATEONLY
parâmetro foi alterado no SQL 2012 ou a documentação está errada no SQL 2008 R2?
2008 R2
Libera todo o espaço livre no final do arquivo para o sistema operacional, mas não executa nenhuma movimentação de página dentro do arquivo. O arquivo de dados é reduzido apenas até a última extensão alocada. target_percent será ignorado se especificado com TRUNCATEONLY.
TRUNCATEONLY é aplicável apenas a arquivos de dados. Os arquivos de log não são afetados.
A última declaração me faz pensar que isso não tem nenhum efeito nos arquivos de log?
2012
Libera todo o espaço livre no final do arquivo para o sistema operacional, mas não executa nenhuma movimentação de página dentro do arquivo. O arquivo de dados é reduzido apenas até a última extensão alocada. target_percent será ignorado se especificado com TRUNCATEONLY.
TRUNCATEONLY afeta o arquivo de log. Para truncar apenas o arquivo de dados, use DBCC SHRINKFILE.
A última declaração agora me diz que afeta apenas o arquivo de log?
Então, a funcionalidade foi alterada ou há um erro na documentação ou minha interpretação está errada?
TRUNCATEONLY afeta os arquivos LOG e DATA em 2008. No BOL para SQL Server 2012, a mensagem simplesmente indica que, se você deseja apenas REDUZIR o arquivo de banco de dados, deve usar DBCC SHRINKFILE, que permitirá reduzir os dados ou o log arquivos.
Para 2008, está claramente indicado que TRUNCATEONLY afeta apenas os arquivos DATA.
Vamos testar. Para visualizar o que acontece
TRUNCATEONLY
com oSHRINKDATABASE
, aqui está um resumo do que aconteceu com um banco de dados chamadoperformance
que instalei localmente.Corri
DBCC LOGINFO
apenas para dar uma olhada no log de transações e descobri que todos os arquivos de log virtual após cerca de 200 estavam inativos, status = 0. Em meu banco de dados de desempenho, todos os VLFs inativos podem ser truncados e o espaço pode ser devolvido para o sistema operacional.Aqui está um exemplo de saída de LOGINFO.
Eu então corri
DBCC SQLPERF(LOGSPACE)
e obtive a seguinte saídaeu então corri
e obtive o seguinte resultado
Em seguida, eu recorri
e pegou
SHRINKDATABASE
comTRUNCATEONLY
devolveu mais de 9 GB de espaço disponível do arquivo de log de transações de volta ao sistema operacional.Eu tentei o mesmo experimento com outro banco de dados chamado
performance2
O que devolveu 20 MB ao sistema operacional. Usando o SQL Server 2008,
SHRINKDATABASE TRUNCATEONLY
reduz os arquivos de log de dados e transações.Acabei de testar com um banco de dados temporário e usar a opção TRUNCATEONLY fez com que o arquivo de dados e o arquivo de log fossem reduzidos.
Acredito que o que eles estão tentando esclarecer é que a opção TRUNCATEONLY altera o comportamento ao reduzir o arquivo de dados (ou seja, não reorganize nenhuma página de dados, apenas corte o espaço não utilizado no final), mas o arquivo de log ainda será encolheu normalmente.
Se meu entendimento da opção estiver correto, provavelmente esta é uma maneira melhor de descrevê-la: