Errada, correu uma declaração de atualização na tabela

3

Por engano, executamos uma instrução de atualização em uma de nossas colunas em uma tabela SQL. Nós não temos um backup da tabela nem do banco de dados. Qualquer um pode nos ajudar a recuperar os valores da coluna antes da atualização.

    
por Kyle Brandt 21.06.2010 / 17:10

4 respostas

11

Sinto dizer que você acabou de aprender uma lição.

Existe alguma maneira de re-derivar os dados de outras fontes, talvez arquivos históricos de log? Frequentemente mantemos registros que registram quando as coisas foram mudadas e por quem; tal coisa ajudaria você a encontrar o último valor de algo.

Para referência futura, quando escrevo uma instrução UPDATE, eu sempre primeiro digito

UPDATE mytable SET qq=ww WHERE {where clause}

Ou seja, eu literalmente digito "qq = ww", que está destinado a ser ilegal, e digite a cláusula WHERE real antes de digitar qualquer coisa que possa ser realmente executada. Acho que a ordem inversa das cláusulas é um erro de design na linguagem SQL.

    
por 21.06.2010 / 17:14
6

Se você ainda tiver o arquivo de log atual, poderá ser possível recuperar os dados usando uma ferramenta de terceiros. As instruções UPDATE são totalmente registradas na maioria dos casos. Aqui estão algumas ferramentas para procurar:

Apex SQL Log por ApexSQL

SQL Log Rescue por RedGate

Se você estava executando no modelo de recuperação simples sem backups, execute sua instrução UPDATE e, depois, faça um backup que perdeu a capacidade de recuperar seu log atual. No modelo de recuperação simples, o arquivo de log fica truncado quando você faz um backup.

    
por 21.06.2010 / 20:35
2

Antes de executar uma atualização em massa, você deve sempre fazer um backup de todas as tabelas afetadas.

Faz você parar e pensar, no mínimo. Vi pessoas fazerem isso em uma transação e, em seguida, confirmá-lo imediatamente sem verificar se está correto e não apenas com êxito .

    
por 21.06.2010 / 17:21
1

Além disso, outra razão para fazer coisas como essa em uma transação.

    
por 21.06.2010 / 17:20