Reproduzir novamente os logs de transação do SQL Server no esquema de db alterado

3

Temos um grande log de transações (1,3 GB) para um banco de dados relativamente simples do SQL Server 2008 (30 MB). Ele (log) contém todas as atualizações desde a primeira vez em que o db foi colocado em produção e (agora o vemos) representa uma valiosa fonte de dados temporais que seria interessante para nós.

Haveria alguma maneira de "reproduzir" todo este log em um banco de dados similar (como o original, mas com tabelas de histórico e gatilhos adicionados)?

Desta forma, poderíamos reconstruir o mesmo banco de dados, mas com dados temporais "extraídos" de logs. Esse é um conhecimento valioso que ignoramos pela primeira vez e não deve ficar nos arquivos de log do servidor.

UPDATE

Estou NÃO tendo problemas com os logs de transação "grandes". Eu não quero truncar o log. A informação temporal que está contida é valiosa ( eu sinceramente espero que esteja claro agora, já que esta é a TERCEIRA vez que eu repito ).

Para os "atiradores mais rápidos do oeste" por aí, continue lendo depois de "Temos um grande log de transações ..." acima. Estou começando a pensar que, na verdade, foi MY FAULT para começar uma pergunta com essas palavras, já que parece que 80% dos leitores acham que a questão é sobre o truncamento de log.

E para qualquer um que queira "sugerir" outro truncamento de backup e log como uma "solução" (BTW, perdendo completamente o ponto), leia isto.

    
por 3 revs, 2 users 67%anon 15.07.2009 / 01:24

5 respostas

4

Os logs de transações contêm os deltas binários de modificações aplicadas a um banco de dados desde o último truncamento de log; a palavra-chave aqui é "binary": eles não contêm consultas SQL ou algo semelhante, mas na verdade são mais parecidos com patches binários a serem aplicados a um programa.

Por esse motivo, eles podem ser reproduzidos apenas nos arquivos de banco de dados físicos exatos aos quais eles estavam originalmente vinculados; reproduzi-los em outro banco de dados (mesmo com o mesmo esquema) seria exatamente como aplicar um patch a um executável diferente daquele para o qual foi escrito: não é possível de forma alguma.

Você também não poderá reproduzi-los no mesmo banco de dados, se isso for modificado; ou seja, você não pode restaurar o banco de dados de um backup antigo, colocá-lo on-line, fazer qualquer modificação nele e, em seguida, reproduzir os logs nele; você realmente perde qualquer recurso de repetição de registro assim que você coloca o banco de dados totalmente online (há até mesmo um sinalizador específico nas operações de restauração do SQL Server para isso).

    
por 18.08.2009 / 15:05
3

Aqui eles dizem:

Note that you can dump the contents of the current log file using an undocumented DBCC command:

DBCC LOG('<dbname>', [<option>])

where <option> is an integer between 1 and 4, which controls the level of detail of the information displayed by DBCC LOG.

Se eu fizer isso com um dos meus bancos de dados, recebo muitas informações, mas acho que não é suficiente para reproduzir o log.

Em outros posts, eles mencionaram esses produtos que podem resolver seus problemas:

por 14.08.2009 / 09:48
1

Depois de reler sua postagem algumas vezes ... eu diria que você deve procurar por algumas ferramentas de análise de registros de terceiros.

Se você tiver o Sql Server 2000, o RedGate SQL Log Rescue tool é grátis. Eu não procurei outras ferramentas, mas tenho certeza que existem algumas.

    
por 20.08.2009 / 16:58
0

Vá comprar software de terceiros para obter as transações, pois RESTORE LOG aparentemente não é compatível com suas alterações (conforme sugerido originalmente).

Além disso, você deve usar o SQL Server Profiler se realmente quiser executar novamente várias transações. No entanto, você mal planejou isso, então você estará fora do bolso.

    
por 05.07.2009 / 18:35
0

Pergunta reescrita após esclarecimento

Votei em mudar isso para serverfault.com. Eles precisam dizer a você que você leu mal o Log de Backup com Truncate_Only: Como uma Armadilha do Urso. Observe a parte sobre " apenas com truncamento ".

Veja Shrinking Databases, que está vinculado ao primeiro artigo, leia e compreenda. Não é que você nunca deva truncar seus logs: você deve apenas truncá-los em conjunto com uma programação adequada de backups completos, backups de log de transações e, possivelmente, backups diferenciais.

Quando o backup do log tiver sido feito com segurança, não será mais necessário mantê-lo em disco. No entanto, eu não sou um DBA, e acho que você precisa ouvir os especialistas para entender isso, então estou votando para mudar.

    
por 29.07.2009 / 06:19