Pular para o conteúdo

Oracle Transações (Parte II)

Oracle Transações (Parte II)

Continuando nossa exploração sobre transações nesta segunda parte, mergulharemos no dinâmico mundo dos bancos de dados através de uma analogia com o funcionamento de uma cozinha movimentada.

Assim como na cozinha, onde cada chef trabalha meticulosamente em suas estações para preparar um prato perfeito, no Oracle, as transações são como etapas cruciais no processamento de dados. Neste artigo, vamos examinar como os comandos DDL, como o CREATE TABLE e o COMMIT, finalizam transações automaticamente, enquanto os comandos DML, como o UPDATE, mantêm transações abertas até que sejam concluídas.

Acompanhe conosco nesta jornada, onde exploraremos o impacto dos comandos SQL na consistência e na eficiência do banco de dados, utilizando exemplos práticos que destacam a importância do controle e da compreensão do fluxo das transações. Prepare-se para descobrir como a gestão cuidadosa desses processos pode garantir um sistema robusto e confiável, essencial para qualquer operação de dados.

Vamos começar esta aventura fascinante pelo universo do Oracle, onde cada transação conta uma história única de precisão e sincronia. Prontos para mergulhar nessa analogia entre tecnologia e gastronomia? Vamos lá!

image 8
SQL
SELECT XID, START_TIME, STATUS, NAME FROM V$TRANSACTION

Após a criação da tabela, ao executarmos a VIEW para visualizar as transações em andamento, notamos que o retorno é nulo. É importante lembrar que o comando CREATE TABLE é um comando DDL, que, por sua natureza, finaliza a transação automaticamente após a sua conclusão. Antes de inserirmos dados na tabela, vamos agora nomear a próxima transação.

image 10
SQL
SET TRANSACTION NAME 'Brasil';

Seguindo adiante, nomeamos a transação como “Brasil”, como mostrado acima. Em seguida, realizamos três inserções sem executar COMMIT ou qualquer comando DDL, o que resultou na não finalização da transação. Foi uma surpresa constatar que essa transação agora está nomeada como “Brasil”, conforme destacado na imagem.

Agora temos uma transação com nome atribuído. Essa prática pode ser útil para um controle mais prático durante o desenvolvimento ou para resolver problemas futuros no banco de dados em execução, facilitando a identificação da transação em andamento.

Para exemplificar melhor como os comandos DDL finalizam as transações, vamos criar uma nova tabela abaixo usando um comando DDL.

image 11

Após executarmos um comando DDL, como a criação de uma nova tabela, todos os comandos pendentes são finalizados automaticamente. É crucial entender que essa nova tabela foi criada na mesma instância onde as transações estavam em aberto, o que significa que esse ato encerra todas as pendências existentes.

Para confirmar que tudo foi finalizado, vamos observar o comportamento em outra sessão, “user BRAVO”.

image 13
SQL
DESC

Na outra sessão, podemos observar as tabelas criadas e seus dados, uma vez que a transação na sessão “user ALPHA” foi finalizada. Esse comportamento é particularmente fascinante no contexto do banco de dados Oracle, pois demonstra como as transações são isoladas entre sessões distintas.

Vamos agora prosseguir e explorar o comportamento de um comando DML em sessões diferentes.

image 15
SQL
SET TRANSACTION NAME 'Campeao';

SELECT XID, START_TIME, STATUS, NAME FROM V$TRANSACTION;

Seguindo no mesmo contexto, na sessão “user ALPHA”, inicio nomeando a próxima transação como ‘Campeao’ e realizo uma atualização onde o número de Verstappen é trocado para 1. Confirmo que a transação está aberta e recebe o nome de ‘Campeao’. É importante notar que não executei nenhum comando DDL, como COMMIT, o que mantém a transação aberta.

Agora vamos observar o comportamento na sessão “user BRAVO”.

image 17

A imagem acima não mostra nenhuma novidade, pois podemos ver o conteúdo da tabela “corrida” sem a alteração do número de Verstappen que foi feita na sessão “user ALPHA”, já que essa transação não foi finalizada com nenhum comando DDL.

Mas agora vamos avançar para a próxima etapa. Na sessão “user BRAVO”, vamos realizar uma atualização.

image 19
SQL
SELECT XID, START_TIME, STATUS, NAME FROM V$TRANSACTION;

UPDATE corrida SET NOME='max' WHERE NOME='verstappen';

A imagem acima não mostra nenhum prompt “SQL>”, indicando que o banco está congelado e a sessão “user BRAVO” está em espera, conhecido como “WAIT”.

Para garantir a consistência dos dados, considerando que há uma transação em andamento que ainda não foi finalizada — lembrando que todo comando DDL finaliza uma transação — e como foi executado um UPDATE (um comando DML), a transação continua aberta, impedindo novas transações nesta tabela. Para que a atualização realizada aqui na sessão “user BRAVO” seja concluída, as outras sessões precisam ser finalizadas. Curiosamente, quando a primeira atualização que está segurando a fila de execuções for concluída, ela automaticamente executará esta atualização na sessão “user BRAVO”. Vamos observar isso.

image 20
SQL
COMMIT;

Estamos na sessão “user ALPHA” para executar o comando DDL COMMIT. Lembrem-se que ao encerrarmos as transações aqui, automaticamente o comando de atualização será executado na sessão “user BRAVO”, como previsto.

Observem que no canto superior direito, a aba “user BRAVO” está em azul. Esse é um recurso do aplicativo MOBA que usa essa forma gráfica para indicar que aquela sessão está em execução, o que facilita a visualização.

Vamos verificar isso.

image 21

E é isso que vemos acima. Agora na sessão “user BRAVO”, observamos que a atualização para trocar o número de 33 para 1, solicitada na sessão “user ALPHA”, e a atualização para trocar o nome do piloto para Max, solicitada na sessão “user BRAVO”, foram ambas executadas. Em seguida, notamos que a transação ‘Campeao’ foi finalizada, enquanto a transação aberta está relacionada à atualização na sessão “user BRAVO”, que estava pendente. Para finalizar esta transação, é necessário executar um comando DDL, como o COMMIT, por exemplo.

Explorar o comportamento das transações no Oracle é como coordenar uma cozinha movimentada, onde cada transação representa uma etapa crucial na preparação de um prato. Assim como na cozinha, onde diferentes chefs trabalham em suas seções, as sessões “user ALPHA” e “user BRAVO” operam independentemente, mas seus resultados podem se entrelaçar dependendo da sequência e finalização das tarefas.

Os comandos DDL, como o CREATE TABLE e o COMMIT, agem como os ingredientes principais que definem o curso da refeição. Quando um chef finaliza sua parte e “completa o prato” com um COMMIT, ele sinaliza que a etapa está concluída e pronto para o próximo passo. Por outro lado, os comandos DML, como o UPDATE, mantêm a cozinha em espera até que todos os ingredientes estejam ajustados e prontos para a próxima etapa.

O uso do recurso visual do aplicativo MOBA, que indica sessões em execução com cores distintas, pode ser comparado à organização de estações de trabalho na cozinha, onde cada cor representa uma equipe focada em uma etapa específica da preparação.

Assim como na cozinha, entender o fluxo e a finalização das transações no Oracle não só garante a consistência dos dados como também otimiza o desempenho e a integridade do sistema, proporcionando uma experiência fluida e eficiente para todos os envolvidos.

Tercio Haring

Tercio Haring

Tércio Haring é pai do Max e um entusiasta incansável de TI. Sua paixão pelo próximo o levou a ser socorrista, sempre pronto para ajudar. No universo da tecnologia, seu objetivo vai além de simplesmente compartilhar conhecimento; ele busca manter sua mente conectada ao futuro e abraçar os desafios como oportunidades disfarçadas. Escreve com o objetivo de tornar o complexo mundo dos bancos de dados mais acessível e compreensível, sempre com um toque de humor para tornar a jornada mais leve e divertida. Se você procura insights valiosos, explicações claras e, claro, algumas boas risadas, Tércio é a pessoa certa para te guiar. Junte-se a ele para explorar, aprender e crescer nesse vasto e fascinante universo Oracle!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Marcações:
plugins premium WordPress