oracle加鎖方式,oracle中加鎖與解鎖


oracle中的數據在並發操作時,為了防止錯誤的發生可以進行記錄或者數據庫表的加鎖操作。當鎖操作完成時可以進行解鎖操作。

數據庫中加鎖有兩種方式,獨占模式和共享模式。

  1.獨占模式,不允許其他會話以任何方式共享鎖定資源,當進行數據庫數據修改時可以使用這種模式。

  2.共享模式,允許在數據訪問時,並發共同訪問,但是當修改數據時上升為獨占模式。

鎖分為行級鎖和表級鎖,行級鎖是鎖定某些行記錄,表級鎖是鎖定整張表。

1.行級鎖。

  insert update delete (隱式加行鎖)

  select...for update(顯示加行鎖,共享模式)

  select * from emp where deptno=30 for update

  select * from A where id=2 for update skip locked

  update emp set ename='Joke' where empno=7499;在釋放鎖之前其他用戶只能對進行數據查詢,不能對數據進行insert、delete和update。

  假如有其他用戶要鎖定同一資源:可以使用wait 子句對鎖的等待時間控制 如: 在另一用戶中:select * from emp where deptno=30 for update wait 2 (等待2秒 如2秒鍾還未釋放資源,系統將會給出提示信息。

2.表級鎖。

  共享模式(in share mode)

  共享更新模式(in share update mode) 排他鎖模式 鎖定表的通用語法:

  lock table 表名 in ;

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;

解鎖:

(1)鎖表查詢的代碼有以下的形式:

  select count(*) from v$locked_object;

  select * from v$locked_object;

(2)查看哪個表被鎖

  select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

(3)查看是哪個session引起的

  select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;

(4)殺掉對應進程

  執行命令:alter system kill session'1025,41';

  其中1025為sid,41為serial#.

 

參考資料 https://blog.csdn.net/czh500/article/details/89077168


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM