AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 321053
Accepted
user1068636
user1068636
Asked: 2022-12-16 19:30:02 +0800 CST2022-12-16 19:30:02 +0800 CST 2022-12-16 19:30:02 +0800 CST

Algum banco de dados rastreia todas as inserções, atualizações, exclusões para que você possa simplesmente desfazer qualquer alteração até voltar ao bom estado?

  • 772

Às vezes, as pessoas fazem inserções, atualizações ou exclusões que não pretendiam e desejam reverter suas alterações (ou desfazê-las). Existem bancos de dados que tornam isso fácil de fazer (ou seja, existem bancos de dados que rastreiam cada inserção, atualização, exclusão já feita para que você possa recriar todo o banco de dados até um determinado momento)?

rollback
  • 2 2 respostas
  • 26 Views

2 respostas

  • Voted
  1. Best Answer
    J.D.
    2022-12-16T20:14:39+08:002022-12-16T20:14:39+08:00

    existem bancos de dados que rastreiam cada inserção, atualização, exclusão já feita para que você possa recriar todo o banco de dados até um determinado momento

    Não conheço nenhum sistema de banco de dados que ofereça isso pronto para uso - para um conjunto específico de alterações. Fazer isso seria extremamente difícil, pois várias alterações podem ser combinadas em alterações anteriores ou no estado dos dados como resultado de alterações anteriores, em diferentes pontos no tempo, em várias tabelas. Portanto, não é tão simples quanto desfazer a lista linear de alterações em uma única tabela, o que, de outra forma, quebraria os princípios ACID de um sistema de banco de dados. Mas, a recuperação pontual é possível, para restaurar consistentemente o banco de dados como um todo, para um estado anterior em um determinado momento (discutido mais no final desta resposta).

    Alguns sistemas de banco de dados oferecem formas de rastreamento de alterações para fins de auditoria de dados. Por exemplo, o Microsoft SQL Server possui os recursos Change Tracking , Change Data Capture e Temporal Tables que acompanham as alterações de dados em tabelas suplementares, com informações como os valores antigos e os timestamps de quando a alteração ocorreu. Isso é para reconciliação manual e auditoria, mas não uma ferramenta para desfazer completamente o estado do banco de dados na totalidade, para um determinado ponto anterior no tempo.

    O mais próximo disso seria usar backups granulares, como os backups de log de transações que o SQL Server oferece, que restaurará o banco de dados para um determinado ponto no tempo, mas não desfará um conjunto específico de alterações apenas em determinadas tabelas. É uma restauração completamente consistente do banco de dados, em sua totalidade, para um ponto específico no tempo.

    • 3
  2. Phill W.
    2022-12-17T03:51:20+08:002022-12-17T03:51:20+08:00

    ... insere, atualiza ou exclui que não pretendia e deseja reverter suas alterações (ou desfazê-las).

    É para isso que servem as Transações .

    Você inicia uma transação, faz algumas alterações, decide que não as deseja mais e reverte para o início dessa transação, descartando essas alterações.
    Dependendo do seu DBMS, ninguém mais terá a menor ideia de que isso aconteceu.

    Nosso uso mais comum para isso é nos proteger contra o "Momento Oops":

    begin transaction ;                  -- this bit is DBMS-specific 
    
    update the_banks_10million_accounts 
    set account_balance = 0 ;            -- OOPS! 
    
    rollback ;                           -- No harm done 
    

    Existem bancos de dados ... que rastreiam cada inserção, atualização, exclusão já feita para que você possa recriar todo o banco de dados até um determinado momento)?

    Sim. Quase todos eles.

    O que você está descrevendo é geralmente chamado de " Recuperação Point in Time " e é uma ferramenta absolutamente essencial para o DBA.

    • Em tal e tal momento, "Something Bad(TM)" acontece no banco de dados.
    • Você precisa levar todo o banco de dados de volta para [um pouco antes] desse ponto no tempo para torná-lo como se "Algo ruim (TM)" nunca tivesse acontecido.

    Para executar uma recuperação pontual, restaure um backup [completo] anterior e, em seguida, "roll-forward" [backups provisórios e] logs de transações para voltar ao ponto no tempo necessário.

    Parece ótimo , não é?

    Agora, a pergunta de $ 64.000:

    Por que os DBMS não facilitam isso ?

    Porque, paradoxalmente, esse processo de "recuperação pontual" é destrutivo .

    Diga que "algo ruim(TM)" acontece às 12 horas.
    Alguma parte do banco de dados está quebrada e algumas coisas param de funcionar. Pode levar cerca de uma hora antes que a palavra chegue até você e você tenha que "consertar" o banco de dados.
    Durante essa hora, muitas outras coisas aconteceram no banco de dados que "Something Bad(TM)" não quebrou. Todas essas outras alterações serão destruídas por este processo de recuperação.

    Por que?
    Porque recuperar um banco de dados não é como entrar em seu Delorean e voar de volta para 1955 (embora o "Flashback Query" do Oracle Database ofereça algo muito parecido com isso).
    Depois de recuperado, seu banco de dados ficará como estava "em 1955", sem saber nada do que aconteceu desde então. Todo aquele trabalho adorável que as pessoas fizeram desde o meio-dia até o início da recuperação terá desaparecido .

    A única maneira de contornar isso é recuperar uma cópia do banco de dados, extrair os dados "quebrados" como estavam antes de "Something Bad(TM)" acontecer e, em seguida, descobrir como "calçar" esses dados de volta ao banco de dados original , substituindo os dados quebrados. Isso pode ser muito, muito doloroso e demorado e, na verdade, causar mais problemas à medida que resolve.

    • 2

relate perguntas

  • Como configurar transações de leitura para nunca causar falha em outras transações de serialização de gravação

  • Depois de executar esta consulta com sucesso, como volto ao estágio anterior no MySQL?

  • Revertendo alterações de banco de dados após casos de borda de implantação

  • Se eu emitir uma reversão quando o modo de recuperação for registrado em massa, minhas operações em massa serão revertidas?

  • As IOTs geram significativamente mais desfazer por bloco para exclusões?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve