Eu realmente preciso manter arquivos .LDF?

9

Todo mês, fazemos um instantâneo do final do mês do nosso banco de dados de produção. Esses instantâneos de final de mês são estritamente para fins de geração de relatórios, não há inserções, atualizações ou exclusões já feitas neles. Cada um desses instantâneos possui um arquivo .MDFe .LDF.

Quero excluir os .LDFarquivos e liberar espaço no servidor. Existem razões pelas quais eu preciso manter os .LDFarquivos?

Esclarecimento:

Nosso banco de dados de produção é recriado a cada noite a partir de extrações de arquivos de outro sistema. Somente reportamos fora do banco de dados de produção ... nenhuma atualização é feita.

Processo noturno:
Pelo que sei ...
Todas as noites as tabelas de dados são truncadas
As tabelas são preenchidas por uma série de instruções de inserção em massa Os
índices são reconstruídos

Michael Riley - também conhecido por Gunny
fonte

Respostas:

16

Você não deve excluir o arquivo de log. Se você estiver tentando anexar novamente um arquivo de dados sem o log, o SQL Server pode recriá-lo tecnicamente, mas existem alguns problemas em potencial, como se houvesse transações abertas quando o banco de dados foi desanexado. Nesse caso, você teria perda total de dados.

Consuma o espaço e não exclua seus arquivos de log . Você está pedindo problemas com isso.

Consulte este artigo em Logs de transações , em particular a parte "Gerenciamento incorreto de log".

Thomas Stringer
fonte
9

Como mencionado em outra resposta , você não pode excluir o arquivo de log. O que você pode fazer é definir o banco de dados para READ_ONLY. Com o banco de dados ativado READ_ONLY, nenhuma modificação é permitida e o arquivo de log não aumentará. Você pode reduzir o tamanho do arquivo de log para um tamanho mínimo e atingir seu objetivo de uma área útil mínima. Para definir o banco de dados, READ_ONLYexecute o seguinte comando:

USE master;
GO
ALTER DATABASE databasename SET READ_ONLY;
GO

Você pode alterar o banco de dados para READ_WRITE, fazer as alterações necessárias e configurá-lo para a READ_ONLYhora que precisar.

O arquivo de log ainda é necessário para manter as propriedades ACID do banco de dados.

jgardner04
fonte
2

O fato é que você pode criar um banco de dados usando o arquivo mdf. É o comando sp_attach_single_file_db (Transact-SQL). Observe que ele será removido em uma versão futura do Microsoft SQL Server. Mas, não é inteligente excluir seus arquivos LDF. Shark está certo: "Você está pedindo problemas com isso". Outro ponto de vista - os seus arquivos ldf são enormes? Se eles são, você pode fazer algo sobre eles.

  1. Defina seu banco de dados como Modelo de recuperação simples . Você pode fazer isso apenas se não desejar reverter as transações
  2. Em vez de criar arquivos MDF e LDF, crie um arquivo de backup completo do banco de dados (.BAK). Será menor que o MDF + LDF
Carol Baker West
fonte
-3

Aqui está a solução que eu criei para reduzir os arquivos LDF.

  1. Desanexar banco de dados
  2. Renomeie o arquivo LDF para * _old.ldf
  3. Anexar banco de dados
  4. Remova a referência ao LDF ausente

Isso recria um arquivo LDF com tamanho 504K.

  1. Excluir * _old.ldf
  2. Lixeira vazia

Isso recuperou uma quantidade significativa de espaço em disco no servidor. Funciona para nós porque todos esses bancos de dados são APENAS bancos de dados estáticos de relatórios. Nunca inserções, atualizações ou exclusões serão executadas nesses bancos de dados.

ATUALIZAÇÃO 24/09/2019: Sim, eu concordo que é uma péssima ideia. Eu parei de fazer isso quase imediatamente. Eu reconstruí todos os índices usando um fator de preenchimento de 100. Encolhi apenas os arquivos .ldf. E alterou todos os bancos de dados para SOMENTE LER.

Michael Riley - também conhecido por Gunny
fonte
6
Uau, essa é uma péssima idéia. E se o banco de dados não se desconectar com êxito ou se perder ou se danificar em algum lugar entre 1 e 3? Você está ferrado. Você possui ZERO cópias do seu banco de dados.
Aaron Bertrand
3
A maneira correta de fazer isso seria: 1. Faça um backup COPY_ONLY do banco de dados. 2. Restaure-o no servidor de relatórios. 3. Defina a recuperação como simples e marque a cópia restaurada como somente leitura. 4. Reduza o arquivo de log manualmente. Sim, entretanto, você precisa do espaço, mas poderá manter seu emprego!
Aaron Bertrand