Pular para o conteúdo principal

Bloqueios (locks)

No Oracle Database, os tipos de locks (bloqueios) servem para gerenciar o acesso simultâneo aos recursos, garantindo a integridade e consistência dos dados.

Os principais tipos de locks detalhados da seguinte forma:

  • Locks (bloqueios gerais): Esses são os bloqueios básicos aplicados para gerenciar o acesso a objetos e dados no banco de dados. Incluem:

    • DML Locks (Data Manipulation Locks): Aplicados em operações DML (INSERT, UPDATE, DELETE) para proteger linhas específicas.
    • DDL Locks (Data Definition Locks): Aplicados em operações DDL (CREATE, DROP, ALTER) para evitar mudanças conflitantes durante alterações estruturais.
  • Transaction Locks: São criados durante transações para proteger os dados manipulados por elas. Características:

    • Garantem que as alterações feitas por uma transação não sejam visíveis a outras transações até que sejam commitadas.
    • Estão associadas a linhas de tabelas específicas.
      Visão Relacionada: V$TRANSACTION.
    • Eventos Comuns de Espera:
      • enq: TX - row lock contention: Indica que uma transação está aguardando o desbloqueio de uma linha bloqueada por outra transação.
  • Object Locks: Protegem os metadados de objetos (como tabelas, índices, views) durante operações que possam alterar sua estrutura.
    Exemplo: Uma tabela sendo alterada (ALTER TABLE) terá um bloqueio aplicado para evitar que outras sessões modifiquem sua estrutura ao mesmo tempo.
    Visão Relacionada: DBA_OBJECTS_LOCKED.

  • Row Locks (TM e TX Locks): Row-Level Lock: Aplica bloqueios a linhas específicas em uma tabela durante operações DML. Tipos:

    • TM (DML Lock): Protege a tabela de alterações estruturais durante operações DML.
      Exemplo: Um bloqueio TM é aplicado em uma tabela quando linhas dela estão sendo modificadas.
    • TX (Transaction Lock): Bloqueio em nível de transação para proteger as linhas que estão sendo modificadas.
  • Table Locks: Bloqueios aplicados no nível da tabela inteira. Exemplos de Modos de Bloqueio:

    • Shared Mode (S): Permite leituras concorrentes, mas bloqueia alterações.

    • Exclusive Mode (X): Bloqueia todas as outras operações na tabela. Comandos Relacionados:

      sql

      LOCK TABLE table_name IN EXCLUSIVE MODE;
    • Shared Locks: Permitem que várias sessões leiam o mesmo recurso simultaneamente, mas impedem alterações.
      Exemplo: Um SELECT com FOR UPDATE cria um shared lock para impedir alterações nos dados até o fim da transação.

  • Shared Locks: Permitem que várias sessões leiam o mesmo recurso simultaneamente, mas impedem alterações.
    Exemplo: Um SELECT com FOR UPDATE cria um shared lock para impedir alterações nos dados até o fim da transação.

  • Exclusive Locks: Impedem que outras sessões acessem ou modifiquem o recurso bloqueado.
    Exemplo: Durante um DELETE ou UPDATE, a linha afetada está bloqueada exclusivamente.

  • Deadlocks: Situações em que duas ou mais sessões estão aguardando indefinidamente por recursos bloqueados uma pela outra. O Oracle detecta deadlocks automaticamente e encerra uma das transações para resolvê-lo. Informações sobre deadlocks são registradas no alert log.

Nota

Os locks no Oracle são essenciais para o gerenciamento de acesso concorrente e a integridade dos dados. Entender os tipos (como Transaction Locks, Object Locks, e Row Locks) ajuda o DBA a diagnosticar e resolver problemas relacionados a sessões bloqueadas, deadlocks e contenções de recursos, garantindo um desempenho eficiente do banco de dados.