成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

干貨 | Oracle數據庫有把TX鎖,如何定位鎖在哪?

數據庫 Oracle
數據庫包含排它鎖(Exclusive Locks,即X鎖)和共享鎖(Share Locks,即S鎖)兩種基本的鎖類型,利用這兩種基本的鎖類型來對數據庫的事務進行并發控制。

[[220269]]

數據庫是一個多用戶使用的共享資源,為了保證數據的一致性,加鎖是實現數據庫并發控制的一個非常重要的技術。當事務在對某個數據對象進行操作前,先向系統發出請求,對其加鎖,加鎖后事務就對該數據對象有了一定的控制,在該事務釋放鎖之前,其他的事務不能對此數據對象進行更新操作。

數據庫包含排它鎖(Exclusive Locks,即X鎖)和共享鎖(Share Locks,即S鎖)兩種基本的鎖類型,利用這兩種基本的鎖類型來對數據庫的事務進行并發控制。ORACLE數據庫根據保護的對象不同,將Oracle數據庫鎖分為以下幾大類:DML鎖(data locks,數據鎖),用于保證并發情況下的數據完整性;DDL鎖(dictionary locks,字典鎖),用于保護數據庫對象的結構,如表、索引等的結構定義;內部鎖和閂(internal locks and latches),保護數據庫的內部結構。

這里我們只討論DML鎖。在Oracle數據庫中,DML鎖主要包括TM鎖和TX鎖,其中TM鎖稱為表級鎖,TX鎖稱為事務鎖或行級鎖。當Oracle 執行DML語句時,系統自動在所要操作的表上申請TM類型的鎖。當TM鎖獲得后,系統再自動申請TX類型的鎖,并將實際鎖定的數據行的鎖標志位進行置位。

在數據行上只有X鎖(排他鎖)。在 Oracle數據庫中,當一個事務***發起一個DML語句時就獲得一個TX鎖,該鎖保持到事務被提交或回滾。當兩個或多個會話在表的同一條記錄上執行 DML語句時,***個會話在該條記錄上加鎖,其他的會話處于等待狀態。當***個會話提交后,TX鎖被釋放,其他會話才可以加鎖。

當Oracle數據庫發生TX鎖等待時,若處理不及時常會引起Oracle數據庫掛起或死鎖,產生ORA-00060的錯誤,導致應用出現長時間未響應、大量事務失敗等問題。

如何處理TX鎖等待

當數據庫中發生enq: TX - row lock contention行級鎖等待時,可以查詢v$session.blocking_session列或v$lock視圖來找到阻塞源,通過kill阻塞源來快速使業務恢復正常。

如何定位TX鎖具體行數據

在某些情況下,用戶想要了解經常發生TX鎖等待的具體是哪些數據。下面來展示如何獲取TX鎖的具體行數據。

1、SQL語句中沒有使用綁定變量

Session 1:

 

  1. SQL> update t1 set b=10 where a=3; 

Session 2:

 

  1. SQL> update t1 set b=99 where a=3; 

此時,可以通過v$sql和v$session視圖聯合查詢來獲取具體行數據:

 

  1. select sql_text from v$sql a,v$session b where a.sql_id=b.sql_id and b.event='enq: TX - row lock contention'

可以得知t1表中a=3的行發生TX鎖等待

2、SQL語句中使用綁定變量

Session 1:

 

  1. SQL> variable v_a number; 
  2. SQL> exec :v_a :=3;
  3. SQL> update t1 set b=10 where a=:v_a;

Session 2:

 

  1. SQL> variable v_a number;  
  2. SQL> exec :v_a :=3;  
  3. SQL> update t1 set b=99 where a=:v_a; 

 

通過v$sql和v$session聯合查詢:

 

  1. select sql_text from v$sql a,v$session b where a.sql_id=b.sql_id and b.event='enq: TX - row lock contention'

可以發現得到的是帶有變量的SQL,無法定位具體的行。

此時可以通過以下SQL得到具體鎖行信息:

 

  1. SELECT row_wait_obj#, row_wait_file#, row_wait_block#, row_wait_row#  
  2. FROM v$session  
  3. WHERE event='enq: TX - row lock contention'

這4個列所代表的意思如下:

object_id為14255的對象,在4號文件的133塊中的第1行數據中發生等待(數據是從0行開始的)

根據object_id得到表名和data_object_id

 

  1. SQL> select owner||'.'||object_name tab_name ,data_object_id from dba_objects where object_id=14255;  
  2. TEST.T1   14296 

再通過函數ROWID_CREATE轉換得到ROWID

 

  1. SQL> select dbms_rowid.ROWID_CREATE(1, 14296,4,133,1) from dual;  ---14296指的是dba_objects.data_object_id  
  2. AAADfYAAEAAAACFAAB 
  3.  
  4. SQL> select * from TEST.T1 where rowid='AAADfYAAEAAAACFAAB' 
  5. A  B  
  6. 3  4 

 

可以發現,發生鎖等待的正是此行數據。

注:此種方法同樣適用于沒有使用綁定變量情況

如何避免TX鎖等待

避免使用select for update方式查詢數據

修改完數據后盡可能盡快提交

需要修改大量數據時,避免在業務高峰期間進行;如果可能,拆分成多個事務分批修改提交

附(dbms_rowid.ROWID_CREATE函數)

關于dbms_rowid.ROWID_CREATE函數,需要注意的是其中OBJECT_NUMBER的輸入值是dba_objects.data_object_id。

 

  1. FUNCTION ROWID_CREATE RETURNS ROWID 
  2.  
  3. Argument Name         Type              In/Out Default
  4.  
  5. ------------------------------ ----------------------- ------ -------- 
  6.  
  7. ROWID_TYPE                 NUMBER                 IN 
  8.  
  9. OBJECT_NUMBER          NUMBER                 IN  
  10.  
  11. RELATIVE_FNO              NUMBER                  IN 
  12.  
  13. BLOCK_NUMBER            NUMBER                 IN 
  14.  
  15. ROW_NUMBER               NUMBER                 IN  

 

責任編輯:龐桂玉 來源: ITPUB
相關推薦

2010-04-22 09:42:00

2011-08-18 13:44:42

Oracle悲觀鎖樂觀鎖

2010-04-19 16:01:54

2017-12-26 15:10:30

數據庫Oracle操作語句

2011-04-13 14:58:16

Oracle數據庫刪除

2009-11-20 14:08:39

Oracle數據庫備份

2011-05-19 13:25:12

Oracle數據庫碎片

2011-05-17 14:34:24

2023-09-05 08:40:57

刪除數據庫Oracle

2011-04-12 10:59:46

Oracle數據庫

2011-08-15 21:42:57

Oracle數據庫不能使用索引

2010-04-13 10:42:08

Oracle數據庫

2011-03-17 16:35:20

Oracle數據庫段管理

2020-08-03 11:52:31

Oracle數據庫

2011-03-23 17:10:41

ACCESSSQL數據庫

2011-03-17 16:19:42

Oracle數據庫管理

2010-04-29 11:53:42

Oracle數據庫

2010-05-05 14:44:50

Oracle數據庫

2011-08-02 17:06:29

Oracle遠程數據庫創建DB Link

2010-04-22 11:58:00

Oracle數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区二区在线观看 | 手机在线一区二区三区 | 日韩欧美中文 | 成年人视频在线免费观看 | 午夜电影福利 | 羞羞羞视频 | 日韩影音 | 精品无码三级在线观看视频 | 精品91久久| 99国产视频 | 夜夜精品浪潮av一区二区三区 | 成人一区二区三区 | 国产区在线 | 国产夜恋视频在线观看 | 91伊人| 欧美成人精品在线 | 精品日韩一区二区 | 国产成人精品免高潮在线观看 | 国产91久久久久久久免费 | 久久网站免费视频 | 成人在线免费电影 | 欧美a在线观看 | 最新毛片网站 | 999www视频免费观看 | www.日日干 | 国产高潮av | 国产精品一区二区三 | 一级做a爰片性色毛片视频停止 | 精品国产欧美一区二区 | 久久在视频 | 午夜精品久久久 | 国产美女视频 | 欧美日韩视频在线播放 | 国产精品亚洲综合 | www.99精品 | 国产精品永久久久久 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 一级黄色在线 | 久久精品视频网站 | 亚洲精品久久久久久国产精华液 | 精品国产精品 |