欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
[轉]Oracle事務(wù)、鎖表查詢(xún)及相關(guān)實(shí)用查詢(xún)SQL語(yǔ)句

[轉]Oracle事務(wù)、鎖表查詢(xún)及相關(guān)實(shí)用查詢(xún)SQL語(yǔ)句

(2010-05-13 16:43:58)
標簽:

oracle

常用

sql

it

分類(lèi):Database

Oracle事務(wù)、鎖表查詢(xún)及相關(guān)實(shí)用查詢(xún)SQL語(yǔ)句

文章分類(lèi):數據庫

    最近一個(gè)項目中發(fā)現了一個(gè)嚴重的問(wèn)題,就是系統上線(xiàn)的回歸測試時(shí)發(fā)現系統存在鎖表的問(wèn)題,直接導致事務(wù)不能結束(提交貨品回滾),最終造成連接得不到釋放,進(jìn)而當開(kāi)啟的連接超過(guò)連接池的最大連接數時(shí),系統將提示獲取不到連接,從而崩潰!

 

    一般的系統采用的都是Spring提供的聲明式事務(wù)。而我們系統由于歷史遺留問(wèn)題,采用了offbiz的基于模型配置的架構體系,此套體系中事務(wù)的開(kāi)啟以及關(guān)閉都是通過(guò)編程式事務(wù)完成。編程式事務(wù)在事務(wù)范圍控制方面比較靈活,但是在靈活的同時(shí)也存在潛在的風(fēng)險。如果事務(wù)開(kāi)啟后沒(méi)有正常結束,那么事務(wù)也就會(huì )一直占用連接而得不到釋放。雖然可以通過(guò)設置事務(wù)超時(shí)值從而在事務(wù)超時(shí)殺掉事務(wù)釋放連接,這種方式個(gè)人覺(jué)得還是存在一定得不可控性。所以對于編程式事務(wù)的使用,還應該注意一下幾點(diǎn):

 

    第一點(diǎn),有開(kāi)有關(guān):事務(wù)管理層有事務(wù)開(kāi)啟必須有事務(wù)關(guān)閉,可以通過(guò)設置事務(wù)旗標在finally中進(jìn)行事務(wù)管理;示意性代碼如下:

 

    第二點(diǎn),單一出口:即一個(gè)方法的renturn只有一處,異常情況通過(guò)throw 拋出,確保最外層事務(wù)管理層能夠通過(guò)捕獲到得異??刂剖聞?wù)狀態(tài)(提交或回滾)。

 

    第三點(diǎn),設置事務(wù)超時(shí):事務(wù)執行超過(guò)指定時(shí)間,強制殺掉事務(wù),關(guān)閉連接,從而確保其他業(yè)務(wù)不會(huì )應為該事務(wù)鎖定相關(guān)業(yè)務(wù)表而阻塞而導致惡性循環(huán)。

 

    如果懷疑表被鎖了,或者事務(wù)未被正常關(guān)閉,在Oracle數據庫中我們可以通過(guò)以下語(yǔ)句進(jìn)行查詢(xún)獲取相關(guān)信息:

 

Sql代碼
  1. select t2.username,   
  2.        t2.sid,   
  3.        t2.serial#,   
  4.        t3.object_name,   
  5.        t2.OSUSER,   
  6.        t2.MACHINE,   
  7.        t2.PROGRAM,   
  8.        t2.LOGON_TIME,   
  9.        t2.COMMAND,   
  10.        t2.LOCKWAIT,   
  11.        t2.SADDR,   
  12.        t2.PADDR,   
  13.        t2.TADDR,   
  14.        t2.SQL_ADDRESS,   
  15.        t1.LOCKED_MODE   
  16.   from v$locked_object t1, v$session t2, dba_objects t3   
  17.  where t1.session_id t2.sid   
  18.    and t1.object_id t3.object_id   
  19.  order by t2.logon_time;  
select t2.username, t2.sid, t2.serial#, t3.object_name, t2.OSUSER, t2.MACHINE, t2.PROGRAM, t2.LOGON_TIME, t2.COMMAND, t2.LOCKWAIT, t2.SADDR, t2.PADDR, t2.TADDR, t2.SQL_ADDRESS, t1.LOCKED_MODE from v$locked_object t1, v$session t2, dba_objects t3 where t1.session_id = t2.sid and t1.object_id = t3.object_id order by t2.logon_time;

 

 

    大家發(fā)現,上面這條SQL語(yǔ)句用到了Oracle的兩個(gè)視圖和一個(gè)表,分別是v$locked_object、v$session、dba_objects:

     v$locked_object 視圖中記錄了所有session中的所有被鎖定的對象信息。

     v$session 視圖記錄了所有session的相關(guān)信息。

     dba_objects 為oracle用戶(hù)對象及系統對象的集合,通過(guò)關(guān)聯(lián)這張表能夠獲取被鎖定對象的詳細信息。

 

     v$locked_object中的LOCKED_MODE字段表示鎖的模式,oracle中鎖的模式有如下幾種:

 

     0:none
    1:null 空 
    2:Row-S 行共享(RS):共享表鎖,sub share 
    3:Row-X 行獨占(RX):用于行的修改,sub exclusive 
    4:Share 共享鎖(S):阻止其他DML操作,share
    5:S/Row-X 共享行獨占(SRX):阻止其他事務(wù)操作,share/sub exclusive 
    6:exclusive 獨占(X):獨立訪(fǎng)問(wèn)使用,exclusive

 

數字越大鎖級別越高, 影響的操作越多。

1級鎖有:Select,有時(shí)會(huì )在v$locked_object出現。
2級鎖有:Select for update,Lock For Update,Lock Row Share 
select for update當對話(huà)使用for update子串打開(kāi)一個(gè)游標時(shí),所有返回集中的數據行都將處于行級(Row-X)獨占式鎖定,其他對象只能查詢(xún)這些數據行,不能進(jìn)行update、delete或select for update操作。
3級鎖有:Insert, Update, Delete, Lock Row Exclusive
沒(méi)有commit之前插入同樣的一條記錄會(huì )沒(méi)有反應, 因為后一個(gè)3的鎖會(huì )一直等待上一個(gè)3的鎖, 我們必須釋放掉上一個(gè)才能繼續工作。
4級鎖有:Create Index, Lock Share
locked_mode為2,3,4不影響DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作會(huì )提示ora-00054錯誤。
00054, 00000, "resource busy and acquire with NOWAIT specified"
// *Cause: Resource interested is busy.
// *Action: Retry if necessary.
5級鎖有:Lock Share Row Exclusive 
具體來(lái)講有主外鍵約束時(shí)update delete ... 可能會(huì )產(chǎn)生4,5的鎖。
6級鎖有:Alter table, Drop table, Drop Index, Truncate table, Lock Exclusive

 

     附上幾條簡(jiǎn)單的oracle系統查詢(xún)語(yǔ)句:

 

--查某session 正在執行的sql語(yǔ)句,從而可以快速定位到哪些操作或者代碼導致事務(wù)一直進(jìn)行沒(méi)有結束等.
SELECT
 sql_text
  FROM v$sqltext a
 WHERE (a.hash_value, a.address) IN
       (SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value),
               DECODE(sql_hash_value, 0, prev_sql_addr, sql_address)
          FROM v$session b
         WHERE b.sid = '233')  
 ORDER BY piece ASC;
 
 
--查進(jìn)程.

select * from v$process ;

 
--查縮
   select * from v$lock;
 
--查縮定的對象
select * from v$locked_object
 
--查事務(wù)
select * from v$transaction
 
--查session
 select v.* from v$session v where machine='xxx' and username='xxx' and status='INACTIVE' order by last_call_et desc
 
--查dba_objects對象
select * from dba_objects
where object_id = '14977'
 
--查縮定的表
 select t2.username,t2.sid,t2.serial#,t3.object_name,t2.OSUSER,t2.MACHINE,t2.PROGRAM,t2.COMMAND,t2.LAST_CALL_ET
        from v$locked_object t1,v$session t2 ,dba_objects t3
        where t1.session_id=t2.sid  and t1.object_id = t3.object_id
        order by t2.logon_time;
 
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
oracle問(wèn)題之死鎖 (一)
Oracle包被鎖定的原因分析及解決方案
批量解決Oracle鎖等待的方法
oracle修改數據時(shí)發(fā)現記錄被另一個(gè)用戶(hù)鎖住了怎么解決
oracle的鎖表與解鎖
ORACLE鎖表原因查詢(xún)和解決辦法
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久