Confirmar vs Rápido Confirmar vs Confirmar Limpeza no Banco de Dados Oracle

12

Fiquei me perguntando se alguém poderia verificar meu entendimento sobre as diferenças entre os três termos referentes aos bancos de dados Oracle.

Muitas fontes confundem esses termos e não os explicam em detalhes, por isso foi um desafio encontrar informações.

Pelo que eu entendo:

  1. Confirmação e confirmação rápida são exatamente a mesma coisa, todas as confirmações são confirmadas rapidamente.
  2. Uma confirmação rápida basicamente atualiza apenas o sinalizador na tabela de transações do cabeçalho do segmento de desfazer / retroceder para indicar que a transação foi confirmada. No entanto, o bloco real não é revisitado, o que significa que o UBA (Desfazer Byte) na lista de transações interessadas (ITL), localizada no cabeçalho do bloco de dados, ainda aponta para a tabela de transações do segmento de desfazer correspondente. Além disso, os bytes de bloqueio das linhas correspondentes não são liberados e a contagem de bloqueios no ITL permanece inalterada (as linhas ainda estão bloqueadas).
  3. Em uma limpeza de confirmação, o bloco é revisitado e o ITL é atualizado com o SCN de confirmação. No entanto, a contagem de bloqueios no ITL e o byte de bloqueio armazenados em cada linha ainda não são atualizados (a linha ainda é bloqueada como no commit rápido), isso não gera refazer, mesmo que o bloco seja alterado.
  4. Os blocos que foram confirmados normalmente (== rapidamente confirmados) serão submetidos à Limpeza Atrasada do Bloco quando eles forem tocados em seguida (e gerarão refazer).
  5. Os blocos que foram submetidos à limpeza de confirmação serão submetidos à Limpeza Atrasada do Bloco de Log quando forem tocados em seguida (e gerarão refazer).

Espero que alguém possa verificar esses pontos! Obrigado!

BYS2
fonte

Respostas:

6

Você tem o básico certo. Existe apenas um tipo de confirmação (não normal , rápido ...).

a partir dos conceitos doc :

Quando uma transação é confirmada, ocorrem as seguintes ações:

  • Um número de alteração do sistema (SCN) é gerado para o COMMIT.

    A tabela de transação interna para o espaço de tabela de desfazer associado registra que a transação foi confirmada. O SCN exclusivo correspondente da transação é atribuído e registrado na tabela de transações. Consulte "Nível de isolamento serializável".

  • O processo de gravador de log (LGWR) grava as entradas restantes de redo log nos buffers de redo log no redo log on-line e grava a transação SCN no redo log on-line. Este evento atômico constitui a confirmação da transação.

  • O Oracle Database libera bloqueios mantidos em linhas e tabelas.

    Os usuários que estavam na fila aguardando bloqueios retidos pela transação não confirmada podem continuar com seu trabalho.

  • O banco de dados Oracle exclui pontos de salvamento.

  • O banco de dados Oracle executa uma limpeza de confirmação.

    Se os blocos modificados que contêm dados da transação confirmada ainda estiverem no SGA e se nenhuma outra sessão os estiver modificando, o banco de dados removerá as informações de transação relacionadas ao bloqueio dos blocos. Idealmente, o COMMIT limpa os blocos para que um SELECT subsequente não precise executar esta tarefa.

Portanto, a limpeza (completa com refazer) será executada durante a confirmação se os blocos ainda estiverem no SGA.

Em sistemas ativos, é comum que blocos com transações não confirmadas sejam gravados no disco e liberados do SGA. Nesse caso, o bloco é deixado como está e a próxima consulta que tocar no bloco executará a limpeza atrasada do bloco (seu ponto 5 não acontece em todos os casos).

Vincent Malgrat
fonte