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.
- TM (DML Lock): Protege a tabela de alterações estruturais durante operações DML.
-
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: UmSELECT
comFOR 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.
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.