2012-05-14 22 views
6

Khi Oracle phát hiện một bế tắc, một tập tin dấu vết như thế này có chép rằng:Làm thế nào tôi có thể xác định các hàng liên quan đến một bế tắc của Oracle?

*** SESSION ID:(56.27081) 2012-05-14 08:16:28.013 
DEADLOCK DETECTED (ORA-00060) 
[Transaction Deadlock] 
The following deadlock is not an ORACLE error. It is a 
deadlock due to user error in the design of an application 
or from issuing incorrect ad-hoc SQL. The following 
information may aid in determining the deadlock: Deadlock graph: 
         ---------Blocker(s)-------- ---------Waiter(s)--------- 
Resource Name   process session holds waits process session holds waits 
TX-0010002c-002719b5  146  56  X   164  44   X 
TX-000f002a-002edd1e  164  44  X   146  56   X 
session 56: DID 0001-0092-00050D0D  session 44: DID 0001-00A4-0002E3C2 
session 44: DID 0001-00A4-0002E3C2  session 56: DID 0001-0092-00050D0D 
Rows waited on: 
Session 44: obj - rowid = 00035157 - AAA1FXAAxAAASfLAAn 
    (dictionary objn - 217431, file - 49, block - 75723, slot - 39) 
Session 56: obj - rowid = 00035157 - AAA1FXAAsAACjuiAAP 
    (dictionary objn - 217431, file - 44, block - 670626, slot - 15) 

Làm thế nào tôi có thể xác định các hàng tham gia dựa trên các thông tin trên để hỗ trợ cho việc gỡ lỗi các ứng dụng?

Trả lời

12

Tôi tìm thấy câu trả lời:

  1. Số sau dictionary objn có thể được sử dụng để chọn ra khỏi DBA_objects.

    SELECT owner, object_name, object_type 
    FROM dba_objects 
    WHERE object_id = 217431; 
    
  2. Khi bảng được xác định, hàng có thể được tìm thấy bằng cách sử dụng rowid:

    SELECT * 
    FROM table_found_above 
    WHERE rowid = 'AAA1FXAAxAAASfLAAn'; 
    

Nếu các dấu vết tập tin nói rằng không có "Hàng đợi vào" kỹ thuật này sẽ không làm việc. Vấn đề có thể là do một khóa ngoại không được lập chỉ mục.

Các vấn đề liên quan