oracle鎖定表情況有:1、A程式執行了對tableA的insert,並還未commite時,B程式也對tableA進行insert則此時會發生資源正忙的異常,就是鎖定表;2.鎖表常發生於並發而不是並行,並行時,當一個執行緒操作資料庫時,另一個執行緒是不能操作資料庫的,cpu和i/o分配原則。
本教學操作環境:Windows10系統、Oracle 19c版、Dell G3電腦。
主要的鎖定表原因有:
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:033、解鎖
SQL> alter user test account unlock;User altered.
以上是oracle什麼情況下鎖表的詳細內容。更多資訊請關注PHP中文網其他相關文章!