Pular para o conteúdo principal

RECO ( Recoverer Process ) - Estruturas de Memória no Oracle


#36
O RECO é utilizado para controlar instruções DML (Insert, Update, Delete) gerada em transação distribuída.
Mas agora fica a pergunta, mas o que é uma transação distribuída? Uma transação distribuida consiste em atualizações em dois ou mais banco de dados. Esse tipo de transação é projetada por programadores e opera por meio de links de bancos de dados.

Observe essa instrução DML,

UPDATE aluno SET nota = 30 WHERE aluno_id = 10;
UPDATE aluno@LINK_BANCO SET nota = 30 WHERE aluno_id = 10;
COMMIT;

O mesmo UPDATE é aplicado a duas tabelas iguais, mas em banco de dados diferentes, o primeiro Update é executado no banco de dados local, o segundo em um banco de dados remoto indentificado pelo LINK do banco de dados.

A terceira instrução é o COMMIT, reelembrando, o que um COMMIT faz quando é executado. Assim que o COMMIT é chamado o LGWR é forçado a gravar nos arquivos de Redo Log Online, enquanto a gravação esta sendo processada a sessão que chamou o COMMIT fica suspensa, quando o COMMIT é finalizado com  sucesso a sessão volta a funcionar normalmente.

Em uma transação distribuida a situação não é muito diferente, mas, é adicionado mais uma etapa na confirmação do COMMIT, o nome do COMMIT em uma transação distribuída é, commit de duas fases (two-phase commit). O COMMIT em cada banco é coordenado através de dados globais, a primeira fase do COMMIT, é o comando para o LGWR realizar o flush do buffer de log, se o COMMIT for bem sucedido em todos os bancos de dados, então é iniciado a segunda fase, que marca a transação como confirmada nos dados globais e com isso a sessão continua normalmente. Mas no caso, na primeira fase, um banco retorna a confirmação de COMMIT bem sucedido e no outro banco não tiver a confirmação, então os dados globais estariam em um estado de inconsistente e é nessa parte que o RECO entra em ação. Quando algo sai errado em algum lugar entre as duas fazes, o RECO assume o controle para cancelar o COMMIT e fazer um ROLLBACK da transação em todos os bancos de dados envolvidos.

Se tiverem dúvidas realizem um INSERT nos comentários e depois dê um COMMIT que depois respondo.

Abraço e bons estudos.

Comentários

Postagens mais visitadas deste blog

Conhecendo a arquitetura do Banco de Dados Oracle

#15 Vamos focar mais no ambiente de banco de dados mais comum, que é uma instância em um computador, abrindo um banco de dados armazenado em discos locais. Sempre que for mensionado instância, esta se referindo ao banco de dados em funcionamento. Um banco Oracle é composto por duas estruturas, uma lógica e uma física. A estrutura lógica é chamada de instância e composta por estruturas de memória e processos, a sua existência é temporária na memória RAM e CPU e fica ativa enquanto o banco Oracle estiver ligado, se desligar o banco Oracle toda a informação ou vestígios de sua existência será apagado da memória, ao ligar o banco Oracle a instância é carregada novamente na memória. Os processos que compõem a instância trabalham em segundo plano e fica ativo o tempo todo enquanto a instância estiver ativa. A estrutura física é onde fica armazenado as informações, e uma vez criado, ele existe até que o DBA deliberadamente decida exclui-lo. Quando um banco Oracle é iniciado, na me...

O Cache de Buffer do Banco de dados - Estruturas de Memória no Oracle

#21 Vamos conhecer um pouco mais sobre o Cache de Buffer de Dados. O Cache de Buffer de Dados é o local de trabalho do Oracle, é nessa área que ele executa as SQLs. A função dessa área é otimizar e melhorar o desempenho das instruções DML. O maior gargalo de um banco de dados é o I/O dos arquivos em disco. Mas antes de explicar como funciona o Cache de Buffer de Banco de dados, vamos entender rápidamente o que é bloco, desta forma você não fica perdido, os arquivos de dados que contém os registros que são as linhas da tabela, indices e outros objetos de dados são formatados em blocos de tamanho fixo, o DBA pode definir um tamanho para esses blocos ou deixar de forma automática. A quantidade de linhas por bloco é indefinida, pois, as linhas possuem comprimento variável, o comprimento desta linha dependerá do número de colunas e os tipos de informações definidos para a tabela. De acordo com tamanho das linhas, pode haver várias linhas por bloco ou uma linha pode se estender por vár...

Shared Pool - Estruturas de Memória no Oracle

#23 O Shared Pool é considerada umas das estruturas de memórias mais complexas da SGA, ela é dividida em dezenas de subestruturas e todas são gerenciadas internamente pelo Oracle. Mas nesse momento vamos citar apenas os 4 principais componentes desta estrutura, as demais serão analizadas posteriormente. Quando uma aplicação executa uma DML, vários processos internos no Oracle são realizados até o retorno do resultado para o usuário. E esses 4 componentes tem participação direta na execução da DML e com isso gerando um bom desempenho do banco de dados. Os 4 principais componentes são: - O Cache de Biblioteca - O Cache de Dicionário de Dados - A Área PL/SQL - O Cache de Resultados de Funções PL/SQL e Consultas SQL Agora, vamos conhecer um pouco mais de cada um. - O Cache de Biblioteca (library cache) Todas instruções DML enviadas pela aplicação devem ser analizadas pelo Oracle. Quem realiza essa análise é o parse, o parse converte o código escrito pelos progra...