首頁 > 常見問題 > 主體

oracle怎麼查看鎖表的原因

小老鼠
發布: 2023-07-05 15:09:45
原創
2868 人瀏覽過

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

oracle怎麼查看鎖表的原因

本教學作業系統:windows10系統、Oracle 19c版本、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怎麼查看鎖表的原因的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!