死結及oracle死結--轉載

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   io   資料   

今天看群裡在討論資料庫死結的問題,也一起研究了下,查了些資料在這裡總結下。


所謂死結: 是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死結狀態或系統產生了死結,這些永遠在互相等待的進程稱為死結進程。 由於資源佔用是互斥的,當某個進程提出申請資源後,使得有關進程在無外力協助下,永遠分配不到必需的資源而無法繼續運行,這就產生了一種特殊現象死結。 關於資料庫死結的檢查方法一、資料庫死結的現象程式在執行的過程中,點擊確定或儲存按鈕,程式沒有響應,也沒有出現報錯。 二、死結的原理當對於資料庫某個表的某一列做更新或刪除等操作,執行完畢後該條語句不提交,另一條對於這一列資料做更新操作的語句在執行的時候就會處於等待狀態,此時的現象是這條語句一直在執行,但一直沒有執行成功,也沒有報錯。 三、死結的定位方法通過檢查資料庫表,能夠檢查出是哪一條語句被死結,產生死結的機器是哪一台。 1)用dba使用者執行以下語句select username,lockwait,status,machine,program from v$session where sid in(select session_id from v$locked_object)如果有輸出的結果,則說明有死結,且能看到死結的機器是哪一台。欄位說明:Username:死結語句所用的資料庫使用者;Lockwait:死結的狀態,如果有內容表示被死結。Status: 狀態,active表示被死結Machine: 死結語句所在的機器。Program: 產生死結的語句主要來自哪個應用程式。2)用dba使用者執行以下語句,可以查看到被死結的語句。select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in(select session_id from v$locked_object)) 四、死結的解決方案一般情況下,只要將產生死結的語句提交就可以了,但是在實際的執行過程中。使用者可能不知道產生死結的語句是哪一句。可以將程式關閉並重新啟動就可以了。經常在Oracle的使用過程中碰到這個問題,所以也總結了一點解決方案。1)尋找死結的進程:sqlplus "/as sysdba" (sys/change_on_install)SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID; 2)kill掉這個死結的進程:alter system kill session ‘sid,serial#’; (其中sid=l.session_id) 3)如果還不能解決:select pro.spid from v$session ses,v$process pro where ses.sid=XX and ses.paddr=pro.addr; 其中sid用死結的sid替換: exitps -ef|grep spid 其中spid是這個進程的進程號,kill掉這個Oracle進程select A.SQL_TEXT, B.USERNAME, C.OBJECT_ID, C.SESSION_ID, B.SERIAL#, C.ORACLE_USERNAME,C.OS_USER_NAME,C.Process,‘‘‘‘||C.Session_ID||‘,‘||B.SERIAL#||‘‘‘ from v$sql A, v$session B, v$locked_object C where A.HASH_VALUE = B.SQL_HASH_VALUE and B.SID = C.Session_ID 

ORACLE鎖具體分為以下幾類:

1.按使用者與系統劃分,可以分為自動鎖與顯示鎖

自動鎖:當進行一項資料庫操作時,預設情況下,系統自動為此資料庫操作獲得所有有必要的鎖。

顯示鎖:某些情況下,需要使用者顯示的鎖定資料庫操作要用到的資料,才能使資料庫操作執行得更好,顯示鎖是使用者為資料庫對像設定的。

2.按鎖層級劃分,可分為共用鎖定與排它鎖

共用鎖定:共用鎖定使一個事務對特定資料庫資源進行共用訪問——另一事務也可對此資源進行訪問或獲得相同共用鎖定。共用鎖定為事務提供高並發性,但如拙劣的事務設計+共用鎖定容易造成死結或資料更新丟失。

排它鎖:事務設定排它鎖後,該事務單獨獲得此資源,另一事務不能在此事務提交之前獲得相同對象的共用鎖定或排它鎖。

3.按操作劃分,可分為DML鎖、DDL鎖

+DML鎖又可以分為,行鎖、表鎖、死結

-行鎖:當事務執行資料庫插入、更新、刪除操作時,該事務自動獲得操作 表中操作行的排它鎖。

- 表級鎖:當事務獲得行鎖後,此事務也將自動獲得該行的表鎖(共用鎖定),以 防止其它事務進行DDL語句影響記錄行的更新。事務也可以在進行 過程中獲得共用鎖定或排它鎖,只有當事務顯示使用LOCK TABLE語 句顯示的定義一個排它鎖時,事務才會獲得表上的排它鎖,也可使用

LOCK TABLE顯示的定義一個表級的共用鎖定(LOCK TABLE具體用法請參 考相關文檔)。

-死結:當兩個事務需要一組有衝突的鎖,而不能將事務繼續下去的話,就 出現死結。

如事務1在表A行記錄#3中有一排它鎖,並等待事務2在表A中記錄#4 中排它鎖的釋放,而事務2在表A記錄行#4中有一排它鎖,並等待事務 1在表A中記錄#3中排它鎖的釋放,事務1與事務2彼此等待,因此就造 成了死結。死結一般是因拙劣的事務設計而產生。

 

對於查詢哪些人或進程被鎖使用如下SQL:

 

SELECT OBJECT_ID,SESSION_ID,SERIAL# ,a.oracle_username,a.os_user_name,a.process

 FROM V$LOCKED_OBJECT a , 

V$SESSION  WHERE a.SESSION_ID=SID;

 

解鎖能使用SQL下:alter system kill session ‘sid,serial#‘;

或者使用相關作業系統kill進程的命令,如UNIX下kill -9 sid,或者 使用其它工具殺掉死結進程。

+DDL鎖又可以分為:排它DDL鎖、共用DDL鎖、分析鎖

-排它DDL鎖:建立、修改、刪除一個資料庫物件的DDL語句獲得操作對象的 排它鎖。

如使用alter table語句時,為了維護資料的完成性、一致性、

合法性,該事務獲得一排它DDL鎖。

-共用DDL鎖:需在資料庫對像之間建立相互依賴關係的DDL語句通常需共用

獲得DDL鎖。

如建立一個包,該包中的過程與函數引用了不同的資料庫表,

當編譯此包時,該事務就獲得了參考資料表的共用DDL鎖。

-分析鎖:ORACLE使用共用池儲存分析與最佳化過的SQL語句及PL/SQL程式,使

運行相同語句的應用速度更快。一個在共用池中緩衝的對象獲得

它所引用資料庫物件的分析鎖。分析鎖是一種獨特的DDL鎖類型,

ORACLE使用它追蹤共用池對象及它所引用資料庫對像之間的依賴 關係。當一個事務修改或刪除了共用池持有分析鎖的資料庫對像

時,ORACLE使共用池中的對象作廢,下次在引用這條SQL/PLSQL語 句時,ORACLE重新分析編譯此語句。

4.內部閂鎖

內部閂鎖:這是ORACLE中的一種特殊鎖,用於順序訪問內部系統結構。

當事務需向緩衝區寫入資訊時,為了使用此塊記憶體地區, ORACLE首先必須取得這塊記憶體地區的閂鎖,才能向此塊記憶體寫入資訊。

 原文地址及參考文章http://xinxiangsui2018.blog.163.com/blog/static/106097856201010304532280/http://www.cnblogs.com/highriver/archive/2011/04/06/2006684.html另外百度百科介紹的也比較詳細http://baike.baidu.com/view/121723.htm
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.