Banner Hospedagem de Sites
01/06/2020

Controle de Transações banco dados ORACLE

O Controle de Transações banco dados ORACLE, ou em banco de dados no geral, são unidades lógicas que gerenciam alterações realizadas por declarações da Linguagem de Manipulação de Dados, do inglês Data Manipulation Language (DML), nas tabelas.

Introdução

Dessa forma, permitem que a aplicação das cláusulas: INSERT, UPDATE e DELETE; possam ser agrupadas em transações lógicas dentro de suas sessões de conexões nos bancos de dados, que implementam esse tipo de controle.

Assim, normalmente esses recursos são encontrados nos bandos de dados relacionais, ou melhor, denominados de Sistemas Gerenciadores de Banco de Dados Relacionais (SGBDR).

Então, o controle de Transações faz parte do subconjunto da Linguagem SQL denominado de Linguagem de Transação de Dados, do inglês Data Transaction Language (DTL), que incluem os comandos COMMIT, ROLLBACK e SAVEPOINT.

Resumindo, as alterações de inserção, alteração ou exclusão de registros realizadas em uma tabela só serão efetivadas no banco de dados, ou seja, serão visíveis para outras sessões (usuários), quando essas transações forem confirmadas. Até lá, só serão visíveis na sessão que foram geradas (pelos usuários que as gerou).

Como finalizar uma transação

Ademais, uma transação que pode ser constituída por uma cláusula, ou por várias cláusulas: INSERT, UPDATE, ou DELETE, podem ser finalizadas pelas seguintes formas:

  • Pela aplicação de operações que alterem o dicionário de dados, ou seja, qualquer comando da Linguagem de Definição de Dados, do inglês Data Definition Language (DDL) – exemplo: criar, ou alterar estrutura de uma tabela.
  • Já a aplicação explícita do comando ROLLBACK que retornaria a situação da última transação, sendo assim, todos os comandos aplicados por essa transação seriam defeitos.
  • Além, da Aplicação explícita do comando COMMIT, que efetivará a transação corrente.
  • Ou, quando uma sessão é encerrada de forma normal, ocorre um COMMIT implícito.

Comandos para trabalhar com Controle de Transações

Os comandos para utilizar para controlar as transações dentro de uma sessão de usuário são:

  • COMMIT : responsável em finalizar uma transação, independentemente se a mesma foi aberta implicitamente ou explicitamente, após sua efetivação todos os usuários enxergarão dentro das tabelas as modificações em seus registros.
  • ROLLBACK : finaliza a transação, desfazendo todas as aplicações de INSERT, UPDATE e DELETE; até o fechamento de uma transação anterior.
  • ROLLBACK TO … : desfaz a transação até encontrar o ponto indicado pelo nome do SAVEPOINT criado; permitindo desfazer apenas parte da transação.
  • SAVEPOINT : permite criar um ponto inicial de uma transação; pode ser usado para dividir transações maiores em partes menores.

Como abrir uma transação

Uma transação é aberta implicitamente quando um comando INSERT, UPDATE ou DELETE é aplicado, assim enquanto a transação não for confirmada por um dos 4 itens explicados na sessão Como finalizar uma transação a mesma não é encerrada.

Contudo, uma transação também pode ser aberta explicitamente através da criação de um ponto de processamento de transação através do comando SAVEPOINT.

Assim sendo, o início do controle de uma transação pode ser definido pelo usuário dentro de sua sessão.

Da mesma forma, deverá ser confirmada por um dos 4 itens explicados na sessão Como finalizar uma transação.

 

Sintaxe do SAVEPOINT com aplicação de um ROLLBACK:

SAVEPOINT nome_do_ponto;
...
...
ROLBACK TO nome_do_ponto;

Ou, sintaxe do SAVEPOINT com aplicação de um COMMIT:

SAVEPOINT nome_do_ponto;
...
...
COMMIT;

Experimento Prático com explicações

Para iniciar é necessário abrir uma nova sessão no ORACLE, este experimento será exercitado no SQLDeveloper (ferramenta cliente para o banco de dados ORACLE), conectando em uma instalação padrão local do ORACLE EXPRESS EDITION.

Importante, essa sessão não pode ter tido a aplicação de nenhuma cláusula, deve ser iniciada com o próximo passo, criação da tabela. E deve seguir os passos descritos na ordem apresentada.

Primeiramente, para realizar os experimentos práticos será necessário criar a tabela PESSOA:

CREATE TABLE PESSOA(
    ID NUMBER(10) PRIMARY KEY,
    NOME VARCHAR2(120) NOT NULL,
    GENERO CHAR(1) NOT NULL,
    DATA_NASCIMENTO DATE NULL,
    CONSTRAINT CK_GENERO_PESSOA CHECK (GENERO IN ('M', 'F'))
);

Agora serão inseridas duas linhas de registros aplicadas pela cláusula INSERT e uma alteração de valor aplicada pela cláusula UPDATE:

INSERT INTO PESSOA 
   VALUES (1, 'MARIA', 'F', TO_DATE('12/03/1989','DD/MM/YYYY'));
INSERT INTO PESSOA (ID, NOME, GENERO, DATA_NASCIMENTO) 
   VALUES (2, 'PEDRO', 'M', TO_DATE('20/04/2005','DD/MM/YYYY'));
UPDATE PESSOA SET NOME = 'PAULO' WHERE ID = 2;

Ao aplicar o primeiro comando INSERT, logo após a criação da tabela é iniciada uma sessão de transação de forma implícita. O segundo INSERT e o UPDATE aplicado vão se agregando a esta sessão, pois enquanto não houver um dos 4 itens explicados na sessão Como finalizar uma transação, está não será encerrada.

Já o script abaixo demonstra a operação do uso de transação, para manter a integridade desta exercitação, a mesma é iniciada desde a criação da tabela:

CREATE TABLE PESSOA(
    ID NUMBER(10) PRIMARY KEY,
    NOME VARCHAR2(120) NOT NULL,
    GENERO CHAR(1) NOT NULL,
    DATA_NASCIMENTO DATE NULL,
    CONSTRAINT CK_GENERO_PESSOA CHECK (GENERO IN ('M', 'F'))
);

INSERT INTO PESSOA 
  VALUES (2, 'JOAO', 'M',TO_DATE('10/05/2000','DD/MM/YYYY'));

SAVEPOINT save_to_here;

INSERT INTO PESSOA 
  VALUES (1, 'MARIA', 'F', TO_DATE('12/03/1989','DD/MM/YYYY'));
  
SELECT * FROM PESSOA;

ROLLBACK TO save_to_here;

COMMIT;

SELECT * FROM PESSOA;

Explicação do Script:

  • Das linhas 1 a 7: Criação da tabela.
  • Das linhas 9 a 10: Inserção do registro. Neste momento a transação é aberta, pois é o primeiro comando INSERT, ou UPDATE, ou DELETE aplicado. Assim, a transação é aberta implicitamente.
  • Já na linha 12: É aberta uma transação de forma explícita, utilizando a diretiva SAVEPOINT.
  • Das linhas 14 a 115: Inserção do registro. Por ser um comando INSERT, ou UPDATE, ou DELETE aplicado, o mesmo faz parte da transação aberta implícitamente, mas como foi aplicado após o uso do SAVEPOINT fica dentro de uma sub-transação. Ou seja, pode se desfazer a sub-transação sem afetar os INSERT, ou UPDATE, ou DELETE aplicados fora desta.
  • Linha 17: SELECT que mostrará que a tabela no momento tem 2 linhas de registros que apenas o usuário desta sessão enxergará, pois a mesma ainda não foi efeitvada.
  • Linha 19: É aplicada um ROLLBACK TO com o nome da sub-transação aberta, assim será desfeito qualquer comando aplicados entre esse ROLLBACK TO até encontrar o SAVEPOINT com o mesmo nome da sub-transação. Ou seja, vai ser defeito o INSERT do registro da MARIA.
  • Linha 21: Aplicação do COMMIT, assim qualquer transação ou sub-transação aberta será efetivada e confirmada. A partir deste momento, todos os usuários com acesso a esta tabela enxergarão os registros efetivados. No caso, o registro do JOAO.
  • Linha 23: SELECT que mostrará que a tabela no momento tem 1 linha de registro, mas que agora será enxergado por todos os usuários que tem acesso a está tabela.

Como foi aplicado o SCRIPT?

A aplicação desse script da exercitação do exemplo acima, foi aplicado em um banco de dados local utilizando como cliente de acesso a ferramenta SQLDeveloper da ORACLE. 

Contudo, fica aqui uma advertência para que for aplicar este exercício na ferramenta online LIVE SQL ORACLE, pois a esta por padrão trabalha com uma diretiva autocommit. Assim, qualquer aplicação de INSERT, UPDATE ou DELETE automaticamente é seguido de um COMMIT, dessa forma, não terá o mesmo resultado apresentado se aplicar os comandos linha a linha. Mas, se aplicados marcando to SCRIPT o resultado final será o mesmo (só será necessário trocar o SAVEPOINT por EXEC SAVEPOINT).

Conclusão

Concluindo, as transações dentro dos bancos de dados relacionais fornecem uma maneira de garantir que alterações sejam feitas de modo consistente.

Assim, dando a possibilidade de serem desfeitas desde que estejam agrupadas de uma forma lógica que possibilite este ato.

Existem outros pontos a se aprofundar sobre o assunto, este artigo tem o intuito de iniciar o assunto para que o leitor possa buscar esse aprofundamento, já tendo a base fundamental.

Por fim, assim é possível entender a importância do assunto relacionado ao Controle de Transações em banco dados ORACLE.

Clique aqui e veja outros artigos sobre banco de dados.

Share

Luis Alexandre da Silva

Professor e Consultor de tecnologia em desenvolvimento de sistemas.Possui mestrado em Ciência da Computação pela UNESP (2016), especialização em Gestão Integrada de Pessoas e Sistemas de Informação pela FIB (2008) e graduação em Análise de Sistemas pela Universidade do Sagrado Coração (1997).Por fim, tem experiência em Gerenciamento de Projetos, Linguagens de Programação e Banco de Dados. Atuando principalmente nos seguintes temas: ensino, gerenciamento de projetos, ITIL, Desenvolvimento WEB e processos BPO.

Você pode querer ver também...

Deixe um comentário

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