insert引起的死鎖,起因主鍵衝突
參考: ... AD%BB%E9%94%81.html
原因: 當ORACLE執行insert等DML語句時,會首先自動在所要操作的表上申請一個TM鎖,當TM鎖獲得後,再自動申請TX型別的鎖。當兩個或多個會話在表的同一條記錄上執行DML語言時,第一個會話在記錄上加鎖,其它的會話處於等待狀態,一直到第一個會話提交後TX鎖釋放,其它的會話才可以加鎖。考慮是因為兩個insert語句同時試圖向一個表中插入PK或unique值相同的資料,而造成其中會話被阻塞,等待其它會話提交或回滾,因而造成死鎖。這種情況,只要其中任何一個session提交,另外一個就會報出ORA-00001:違反唯一性約束條件,死鎖終止;或者其中一個session回滾,另外一個即可正常執行。(--引惜分飛部落格)
模擬:
session 1
insert into t2 values(1,'aaa'); |
session 2
insert into t2 values(2,'aaa'); |
session 1
insert into t2 values(2,'aaa'); |
session 2
insert into t2 values(1,'aaa'); |
錯誤浮現
SQL> insert into t2 values(2,'aaa'); insert into t2 values(2,'aaa') * ERROR at line 1: ORA-00060: deadlock detected while waiting for resource |
trace檔案:
Deadlock graph: ---------Blocker(s)-------- ---------Waiter(s)--------- Resource Name process session holds waits process session holds waits TX-0001001d-00000310 34 42 X 32 49 S TX-000a0002-0000030b 32 49 X 34 42 S session 42: DID 0001-0022-00000008 session 49: DID 0001-0020-00000008 session 49: DID 0001-0020-00000008 session 42: DID 0001-0022-00000008 Rows waited on: Session 42: no row Session 49: no row ----- Information for the OTHER waiting sessions ----- Session 49: sid: 49 ser: 11 audsid: 240013 user: 80/SCOTT flags: (0x45) USR/- flags_idl: (0x1) BSY/-/-/-/-/- flags2: (0x40009) -/-/INC pid: 32 O/S info: user: oracle, term: UNKNOWN, ospid: 1798 image: oracle@sol11node151 (TNS V1-V3) client details: O/S info: user: oracle, term: pts/1, ospid: 1794 machine: sol11node151 program: sqlplus@sol11node151 (TNS V1-V3) application name: SQL*Plus, hash value=3669949024 current SQL: insert into t2 values(1,'aaa') ----- End of information for the OTHER waiting sessions ----- Information for THIS session: ----- Current SQL Statement for this session (sql_id=1qrs504d5jrg1) ----- insert into t2 values(2,'aaa') |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28572479/viewspace-2168935/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 主鍵衝突引發的死鎖
- MySQL insert on duplicate key update 死鎖MySql
- oracle 序列值導致的主鍵衝突問題Oracle
- 故障分析 | 從 Insert 併發死鎖分析 Insert 加鎖原始碼邏輯原始碼
- InnoDB鎖衝突案例演示
- sysbench花式採坑之二:自增值導致的主鍵衝突
- 關於SVN update之後,引起衝突的解決方法
- MySQL死鎖案例分析一(先delete,再insert,導致死鎖)MySqldelete
- 【MySQL】gh-ost改雙主表結構主鍵衝突問題MySql
- cad快捷鍵和win10衝突怎麼辦_cad快捷鍵和win10衝突的解決方法Win10
- windows10玩遊戲鍵盤衝突怎麼辦 win10遊戲與鍵盤衝突解決方法Windows遊戲Win10
- MySql插入唯一鍵衝突的三種可選方式MySql
- [20200107]vim 按鍵與金山詞霸衝突.txt
- 作業系統(5) 死鎖的概念 死鎖產生的必要條件 死鎖的處理策略 預防死鎖 避免死鎖 死鎖的檢測和解除 銀行家演算法作業系統演算法
- flutter dialog中軟鍵盤遮擋解決衝突Flutter
- mysql insert into ... select的鎖問題MySql
- 解衝突用到的命令
- mysql insert導致死鎖MySql
- 雜湊衝突
- 死鎖
- 外來鍵欄位未建索引引發的死鎖索引
- 鎖的使用與死鎖的避免
- 部落衝突-解鎖戰寵小屋 開啟戰寵系統
- 面試:什麼是死鎖,如何避免或解決死鎖;MySQL中的死鎖現象,MySQL死鎖如何解決面試MySql
- Git 衝突了怎麼辦,如何高效快速的解決程式碼衝突?Git
- MySQL:一個死鎖分析 (未分析出來的死鎖)MySql
- 埠衝突,可愛的8080
- Java 中的死鎖Java
- SQL Server 的死鎖SQLServer
- SQLServer的死鎖分析(1):頁鎖SQLServer
- 什麼是死鎖?如何解決死鎖?
- Docker預設網段和主機網段衝突解決Docker
- IIS子目錄web.config與主站衝突解決方法Web
- [20180801]insert導致死鎖.txt
- 英雄戰寵解鎖-部落衝突14級大本營全面上線
- lvm 名稱衝突LVM
- git 解決衝突Git
- Git 解決衝突Git