O banco de dados Oracle é o banco de dados amplamente utilizado na indústria. Aqui estou tentando explicar sobre bloqueios oracle, bloqueios de tabela oracle
Índice
O que é Oracle Enqueue e bloqueios
Enqueue são bloqueios Oracle que serializam as operações para a estrutura compartilhada. A estrutura compartilhada pode ser tabela, threads de refazer e transações.
Quando um usuário A atualiza uma linha 12 na tabela, ele adquire a transação Enqueue (bloqueio). Isso é adquirido para que qualquer usuário que eu tente atualizar essa mesma linha 12 na tabela espere até que o usuário A confirme a transação. Portanto, agora, se o usuário B tentar atualizar a mesma linha, ele aguardará no enfileiramento.
Uma vez que o usuário A confirma a transação, a transação do usuário B continuará
Temos enfileiramento local no banco de dados de instância única, enquanto no Oracle RAC, temos enfileiramento local e enfileiramento global para gerenciar o recurso compartilhado
O que é identificador de enfileiramento
Enqueue são identificados exclusivamente usando o formato
Recurso pode
TM -> travas de mesa
MR-> Recuperação de mídia
TX-> Transação
Id1 e id2 são números que são diferentes para diferentes tipos de recursos
Como para bloqueio de tabela (TM), é escrito como
TM-
Quando um usuário solicita acesso ao recurso em determinado modo, um identificador de enfileiramento é gerado, explicado acima
O enfileiramento é mantido neste modo
SS: Modo de compartilhamento de linha
SX:Modo exclusivo de linha
S: Bloquear a mesa no modo de compartilhamento
SSX:Bloqueie a tabela no modo de compartilhamento e a linha no modo exclusivo
X:Bloqueia a mesa no modo exclusivo
O que é recurso de enfileiramento
Cada enfileiramento é mantido por meio de uma estrutura de recursos pelo servidor Oracle e é identificado conforme explicado acima. Uma estrutura de recursos tem três listas
- Lista de proprietários
- Lista de espera
- Lista de conversores
Quando um usuário solicita um bloqueio em um recurso em determinado modo, ele obtém uma estrutura de bloqueio e faz uma solicitação para adquirir o bloqueio em determinado recurso.
Assim, o usuário está solicitando esse recurso primeiro e, em seguida, ele será colocado na lista de proprietários
A estrutura de recursos é obtida da tabela de recursos e a estrutura de bloqueio é obtida da tabela de bloqueio. Ambos são alocados no SGA
O número de linhas na tabela de recursos é definido pelo parâmetro de inicialização enqueue_resources. Os valores em uso podem ser vistos na visualização v$resource
O número de linhas na tabela de estrutura de bloqueio é definido pelo parâmetro de inicialização _enqueue_locks. Os valores em uso podem ser vistos em v$enqueue_lock
Como é feita a pesquisa na tabela de recursos?
- A tabela de recursos contém toda a estrutura de recursos. Um algoritmo de hash é usado para localizar e acessar a estrutura de recursos na tabela de recursos.
- A tabela de recursos é organizada em um bucket de hash. Cada bucket de hash contém uma lista de estrutura de recursos em forma de lista vinculada.
- Quando o recurso é pesquisado, seu hash é obtido usando algoritmo de hash e, em seguida, é obtido o latch para encontrar o hash bucket correspondente e, em seguida, o recurso é pesquisado na lista no hash bucket. Se o recurso for encontrado, a estrutura de bloqueio será obtida e a solicitação será colocada no proprietário, no garçom e na lista de conversão de acordo com o nível especificado de bloqueio solicitado
Exemplo de recurso TM-575-0 com hash no bucket 1, uma cadeia de hash de enfileiramento de trava é obtida para acessar o bucket de hash e a lista é acessada no bucket para obter a estrutura do recurso
- Se o recurso não for encontrado na lista de buckets e uma nova estrutura de recursos for obtida da lista de recursos livres e colocada na lista de buckets. Isso acontece na trava Enqueue. Uma estrutura de bloqueio também é alocada
A solicitação de bloqueio é colocada na lista de proprietários da estrutura de recursos
Como funcionam as operações de enfileiramento?
Quando um usuário solicita um bloqueio no recurso, o servidor Oracle faz o seguinte
- Se não for de propriedade no momento, o recurso será concedido ao usuário
- Se for de propriedade e houver garçons e conversores, ele será colocado na parte inferior da fila de garçons
- Se for de propriedade, mas não houver garçom e conversor, se for compatível com o bloqueio de proprietário, a solicitação será concedida. Se não for compatível, será colocado na lista de espera
- Um conversor tem permissão para prosseguir se a solicitação for menos restritiva do que o bloqueio mantido atualmente ou o modo solicitado for compatível com o bloqueio mantido pelo outro proprietário
- Um waiter tem permissão para prosseguir se a lista de conversores estiver vazia, não houver waiters à sua frente e o bloqueio solicitado for compatível com o bloqueio atual
- O conversor é sempre processado antes dos garçons.
- O servidor Oracle verifica essas filas sempre que o bloqueio é liberado ou convertido.
Como a fila é verificada quando o bloqueio do Oracle é liberado ou convertido
- Os processos que aguardam os recursos dormem nos semáforos, e os semáforos são usados como mecanismos de sono/despertar. Depois de entrar na fila, o processo solicitante dormirá no semáforo usando a chamada sync_op.
sync_op(SYNC_WAIT, SYNCF_BINARY, 300) =1
- Quando o processo que contém o recurso está pronto para liberá-lo, ele examina a fila anexada à estrutura do recurso. Se houver um processo na fila, ele envia um sinal de semáforo para o processo em espera usando
chamada sync_op.
sync_op(0x0005, SYNCF_BINARY, 134491620) =1
- O processo de espera processará o sinal e será ativado. Este processo de espera modifica o status de acordo com as etapas fornecidas na operação de enfileiramento
Tipos comuns de enfileiramento
JQ – Fila de trabalhos. Quando um trabalho (enviado por DBMS_JOB.SUBMIT) está em execução, ele é protegido por um enfileiramento JQ (o que significa que apenas um processo SNP pode executar o trabalho).
ST – Transação de gerenciamento de espaço . O enfileiramento ST precisa ser retido toda vez que a sessão estiver alocando/desalocando extensões (o que significa que deseja alterar as tabelas de dicionário UET$ e FET$), como coalescência, soltar/truncar segmentos e classificação de disco. Se a sessão obtiver um tempo limite ao solicitar o enfileiramento ST, será retornado "Tempo limite ORA-1575 aguardando gerenciamento de espaço".
TM – DML (Tabela) enfileirado. Toda vez que uma sessão deseja bloquear uma tabela, um enfileiramento de TM é solicitado. Se uma sessão excluir uma linha na tabela-pai (DEPT) e uma restrição referencial (chave estrangeira) for criada sem um índice na tabela-filho (EMP), ou se a sessão estiver atualizando a(s) coluna(s) que a referências de chave para um bloqueio de compartilhamento (nível 4) é obtido na tabela filha. Se outra sessão tentar fazer alterações na tabela-filho, eles terão que esperar (porque desejam o enfileiramento no modo exclusivo de linha e isso não é compatível com o modo de compartilhamento). Se um índice for criado na coluna de chave estrangeira da tabela filha, nenhum sharelock será necessário na tabela filha.
TX – Transação. Assim que uma transação é iniciada, um enfileiramento TX é necessário. Uma transação é definida exclusivamente pelo número do segmento de rollback, o número do slot na tabela de transações do segmento de rollback e o número de sequência do número do slot. Uma sessão pode estar esperando em um enfileiramento TX por vários motivos:
1) Outra sessão está bloqueando a linha solicitada.
2) Quando duas sessões tentam inserir a mesma chave única em uma tabela (nenhuma delas fez um COMMIT), então a última sessão está esperando pela primeira para COMMIT ou ROLLBACK.
3) Não há ITL (Interested Transaction List) livre no cabeçalho do bloco (aumento de INI_TRANS ou PCT_FREE para o segmento).
UL – Bloqueio de usuário . Uma sessão foi bloqueada com a Função DBMS_LOCK.REQUEST.
Visualizações e Tabela para visualizar o enfileiramento e bloqueios Oracle
V$session e v$session_wait
Quando a sessão está aguardando enfileiramento ou bloqueio, pode ser sessão de V$session (em 11g e superior) e v$session_wait
Select * from v$session_wait where event like ‘enq%’; The parameter of the enqueue wait event has following meaning P1: resource type and mode wanted P2:ID1 of the resource P3: ID2 of the resource
Podemos usar a consulta abaixo para obter todo o enfileiramento no sistema
Select event,p1, p2,p3 from v$session_wait where wait_time=0 and event like 'enq%';
- V$lock é outra visualização útil para verificar enqueue 's
- V$lock lista toda a estrutura de bloqueio atualmente mantida no sistema
- O tipo de coluna ,id1 e id2 representam o tipo de recurso ,id1 e id2 da estrutura do recurso. Assim, ela pode ser unida a V$resource que contém a lista de toda a estrutura do recurso
- LMODE e solicitação nos informam qual fila (proprietário, conversor, garçons) é a sessão
LMODE | Solicitar | Nome da fila |
> 0 | =0 | Proprietário |
=0 | > 0 | Garçom |
> 0 | > 0 | Conversor |
A consulta abaixo pode ser usada para encontrar o titular e o garçom
SELECT inst_id,DECODE(request,0,'Holder: ','Waiter: ')||sid sess, id1, id2, lmode, request, type FROM V$LOCK WHERE (id1, id2, type) IN (SELECT id1, id2, type FROM V$LOCK WHERE request>0) ORDER BY id1, request ;
No caso de RAC, a consulta abaixo pode ser usada para descobrir bloqueadores e garçons
SELECT inst_id,DECODE(request,0,'Holder: ','Waiter: ')||sid sess, id1, id2, lmode, request, type FROM GV$LOCK WHERE (id1, id2, type) IN (SELECT id1, id2, type FROM gV$LOCK WHERE request>0) ORDER BY id1, request ;
V$locked_object
é outra visualização útil para bloqueios de tabela Oracle
Ele contém todos os bloqueios de TM no banco de dados. Ele fornece o slot de transação, o processo do sistema operacional e o id da sessão que está mantendo os bloqueios da TM
Existem várias visualizações que podem ser usadas para localizar as informações de bloqueios. Essas visualizações são criadas por catblock.sql
DBA_LOCKS | Mostrar todos os bloqueios como v$lock |
DBA_DML_LOCKS | Mostra todos os bloqueios DML™ mantidos ou sendo solicitados |
DBA_DDL_LOCKS | Mostra todos os bloqueios DDL mantidos ou sendo solicitados |
DBA_WAITERS | Mostra todas as sessões aguardando, mas não aguardando bloqueios |
DBA_BLOCKERS | Mostra sessões sem espera com bloqueios em espera |
Consulte para descobrir sessões em espera e em espera no Oracle
set linesize 1000 column waiting_session heading 'WAITING|SESSION' column holding_session heading 'HOLDING|SESSION' column lock_type format a15 column mode_held format a15 column mode_requested format a15 select waiting_session, holding_session, lock_type, mode_held, mode_requested, lock_id1, lock_id2 from dba_waiters /
Consulte para descobrir todos os objetos bloqueados
set term on; set lines 130; column sid_ser format a12 heading 'session,|serial#'; column username format a12 heading 'os user/|db user'; column process format a9 heading 'os|process'; column spid format a7 heading 'trace|number'; column owner_object format a35 heading 'owner.object'; column locked_mode format a13 heading 'locked|mode'; column status format a8 heading 'status'; select substr(to_char(l.session_id)||','||to_char(s.serial#),1,12) sid_ser, substr(l.os_user_name||'/'||l.oracle_username,1,12) username, l.process, p.spid, substr(o.owner||'.'||o.object_name,1,35) owner_object, decode(l.locked_mode, 1,'No Lock', 2,'Row Share', 3,'Row Exclusive', 4,'Share', 5,'Share Row Excl', 6,'Exclusive',null) locked_mode, substr(s.status,1,8) status from v$locked_object l, all_objects o, v$session s, v$process p where l.object_id = o.object_id and l.session_id = s.sid and s.paddr = p.addr and s.status != 'KILLED' /
Como os bloqueios DML são tratados no servidor Oracle
Quando um update, insert, delete ou select for update é executado na tabela oracle, o Oracle pega esses dois locks
- Bloqueio de Tabela DML:Para garantir a consistência da definição do objeto durante a transação. Isso evita que qualquer operação DDL ocorra enquanto uma DML está em andamento.
- DML Row Lock:Isso é para garantir a consistência dos dados durante a execução da transação. Podemos reformular como Isso obtém um bloqueio na linha específica que está sendo tocada e qualquer outra transação que tente modificar a mesma linha é bloqueada, até que a que já a possui termine
Como os bloqueios de tabela Oracle são implementados
Já explicamos a infraestrutura do Enqueue na seção anterior. Bloqueios de tabela Oracle são implementados como TM Enqueue
Portanto, a estrutura de enfileiramento seria
TM-
Os modos são
RS:compartilhamento de linha
RX:linha exclusiva
S:compartilhar
SRX:compartilhar linha exclusiva
X:exclusivo
Cada cursor mantém uma lista de estrutura de bloqueio de tabela que é construída durante a análise da instrução. Na primeira execução, a chamada de função é feita para bloquear toda a tabela da lista. Os bloqueios são liberados quando a transação é confirmada ou revertida.
A possibilidade de reversão, particularmente reversão para um ponto de salvamento, adiciona outra dimensão de complexidade ao bloqueio de dicionário. Ou seja, se uma transação for revertida além do ponto em que um bloqueio foi atualizado, o bloqueio deverá ser rebaixado correspondentemente, como parte da operação de reversão, para reduzir o risco de deadlocks artificiais.
Os requisitos de bloqueio de dicionário para transações e, em particular, a manutenção de um histórico de conversões de bloqueio, são fornecidos por bloqueios DML em conjunto com o enfileiramento de TM. Cada transação que contém um bloqueio DML também contém um bloqueio de enfileiramento TM. A funcionalidade básica de bloqueio é fornecida pelo enfileiramento e o bloqueio DML adiciona a manutenção do histórico de conversão.
A matriz fixa de estruturas de bloqueio DML é dimensionada pelo parâmetro DML_LOCKS. Sua lista livre é protegida pela trava de alocação de bloqueio dml e os slots ativos são visíveis em V$LOCKED_OBJECT .
Para definir os DML_LOCKs verifique a utilização em v$resource_limit. Podemos configurá-lo generosamente, pois ocupa muito menos espaço
Como desativar os bloqueios de tabela?
- Os bloqueios DML e os bloqueios de enfileiramento de TM associados podem ser desativados, totalmente ou apenas para determinadas tabelas.
- Para desativar totalmente esses bloqueios, o parâmetro DML_LOCKS deve ser definido como zero. Em um banco de dados de servidor paralelo, deve ser definido como zero em todas as instâncias.
- Para desabilitar esses bloqueios em uma tabela específica, a cláusula DISABLE TABLE LOCKS da instrução ALTER TABLE deve ser usada.
- Se os bloqueios estiverem desabilitados para uma tabela, as instruções DML ainda poderão modificar os blocos da tabela e os bloqueios em nível de linha ainda serão mantidos. No entanto, os bloqueios de tabela de modo subcompartilhado normalmente associados a consultas e os bloqueios de tabela de modo subexclusivo normalmente associados a DML não são usados. Em vez disso, as transações contra a tabela são protegidas contra DDL conflitantes simplesmente proibindo todas as tentativas de bloquear a tabela inteira e, portanto, todos os DDL contra a tabela.
- Desativar os bloqueios de tabela pode aumentar o desempenho, pois a sobrecarga de aquisição de bloqueio é reduzida Isso é particularmente importante no caso de RAC, onde essa sobrecarga é bastante alta.
- Desabilitar os bloqueios de tabela também impede a criação de índices de chave estrangeira. Como a chave estrangeira precisa ser indexada para evitar o bloqueio da tabela filho enquanto as linhas são manipuladas na tabela pai. Portanto, se desabilitarmos o bloqueio de tabela todos juntos, os índices não serão necessários
- É preferível usar alter table para desabilitar os bloqueios de tabela em alguma tabela do que definir a tabela dml_locks. Como se dml_locks estivesse definido como zero, precisaremos devolver a instância para defini-la novamente
- Na inserção de carga direta, uma sessão levará o enfileiramento de TM no modo 'X'. Isso evita que qualquer outro DML ocorra enquanto o carregamento direto está acontecendo, além de bloquear todos os DDL
Como os bloqueios de linha DML são implementados
Os bloqueios de linha DML são implementados como uma combinação das seguintes duas coisas
- Bloqueio de nível de linha:é implementado como byte de bloqueio em cada cabeçalho de linha e ITL (lista de transações de interesse) em cada bloco de dados ou índice. Eles não são armazenados em cache em nenhum lugar e, como são armazenados no próprio bloco, não no SGA, que é limitado, esse mecanismo de bloqueio por oráculo é altamente escalável.
- Bloqueios de transação:são implementados como TX Enqueue
O byte de bloqueio aponta para a entrada ITL no bloco e Todas as entradas ITL para a transação apontam para o TX Enqueue que, em última análise, determina se a transação foi confirmada ou revertida. Os garçons aguardarão o bloqueio da transação
Exemplo
- Uma transação A deseja atualizar as linhas 2 e 3 do bloco. Ele alocará um ITL (lista de transações interessadas). A transação acessa as linhas 2 e 3 e vê o byte de bloqueio. Se o byte de bloqueio for zero, ele não está bloqueado. A transação atualizará a linha 3 ,3
- Agora, uma transação B começa e deseja atualizar as linhas 1 . Ele alocará um ITL (lista de transações interessadas). A transação acessa a linha 1 e vê o byte de bloqueio. Se o byte de bloqueio for zero, ele não será bloqueado. A transação atualizará a linha 1
- Agora a transação deseja atualizar a linha 2. Ela acessará a linha e a encontrará bloqueada, pois o byte de bloqueio não será zero. Ele procurará no ITL que mantém o bloqueio. Ele executará a limpeza ITL para descobrir se a transação está ativa ou não ativa. Neste caso, ele encontrará a Transação A ativa. Portanto, a transação B precisa aguardar a transação A para reverter ou confirmar. A transação B aguardará para exigir o TX Enqueue que a transação A detém em modo exclusivo
O que é a lista de transações de interesse (ITL)
Quando uma sessão deseja modificar um bloco, ela deve alocar um ITL no bloco. ITL é a estrutura de dados no cabeçalho do bloco que contém muitos slots que são ocupados pela transação. É definido pelos parâmetros INITRANS e MAXTRANS quando a tabela é criada. Números iniciais de slots são criados conforme INITTRANS e crescem dinamicamente até o máximo de MAXTRANS
O que é transação?
Quando uma sessão é atualizada/excluída/inserida , uma transação é iniciada. Ele é concluído quando o commit ou rollback aconteceu. Uma transação é identificada pelo identificador de transação (XID). A transação identifica consiste em três partes
- Reverter ou desfazer o número do segmento
- Número do slot da tabela de transações
- Nº de sequência ou envoltório
XID=usn#.slot#.wrap#
Cada bloco ITL conterá o XID
Uma limpeza de ITL significa procurar o XID no ITL e pesquisar os segmentos de rollback com base nisso e procurar a tabela de transações e o número de encapsulamento para verificar a atividade da transação.
Podemos usar o comando abaixo para despejar qualquer segmento de reversão
Alterar cabeçalho de desfazer de despejo do sistema
Cada transação ativa pode ser vista na tabela v$transaction
select addr, xidusn, xidslot, xidsqn from v$transaction; ADDR XIDUSN XIDSLOT XIDSQN -------- ---------- ---------- ---------- 3C485875 50 5 3000
O identificador de transação (XID) também pode ser obtido na própria sessão usando
select dbms_transaction.local_transaction_id from dual;
A espera no TX enq será vista em v$session_wait
P1:Nome|modo
P2:rbs3| wrap#
P3:slot#
Para resumir os bloqueios de linha DML
O primeiro DML em uma sessão em que uma transação ainda não existe criará implicitamente uma transação.
- Um número de segmento de desfazer, slot e wrap serão atribuídos
- O enfileiramento TX será instanciado
Quando uma linha a ser modificada for identificada, a sessão tomará uma entrada no ITL do bloco de dados, atribuindo-a à transação
- USN/SLOT/WRAP serão gravados no slot ITL, reservando esse slot para a transação atual
- O bloqueio será feito na linha, definindo o byte de bloqueio no diretório da linha para apontar para o slot ITL da transação atual
Tanto o TM quanto o TX Enqueue podem ser vistos em V$lock
- O tipo identifica TM ou TX
- ID1 e ID2 podem conter informações adicionais, mas são sensíveis ao contexto em relação ao TIPO de enfileiramento
- Para o enqueue de TM, ID1 é o OBJECT_ID do objeto que está sendo bloqueado, que pode ser referenciado em DBA_OBJECTS, e ID2 é sempre 0
- Para TX Enqueue, ID1 e ID2 mantêm o número do segmento de desfazer, o número do slot e o wrap
Exemplo detalhado para explicar o funcionamento das fechaduras oracle
- Crie a tabela fictícia
Create table from j as select * from dba_objects where rownum < 3; Table created Create table from j1 as select * from dba_objects where rownum < 3; Table created
- Sessão A
Select * from j for update;
Vamos ver o que está presente no v$lock
SQL> select distinct sid from v$mystat; SID ---------- 2125 SQL> select * from v$lock where sid=2125; ADDR KADDR SID TY ID1 ID2 LMODE ---------------- ---------------- ---------- -- ---------- ---------- ---------- REQUEST CTIME BLOCK ---------- ---------- ---------- 00000006B5D9D0D0 00000006B5D9D148 2125 TX 2883613 16425600 6 0 44 0 FFFFFFFF7DA4B360 FFFFFFFF7DA4B3C0 2125 TM 21488781 0 3 0 44 0
Então, vemos aqui
O bloqueio de tabela DML Oracle é criado
TX (bloqueio de transação) é criado
- Vamos iniciar a sessão B
SQL>Select * from j1 for update; SQL > select distinct sid from v$mystat; SID ---------- 2302 SQL> select * from v$lock where sid=2302; ADDR KADDR SID TY ID1 ID2 LMODE ---------------- ---------------- ---------- -- ---------- ---------- ---------- REQUEST CTIME BLOCK ---------- ---------- ---------- 00000006AF7FF910 00000006AF7FF988 2302 TX 2949148 16884039 6 0 10 0 FFFFFFFF7DA4B360 FFFFFFFF7DA4B3C0 2302 TM 33544 0 3 0 10 0 00000006DC289D60 00000006DC289DB8 2302 AE 15062272 0 4 0 106 0
Então, vemos aqui
O bloqueio de tabela DML é criado
TX (bloqueio de transação) é criado
Agora vamos tentar fazer
Select * from j for update;
Isso vai travar
- Vamos iniciar outra sessão para analisar o problema
Se você vir o sid da sessão =2032 detalhes em V$lock
select * from v$lock where sid=2302; ADDR KADDR SID TY ID1 ID2 LMODE ---------------- ---------------- ---------- -- ---------- ---------- ---------- REQUEST CTIME BLOCK ---------- ---------- ---------- FFFFFFFF7DA4B360 FFFFFFFF7DA4B3C0 2302 TM 33544 0 3 0 47 0 00000006DC289D60 00000006DC289DB8 2302 AE 15062272 0 4 0 143 0 00000006DC289808 00000006DC289860 2302 TX 2883613 16425600 0 6 7 0 FFFFFFFF7DA4B360 FFFFFFFF7DA4B3C0 2302 TM 21488781 0 3 0 7 0
A linha em negrito é a solicitação 6 (bloqueio exclusivo) em algum TX enq
Agora podemos usar a consulta abaixo para encontrar a sessão de bloqueio
select l1.sid, ' IS BLOCKING ', l2.sid from v$lock l1, v$lock l2 where l1.block =1 and l2.request > 0 and l1.id1=l2.id1 and l1.id2=l2.id2 SID 'ISBLOCKING' SID ---------- ------------- ---------- 2125 IS BLOCKING 2302
Agora podemos confirmar ou reverter a sessão 2125 para que a transação B continue. Podemos matar a sessão 2125 usando o comando abaixo também para liberar o bloqueio
Alter system kill session ‘2125,<serial>’;
Algumas informações adicionais
Os bloqueios TX em v$lock não informam as informações da linha em que a contenção está presente. Podemos ver essas coisas usando as consultas
A consulta abaixo precisa ser executada na sessão que está aguardando
SQL> select row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row# from v$session where sid=2302 ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW# ------------- -------------- --------------- ------------- 21488781 461 81063 0 select do.object_name, row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row#, dbms_rowid.rowid_create ( 1, ROW_WAIT_OBJ#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW# ) from v$session s, dba_objects do where sid=2302 and s.ROW_WAIT_OBJ# = do.OBJECT_ID ; OBJECT_NAME ROW_WAIT_OBJ# ROW_WAIT_FILE# ROW_WAIT_BLOCK# ROW_WAIT_ROW# DBMS_ROWID.ROWID_C ------------- -------------- --------------- ------------- ------------------ J 21488781 461 81063 0 ABR+SNAHNAAATynAAA SQL> Select * from j where rowid=’ ABR+SNAHNAAATynAAA’;
Artigos relacionados
Como funciona o bloqueio do Oracle
Como encontrar detalhes da sessão no banco de dados Oracle
Verificação importante da integridade do banco de dados
perguntas da entrevista do dba de aplicativos oracle
Consultas para verificar bloqueios no banco de dados oracle
dba do oracle Questões de entrevista
Cursos recomendados
A seguir estão alguns dos cursos recomendados que você pode comprar se quiser dar um passo adiante
Abaixo estão os links para alguns dos cursos
Oracle DBA 11g/12c – Administração de Banco de Dados para DBA Junior :Este curso é bom para pessoas que estão começando como DBA Junior ou aspiram ser DBA Oracle. Isso fornecerá uma boa compreensão das tarefas de backup e recuperação e administração geral
Oracle Database:Oracle 12C R2 RAC Administration :Este curso abrange a instalação e administração do Oracle RAC. Um bom curso para DBA Oracle que deseja atualizar suas habilidades para Oracle RAC
Oracle Data Guard:Administração de Banco de Dados para Oracle 12C R2 :Este curso abrange a instalação e administração do Oracle Dataguard. Um bom curso para Oracle DBA que deseja atualizar suas habilidades para Oracle Dataguard