軟件測試中oracle鎖表
lock table BO_ThreeYearInvestProgramHis in exclusive mode nowait;
一,鎖
為了防止用戶在同一時間并發地訪問和修改資源,ORACLE使用不同類型的鎖控制對數據的并發訪問,以防止用戶之間出現破壞性的交互操作
,oracle 為處理事務自動鎖定資源。
鎖在SQL語句開始它們與數據的相互作用時獲得,并在事務的整個過程中有效
oracle9i使用兩種鎖模式:
.獨占模式(排他):不允許其他任何并發會話以任何方式共享鎖定的資源,修改數據時需要這種鎖。
.共享模式:允許對同一塊數據的并發讀訪問。在更改數據時,上升為獨占模式
一)行級鎖
insert update delete 隱式加行鎖(排他)
select ... for update 顯示加行鎖(共享)
select ...for update 用于顯示鎖定將要更新的數據行,防止其他用戶在更新之前操作此行
如:select * from emp where deptno=30 for update
update emp set ename='Joke' where empno=7499;
在鎖釋放之前,其他用戶不可以對鎖定的數據行進行(修改,刪除)操作,查詢可以
假如有其他用戶要鎖定同一資源:可以使用wait 子句對鎖的等待時間控制
如: 在另一用戶中:select * from emp where deptno=30 for update wait 2 (等待2秒
如2秒鐘還未釋放資源,系統將會給出提示信息
二)表級鎖
共享模式(in share mode)
共享更新模式(in share update mode)
排他鎖模式
鎖定表的通用語法:
lock table 表名 in <share or share update or exclusive mode>;
1) 共享模式
不允許其他用戶插入,更新和刪除行,多個用戶可以同時在同一表上設置共享鎖,這樣設置鎖的多個用戶都只能執行查詢
lock table emp in share mode;
2)共享更新模式(in share update mode)
允許多個用戶同時鎖定表的不同行, 允許其他用戶進行DML(insert update delete select)操作 , 除了已鎖定的行
如: lock table emp in share update mode;
select * from emp where deptno=30 for update //鎖定的行
其他用戶不能delete ,update 部門30的雇員信息
其他用戶可以查看鎖定的行: select * from emp where deptno=30
3)排他鎖模式(限制性強)
不允許其他用戶插入,更新和刪除行, 允許查看數據,但只有一個用戶可以在表中放置排他鎖
lock table emp in exclusive mode;
三) 死鎖
如:USERA: lock table scott.emp in share mode;
USERB: lock table scott.emp in share mode ;
USERA: update scott.emp set ename='Smith' where empno=7369;
USERB: update scott.emp set job='CLERK' where empno=7521;
發生死鎖
原文轉自:http://www.anti-gravitydesign.com