Oracle Isolation Level - Tipos

Com sistemas de banco de dados robustos e complexos, deve haver uma maneira de gerenciar possíveis conflitos que possam surgir ao tentar processar várias transações em um banco de dados ao mesmo tempo. No Oracle, os usuários podem especificar níveis de isolamento de transações para indicar o nível de cuidado a ser exercido na resolução de conflitos potenciais.

Quanto maior o nível de isolamento da transação, mais cuidadoso o sistema será para evitar conflitos. Por outro lado, geralmente há um preço: Quanto maior o nível de isolamento da transação, a sobrecarga de bloqueio pode aumentar enquanto a concorrência do usuário pode diminuir. Os desenvolvedores e o DBA devem levar esses fatores em consideração ao estabelecer os níveis de isolamento de transações da Oracle.

Atualmente, existem três níveis de isolamento de transação suportados pelo banco de dados Oracle:

  • Read Committed
  • Serializable
  • Read Only

Read Committed Transaction Isolation Level

O nível de isolamento de transação com leitura comprometida é o padrão do Oracle. Com esta configuração, cada consulta pode ver apenas dados cometidos antes da consulta, e não a transação, começou. As consultas Oracle não lêem dados sujos ou não “comitados”; No entanto, não impede que outras transações modifiquem os dados lidos por uma consulta. Assim, é possível que outras transações possam alterar dados entre as execuções da consulta. Qualquer transação que executa uma determinada consulta mais de uma vez pode achar dados fantasmas.

Exemplo de utilização:

Transaction Level:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

Session Level:

ALTER SESSION SET ISOLATION_LEVEL READ COMMITTED;

Serializable Transaction Isolation Level

O nível de isolamento de transação serializável não é suportado com transações distribuídas. Com o nível de isolamento de transação serializável, somente uma consulta que tenha sido “commitada” no início da transação mais as realizadas pela transação através de INSERTs, UPDATEs e DELETEs pode ser acessada por uma consulta. Ao contrário das transações de nível de leitura comprometidas, as transações de nível de isolamento serializáveis não retornam leituras ou fantasmas.

Exemplo de utilização:

Transaction level:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Session level:

ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE;

Read Only Transaction Isolation Level

No caso do nível de isolamento somente leitura, apenas transações “comitadas” podem ser retornadas. Além disso, não é possível fazer alteração nos dados.

Exemplo de utilização:

Transaction level:

SET TRANSACTION ISOLATION LEVEL READONLY;

Session level:

ALTER SESSION SET ISOLATION_LEVEL READONLY;

Conforme mostrado, os níveis de isolamento da transação podem ser definidos no nível da transação, que se aplica somente a essa transação ou ao nível da sessão, que se aplica a cada transação subseqüente ao comando ALTER SESSION. O uso do comando ALTER SESSION para definir o nível de isolamento da transação para a sessão pode economizar alguns problemas de rede e processamento que podem ser associados a ter SET TRANSACTION no início de cada declaração.