oracle中加鎖與解鎖

2021-06-26 18:20:07 字數 1826 閱讀 6432

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 當其他程序在該程序沒有釋放該鎖時試圖進入臨界區 加鎖 它將會被設定成睡眠狀態,然後被置入等待該鎖的程序佇列 某個優先順...