Conceito e mecanismo
Uma transação reúne alterações até COMMIT ou ROLLBACK. SAVEPOINT permite desfazer trabalho posterior mantendo alterações anteriores pendentes. Um statement DML simples tem atomicidade própria: se falhar por constraint, as suas alterações são desfeitas, sem implicar rollback universal de statements anteriores. Modos especiais como error logging precisam de análise separada. DDL em tabelas permanentes introduz outra fronteira: Oracle faz commit antes de DDL sintaticamente válido, mesmo quando depois falha, e após DDL concluído com sucesso. Por isso, um script com UPDATE, DDL falhado e ROLLBACK pode conservar o UPDATE. O plano de mudança deve refletir estas regras, não apenas a última linha do script.
Aplicação guiada
Numa carga fictícia por blocos, identifica lotes confirmados antes de reprocessar. MERGE não é um deduplicador de negócio: duas linhas de origem não devem tentar atualizar a mesma linha alvo no mesmo statement. Resolve a chave e a precedência dos valores antes de executar. TRUNCATE de tabela permanente não é um DELETE que possa ser desfeito com rollback; exige recuperação preparada. Em READ COMMITTED, cada consulta pode observar um snapshot confirmado diferente. Dois totais obtidos em momentos distintos podem refletir commits concorrentes, sem leitura suja. Para um fecho consistente, combina desenho de transação, contrato da aplicação e coordenação com o DBA. Não declares uma carga recuperada apenas porque uma repetição terminou sem erro.
UPDATE A; SAVEPOINT s; UPDATE B; ROLLBACK TO s; deixa A pendente e desfaz B, sem confirmar A.
Armadilhas comuns
Erro como rollback total; DDL falhado como ausência de commit; MERGE como seleção de vencedor; retry como idempotência.
Tópicos relacionados: Modelo, SELECT e população do resultado · Funções, conversões e contratos de dados · Joins, granularidade e agregação
Recupera a partir do estado confirmado e de uma regra explícita de reconciliação.
Referência: Transactions and implicit DDL commits · 1Z0-071 public objectives inspected 2026-09-30; revision date not published