Array
(
)

E o conteúdo da tabela sumiu...

Robertolucio
   - 31 ago 2004

Boa noite,

Estou precisando de ajuda para resolver o seguinte problema:

Possuo uma base de dados na qual desapareceram masi de 140.000 registros de uma tabela, aparentemente sem motivo.

A minha primeira opção foi restaurar o backup, certo? É tbém achei, mas após o restore executei um dbcc checkdb (nomedobanco) e fui ´apresentado´ a seguinte mensagem:
CHECKDB found 0 allocation errors and 465 consistency errors in database ´nomedobanco´.

Minha outra opção foi então de restaurar o backup de sábado; assim o fiz, e para desencargo de consciência rodei o dbcc checkdb e apareceu:
CHECKDB found 0 allocation errors and 634 consistency errors in database ´nomedobanco´.

Perguntas:

i) Como o backup de sábado pode ter mais erros do que o de segunda?

ii) Essas inconsistências justificariam o sumiço dos mais de 140.000 registros?

No aguardo de alguma ajuda e enquanto não aparecem (ou desaparecem) mais erros

Att,
Roberto

Marcus.magalhaes
   - 31 ago 2004

Justino, boa noite.

Quanto a diferença de erros entre um backup e outro, não saberia te dizer sem uma melhor avaliação.

O q vc pode tentar é executar o seguinte comando :

DBCC CHECKDB(´DBName´, REPAIR_REBUILD)
Este comando irá tentar consertar os erros sem o risco de perda de dados.

ou

DBCC CHECKDB(´DBName´) With ALL_ERRORMSGS
Este comando irá listar os erros e os objetos que tem erros, assim vc saberá se o objeto que teve os dados perdidos tem realmente erro.

Quanto à perda da informação, o mais provável é que ocorra um erro durante a leitura, é difícil dizer se vc não sabe a partir de quando os dados não estão mais na tabela.

1) Existem usuários que possuem direito de DELETE na tabela?
2) Vc tem backups mais antigos para saber a partir de quando vc não tem os dados?
3) Vc tem processos de verificação de integridade das bases de dados? Se não, é boa pratica implementa-los gerando saída em texto para que vc possa verificar.

Espero ter ajudado.

Att,

Robertolucio
   - 01 set 2004

Marcus, bom dia.

Na tabela, existem usuários com direito de exclusão, mas não consegui descobrir nenhum log de atividade de usuários no SQL SERVER. Eles existem?

Os dados foram perdidos entre sábado e segunda, mas com o backupo da sexta, foi resolvido parcialmente o problema da tabela em questão.

Por favor, detalhe mais, ou indique na WEB, os processos de verificação de integridade com saída em texto.

Por enquanto obrigado.

Abs
Roberto

Marcus.magalhaes
   - 01 set 2004

Roberto, bom dia.

Se vc não tem um log de auditoria das atividades, não tem como pegar, vc pode implementa-lo através de triggers, porém isso acarretará um peso extra no seu servidor, porque ele terá que ler e gravar registros para as ativdades.

Para efetuar as verificações de integridade, vc pode utilizar o Database Maintenance Plan do SQL Server que é simples e possui saída em texto (desde que vc marque a opção) e assim vc pode agendar para que elas sejam executadas no dia e hora q vc quiser, ou então, vc pode montar procedures para efetuar este trabalho e chama-la através do isql com a opção -o para destinar a saída para texto, porém vc terá que criar os jobs manualmente.

Os seguintes comandos devem ser utilizados, ao menos semanalmente:

DBCC CHECKDB(´dbname) -> Verifica a integridade física e lógica do db.
DBCC DBREINDEX(´table_name´) -> Desfragmenta os índices, melhorando assim a performance.
UPDATE STATISTICS -> Atualiza as estatisticas para que possam ter um melhor aproveitamento da reindexação.
SP_RECOMPILE(´table_name´) -> Irá recompilar todas as procedures, funções e triggers para assim será gerado um novo plano de execução para utilizar a nova estatística. (é TABLE_NAME que deve ser informado).

Esta deve ser a ordem de execução tb.

Att,