Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

O que é desfazer e refazer no banco de dados Oracle


Muitas pessoas costumam me fazer as perguntas

O que é desfazer e refazer no banco de dados Oracle ? O que ele usa?

Estou tentando tirar todas as dúvidas sobre isso aqui no post

O que é Desfazer no Oracle?


O Undo é armazenado no tablespace Undo no banco de dados. Ele armazena os valores anteriores dos blocos de dados alterados sempre que emitimos uma instrução de inserção, atualização ou exclusão (operação DML). Quando emitimos qualquer instrução DML, os blocos alterados são armazenados no cache de buffer e os valores anteriores para esses blocos alterados nos segmentos UNDO. Sempre que emitimos um comando ROLLBACK, ele usa o segmento de desfazer para reverter para o valor anterior.

É igual ao Desfazer no Bloco de Notas ou no Microsoft Word

O desfazer para uma exclusão é mais para uma inserção. Isso ocorre porque o desfazer para uma exclusão é, na verdade, a reinserção de toda a linha. Portanto, ele tem valores preservados para cada uma das colunas da linha para poder “Desfazer” a exclusão.
Por outro lado, o desfazer para uma inserção é um Excluir da linha por ROWID – que não precisa preservar os valores que estão sendo excluídos.

Desfazer também nos fornece  a consistência de leitura para um usuário, pois ele só pode ver os valores anteriores até que uma transação seja confirmada. Para explicar, eu daria um exemplo

O usuário A inicia o cursor de seleção na mesa no tempo t. O cursor será executado por algum tempo

O usuário B começa a atualizar a mesma tabela no tempo t’.

Agora, o usuário A deve obter a versão consistente de leitura da tabela no momento t. Mas os blocos serão atualizados  pelo usuário B depois de algum tempo.

Portanto, a Oracle usa segmentos de desfazer para restaurar a imagem anterior de  atualização desses blocos de segmentos de desfazer para obter visualizações consistentes de leitura

Undo não são destruídos imediatamente após o commit ou rollback, pois eles serão usados ​​no mecanismo Read consistente.

Eles também são usados ​​em consultas de flashback para ver os dados confirmados antigos usando a restauração de desfazer.

Por quanto tempo os dados de desfazer são armazenados no banco de dados?
O Oracle oferece flexibilidade de quanto tempo os dados de desfazer devem ser armazenados com a ajuda do parâmetro undo_retention. Podemos definir o parâmetro undo_management como automatic para o oracle gerenciar a retenção de undo (padrão), ou até mesmo definir esse valor manualmente e seu valor deve ser maior que o tempo gasto pela consulta mais longa em execução em seu banco de dados. de acordo com o tamanho do tablespace de desfazer

O que é transação ?
Uma transação é uma coleção de instruções da linguagem de manipulação de dados SQL (DML) tratadas como uma unidade lógica.
A falha de qualquer instrução resulta na transação sendo “desfeita”. Se todas as instruções forem processadas, SQLPlus ou o O aplicativo de programação emitirá um COMMIT para tornar as alterações do banco de dados permanentes.As transações são confirmadas implicitamente se um usuário se desconectar do Oracle normalmente.
Desconexões anormais resultam em rollback da transação.O comando ROLLBACK é usado para cancelar (não confirmar) uma transação que está em progresso.

O que é refazer no Oracle?


Redo significa registrar os trabalhos que foram feitos, para que o trabalho não seja perdido. Os logs REDO são usados ​​na recuperação. Sempre que inserimos no banco de dados, ele faz o seguinte
  1. Insira a linha no buffer
  2. gerar o desfazer no buffer
  3. Escreva as alterações de redo, ou seja, insira linhas nos logs de redo
  4. Escreva as alterações de redo para segmentos de desfazer nos logs de redo

Assim, toda operação DML feita no banco de dados é registrada nos logs de redo para fins de recuperação

O redo é escrito primeiro no buffer de redo log no SGA. O processo de gravação de log (LGWR) grava essas alterações de 'redo log buffer' para arquivos de redo log em disco

Redo logs ajudam a restaurar qualquer perda de dados devido a erro humano, falha do sistema operacional, falha do disco rígido.

Os redo logs são essenciais  para a operação do banco de dados, pois fornecem tolerância a falhas.

Antes de gravar as alterações nas tabelas  no arquivo de dados, a Oracle primeiro grava o buffer de redo no arquivo de redo logs .

temos a opção de não registro disponível para determinadas operações  para não gerar buffers de redo.

Como funcionam os registros de refazer
O servidor Oracle registra sequencialmente todas as alterações feitas no banco de dados no buffer de redo log. As entradas de redo são gravadas do buffer de redo log em um dos grupos de redo logs on-line chamados de grupo de redo logs on-line atual pelo processo LGWR. O LGWR grava
nas seguintes situações:
• Quando uma transação é confirmada
• Quando o buffer de redo log fica um terço cheio
• Quando há mais de um megabyte de registros alterados no buffer de redo log
• Antes do DBWn gravar blocos modificados no cache de buffer do banco de dados nos arquivos de dados
Os redo logs são usados ​​de maneira cíclica. Cada grupo de arquivos de redo log é identificado por um número de sequência de registro que é substituído sempre que o registro é reutilizado. O LGWR grava sequencialmente nos arquivos de redo log online. Quando o grupo de redo logs on-line atual é preenchido, o LGWR começa a gravar no próximo grupo. Isso é chamado de switch de log. Quando o último arquivo de redo log online disponível é preenchido, o LGWR retorna ao primeiro grupo de redo
log online e começa a gravar novamente.

Artigos relacionados

como encontrar sessão gerando muitos redo
alterar sistema switch logfile v/s archive log atual
recriar arquivos de redo log no banco de dados Oracle
perguntas da entrevista do Oracle dba sênior