1. 程式人生 > >Oracle行鎖、表鎖

Oracle行鎖、表鎖

DML鎖可以分為,行鎖、表鎖、死鎖

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

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

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

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

死鎖只能使用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/PL
SQL語句
時,ORACLE重新分析編譯此語句。