Oracle: Dinâmica -> update
Artigo 4 da série “Arquitetura em posts”
O desenho representa o servidor de banco de dados. O que está dentro do quadrado pontilhado é a Instância que é composta pela System Global Area (quadrados azuis) e os Processos em Background (bolas verdes e amarelas). Os arquivos são representados pelos cilindros marrons.
Para montar o BD de forma que seja utilizável pelos usuários (modo open), o servidor utilizará o Control File para saber onde estão os arquivos, e o Parameter File para alocar a memória.
Após ser validado, o usuário se conectará ao BD através de um processo servidor dedicado ou compartilhado. Um pouco sobre como a conexão acontece já foi tratado aqui.
Ao receber a solicitação de update do usuário, o BD checará se o usuário tem direito de fazer isto nesta tabela. Se não tiver, o BD retornará um erro e estará encerrada a solicitação.
Caso o usuário tenha este direito, o BD tratará o update submetido, verificando se este já se encontra na Library Cache (biblioteca para códigos) e, se já estiver, será imediatamente executado. Se não estiver, será feito a análise sintática (parse), o plano de execução, armazenamento na biblioteca de códigos, e a execução.
Na execução, o Oracle primeiramente checa se os dados necessários estão no Database Buffer Cache e, caso não estejam lá, os dados serão buscados nos datafiles e transferidos para este cache.
É feito o update.
Imediatamente é aplicado um row-level lock para impedir que outros usuários tentem alterar a mesma linha, e também é registrada a transação no Redo Log Buffer.
O usuário faz então um commit para validar a transação.
Neste momento o servidor altera o dado no Database Buffer Cache, o processo Log Writer escreve a transação no Redo Log File e é retornada a mensagem de sucesso na transação para o usuário.
Outros processos ainda vão trabalhar para direta, ou indiretamente, garantir a integridade do BD:
- O processo ARC0 transferirá o on line redo log file para a área destinada aos Archive Files a cada log switch;
- O processo DBW0 escreverá o dado do Database Buffer Cache para o Datafile;
- O CKPT auxiliará a sincronia do Database Buffer Cache com os Data Files, anotando o SCN nos Control Files.