oracle鎖表的原因是什么

oracle中,鎖表的原因是當一個程序執行了對一個表的insert,并且還未commite時,另一個程序也對同一個表進行insert,則此時就會發生資源正忙的異常,也就是鎖表。

oracle鎖表的原因是什么

本教程操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。

oracle鎖表的原因是什么

主要的鎖表原因有:?

(1) A程序執行了對 tableA 的 insert ,并還未 commite時,B程序也對tableA 進行insert 則此時會發生資源正忙的異常 就是鎖表

(2)鎖表常發生于并發而不是并行(并行時,一個線程操作數據庫時,另一個線程是不能操作數據庫的,cpu 和i/o 分配原則)

減少鎖表的概率方法:

(1)減少insert 、update 、delete 語句執行 到 commite 之間的時間。具體點批量執行改為單個執行、優化sql自身的非執行速度

(2)如果異常對事物進行回滾

鎖表原因可能是修改了行數據,忘了提交,也會造成鎖表。

一. 鎖表建議先查原因再做決定。

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.查看是哪個sql引起的

select?b.username,b.sid,b.serial#,c.*?from?v$locked_object?a,v$session?b,v$sql?c?where?a.session_id?=?b.sid and?b.SQL_ID?=?c.sql_id?and?c.sql_id?=?'' order?by?b.logon_time;

5.殺掉對應進程

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

其中1025為sid,41為serial#.

二. Oracle 用戶經常被鎖原因

在登陸時提示:test用戶被鎖

1、用dba角色的用戶登陸,進行解鎖,先設置具體時間格式,以便查看具體時間

SQL>?alter?session?set?nls_date_format=‘yyyy-mm-dd?hh24:mi:ss’;

Session altered.

2、查看具體的被鎖時間

SQL>?select?username,lock_date?from?dba_users?where?username='TEST'; USERNAME?LOCK_DATE ------------------------------?------------------- TEST?2021-03-10?08:51:03

3、解鎖

SQL>?alter?user?test?account?unlock;

User altered.

推薦教程:《Oracle視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享