遇到鎖表 oracle如何解決鎖表問題

2021-10-16 08:04:19 字數 1505 閱讀 6362

oracle在日常開發過程中,或者業務上線使用過程中,我們會經常遇到鎖表問題,導致某乙個業務奔潰。這是因為當多個使用者同時操作乙個表時,或者同一條資料時,很容易發生鎖表的情況。這是,由於oracle資料庫為了保持資料的一致性,當某乙個使用者正在操作一條資料時,若忘記提交,另外乙個使用者又要對其進行修改時。由於上個操作未提交,導致下乙個修改操作一直處於等待狀態,當時間長了,就會導致鎖表情況的發生。

當我們出現鎖表時,新的修改事務發生時,會報下面的錯誤:

record is locked by another user;
或是出現某乙個修改業務長期處於卡死狀態,可以考慮是出現鎖表的可能性。可以通過資料字典v$session、v$locked_object等進行關聯查詢出正處於一直在執行的sql的sessionid和對應的sql語句。**如下:

檢視鎖表程序sql語句1:select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sesswhere ao.object_id = lo.object_id and lo.session_id = sess.sid;檢視鎖表程序sql語句2:select * from v$session t1, v$locked_object t2 where t1.sid = t2.session_id;
然後,通過查詢出來鎖表的sid和serial#對對應的session進行kill(殺死)。**如下:

alter system kill session 'sid,serial#';
案例:1、對學生資訊表(stuinfo)中學生「sc201801006」進行年齡的修改,但是忘記提交,如下:

2、然後,通過另外乙個視窗,對其進行update操作,修改其年級為「2019」,模擬鎖表情況,**如下:

3、發現,由於第乙個視窗為提交資料,導致update操作一直處於等待,這時我們通過鎖表語句查詢資料庫的是否存在鎖表情況,如下:

4、這時可以通過 kill語句殺死第乙個未提交的會話,或者主動對第乙個視窗的修改語句進行提交,即可解除鎖表情況。

​oracle效能優化的基本方法 - free教程

oracle常見的效能故障 - free教程

oracle如何解決鎖表問題

oracle如何解決鎖表問題 oracle在日常開發過程中,或者業務上線使用過程中,我們會經常遇到鎖表問題,導致某乙個業務奔潰。這是因為當多個使用者同時操作乙個表時,或者同一條資料時,很容易發生鎖表的情況。這是,由於oracle資料庫為了保持資料的一致性,當某乙個使用者正在操作一條資料時,若忘記提交...

oracle鎖錶該如何解決

廢話不多說 上語句 查詢鎖表語句 select object name,machine,s.sid,s.serial from v locked object l,dba objects o v session s where l程式設計客棧.object id o.object id and l....

Oracle的鎖表與如何解鎖

oracle的鎖表與如何解鎖 select rule s.username,decode l.type,tm table lock tx row lock null lock level,o.owner,o.object name,o.object type,s.sid,s.serial s.ter...