Como impedir que o arquivo de log cresça no SQL Server 2008?

3

No meu aplicativo logo após a restauração, executo muitas (> 100.000.000) atualizações no banco de dados recém-criado. Assim, os arquivos LOG crescem significativamente .

Como posso impedir que isso cresça?

NOTA: Definir o modelo de recuperação como simples NÃO irá funcionar.

Além disso, essa pergunta foi postada originalmente aqui: link

    
por Chicago 09.12.2010 / 17:09

8 respostas

2

Você pode alterar o modelo de recuperação para simples, por tempo suficiente para executar a redução e, em seguida, definir o modelo de recuperação de volta?

Algo como:

alter database <mydb> set recovery simple
go
checkpoint
go
alter database <mydb> set recovery full
go
backup database pubs to disk = 'c:\mydb.bak' with init
go
dbcc shrinkfile (N'mydb_log' , 1)
go

Admito que peguei emprestado do link

Esse link também está vinculado a: link

    
por 09.12.2010 / 17:20
3

Você precisaria:

  1. Alterne para o modo de recuperação simples ou faça backup do log de transações com mais frequência
  2. Aplique suas atualizações em lotes menores com um mecanismo de loop.
por 09.12.2010 / 17:18
2

Como sugeri em stackoverflow :

Você precisaria:

  1. Alterne para o modo de recuperação simples ou faça backup do log de transações com mais frequência
  2. Aplique suas atualizações em lotes menores com um mecanismo de loop.
por 09.12.2010 / 17:20
1

Você precisará executar backups de log com mais frequência. Talvez a cada 5 minutos durante essas atualizações.

Um backup diferencial à noite deve ser capaz de ajudá-lo a não depender da enorme quantidade de backup de log realizada antes e se você não estiver interessado em ter um recurso de recuperação pontual.

    
por 09.12.2010 / 20:26
0

Uma coisa que me veio à mente é que você poderia utilizar a atualização em massa para inserir / atualizar esses registros de 100 milhões. Veja esta informação em MSDN para uma discussão sobre registros mínimos com atualizações em massa.

    
por 09.12.2010 / 17:21
0

A única maneira real de obter o controle de seu registro é executar backups regulares de sql. Se você não puder ir para um modelo de recuperação simples, sua estratégia de backup deverá incluir a realização de backups do log de transações para definir um ponto de verificação neles. Quando os pontos de verificação estiverem definidos, o sql server poderá começar a recuperar o espaço em disco.

    
por 09.12.2010 / 16:44
0

A resposta simlpe é - você não faz. Um modelo de recuperação simples é tão bom quanto possível. Bassicamente, o arquivo de log é necessário para todo o cenário de gravação de dados (o banco de dados NÃO é gravado quando você faz uma atualização).

    
por 09.12.2010 / 17:24
0

Você não pode parar o SQL a partir de usando o arquivo de log, é assim que o SQL funciona. Você pode, no entanto, manter o arquivo pequeno, certificando-se de que o SQL reutilize o arquivo com freqüência. Duas maneiras de fazer isso:

  1. Alterne o db para o modo Simples e execute lotes menores.
  2. Mantenha o banco de dados no modo COMPLETO, faça backups frequentes de logs de transações e execute lotes menores.

Mudar para o modo Simples é o mais fácil. Se você não puder fazer isso, faça backups de log de transações muito frequentes (a cada 10 a 15 minutos?).

Em ambos desses casos, você precisará certificar-se de que não esteja fazendo todas as atualizações em um grande lote ( UPDATE GIANTTABLE ... with no WHERE clause ). Pode ser necessário usar UPDATE TOP , WHILE ou um cursor para atualizar apenas um número limitado de linhas (digamos, 100.000).

    
por 09.12.2010 / 17:20