oracle中的資料在併發操作時,為了防止錯誤的發生可以進行記錄或者資料庫表的加鎖操作。當鎖操作完成時可以進行解鎖操作。
資料庫中加鎖有兩種方式,獨佔模式和共享模式。
1.獨佔模式,不允許其他會話以任何方式共享鎖定資源,當進行資料庫資料修改時可以使用這種模式。
2.共享模式,允許在資料訪問時,併發共同訪問,但是當修改資料時上公升為獨佔模式。
鎖分為行級鎖和表級鎖,行級鎖是鎖定某些行記錄,表級鎖是鎖定整張表。
1.行級鎖。
insert update delete (隱式加行鎖)
select...for update(顯示加行鎖,共享模式)
select * from emp where deptno=30 for update
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#.
Oracle 使用者加鎖與解鎖
檢視使用者狀態 以sysdba身份登入sqlplus sqlplus as sysdba 查詢指定使用者狀態 使用者名稱需要大寫 select username,account status from dba users where username abc 狀態顯示為open,表示使用者狀態正常。...
REDIS中加鎖和解鎖問題
在電商活動中,經常會有 秒殺 的搶購活動,這種場景,伺服器通常面臨高併發的請求處理。也就是說,在同一時間,會有大量併發的使用者同時去購買某個商品,這時候,就需要保證不會出現過度 的情況 使用者最終購買的商品數量超過實際的商品數量 這裡就需要應用到redis中加鎖和解鎖的特性來保證每次的購物操作只有乙...
UNIX作業系統中加鎖和解鎖
unix作業系統加鎖和解鎖的基本思想是,當某個程序進入臨界區,它將持有乙個某種型別的鎖 unix裡一般來說是semaphore,linux裡一般是訊號量和原子量或者spinlock 當其他程序在該程序沒有釋放該鎖時試圖進入臨界區 加鎖 它將會被設定成睡眠狀態,然後被置入等待該鎖的程序佇列 某個優先順...