oracle數(shù)據(jù)庫查看鎖表的sql語句整理
關(guān)鍵表
V$LOCKED_OBJECT
:記錄鎖信息的表v$session
:記錄會(huì)話信息的表v$sql
:記錄執(zhí)行sql的表dba_objects
:用來管理對(duì)象(表、庫等等對(duì)象)
查看鎖表的SID
sql1
SELECT USERNAME,SID, LOCKWAIT, STATUS, MACHINE, PROGRAM FROM v$session WHERE sid IN (SELECT session_id FROM v$locked_object);
sql2
SELECT sess.SID, sess.SERIAL#, lo.ORACLE_USERNAME, lo.OS_USER_NAME, lo.LOCKED_MODE, ao.OBJECT_NAME FROM V$LOCKED_OBJECT lo, v$session sess, dba_objects ao WHERE lo.SESSION_ID = sess.SID AND ao.OBJECT_ID = lo.OBJECT_ID;
- USERNAME:死鎖語句所用的數(shù)據(jù)庫用戶;
- SID: session_id
- LOCKWAIT:死鎖的狀態(tài),如果有內(nèi)容表示被死鎖。
- STATUS:狀態(tài),active表示被死鎖
- MACHINE:死鎖語句所在的機(jī)器。
- PROGRAM:產(chǎn)生死鎖的語句主要來自哪個(gè)應(yīng)用程序。
查看鎖表執(zhí)行語句
用sid查詢單個(gè)
SELECT sql_text FROM v$sql WHERE hash_value IN (SELECT sql_hash_value FROM v$session WHERE sid='XXXXXXXX');
查詢所有加鎖的sql
SELECT sql_text FROM v$sql WHERE hash_value IN (SELECT sql_hash_value FROM v$session WHERE sid IN (SELECT session_id FROM v$locked_object));
查詢未提交事務(wù)的SQL
造成死鎖的sql事務(wù)都必定是未提交的
SELECT s.SID, s.USERNAME, s.OSUSER, s.PROGRAM, TO_CHAR(s.LOGON_TIME, 'yyyy-mm-dd hh24:mi:ss') AS LOGON_TIME, TO_CHAR(t.START_DATE, 'yyyy-mm-dd hh24:mi:ss') AS START_DATE, s.STATUS, (SELECT q.SQL_TEXT FROM v$sql q WHERE q.LAST_ACTIVE_TIME = t.START_DATE AND rownum <= 1) AS SQL_TEXT FROM v$session s, v$transaction t WHERE s.SADDR = t.SES_ADDR;
殺死鎖
ALTER SYSTEM KILL SESSION 'sess.sid, sess.serial#';
附:數(shù)字越大鎖級(jí)別越高, 影響的操作越多
1級(jí)鎖有:Select,有時(shí)會(huì)在v$locked_object出現(xiàn)。
2級(jí)鎖有:Select for update,Lock For Update,Lock Row Share
select for update當(dāng)對(duì)話使用for update子串打開一個(gè)游標(biāo)時(shí),所有返回集中的數(shù)據(jù)行都將處于行級(jí)(Row-X)獨(dú)占式鎖定,其他對(duì)象只能查詢這些數(shù)據(jù)行,不能進(jìn)行update、delete或select for update操作。
3級(jí)鎖有:Insert, Update, Delete, Lock Row Exclusive
沒有commit之前插入同樣的一條記錄會(huì)沒有反應(yīng), 因?yàn)楹笠粋€(gè)3的鎖會(huì)一直等待上一個(gè)3的鎖, 我們必須釋放掉上一個(gè)才能繼續(xù)工作。
4級(jí)鎖有:Create Index, Lock Share
locked_mode為2,3,4不影響DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作會(huì)提示ora-00054錯(cuò)誤。
00054, 00000, "resource busy and acquire with NOWAIT specified"
// *Cause: Resource interested is busy.
// *Action: Retry if necessary.
5級(jí)鎖有:Lock Share Row Exclusive
具體來講有主外鍵約束時(shí)update / delete ... ; 可能會(huì)產(chǎn)生4,5的鎖。
6級(jí)鎖有:Alter table, Drop table, Drop Index, Truncate table, Lock Exclusive
總結(jié)
到此這篇關(guān)于oracle數(shù)據(jù)庫查看鎖表的sql語句的文章就介紹到這了,更多相關(guān)oracle查看鎖表sql內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Oracle查看正在執(zhí)行的sql語句的方法大全
- oracle轉(zhuǎn)mysql語句轉(zhuǎn)換實(shí)例代碼
- Oracle中sql語句如何執(zhí)行日志查詢
- Oracle如何在SQL語句中對(duì)時(shí)間操作、運(yùn)算
- oracle數(shù)據(jù)庫導(dǎo)入.dmp腳本的sql 語句
- ORACLE中如何找到未提交事務(wù)的SQL語句詳解
- SELECT INTO 和 INSERT INTO SELECT 兩種表復(fù)制語句詳解(SQL數(shù)據(jù)庫和Oracle數(shù)據(jù)庫的區(qū)別)
- Oracle數(shù)據(jù)庫找到 Top Hard Parsing SQL 語句的方法
相關(guān)文章
解決Oracle?DISTINCT?報(bào)錯(cuò)?inconsistent?datatypes:?expected?
這篇文章主要介紹了Oracle DISTINCT報(bào)錯(cuò)inconsistent datatypes:expected-got CLOB(數(shù)據(jù)類型不一致:?應(yīng)為-,但卻獲得?CLOB),本文給大家分享三種解決方案,需要的朋友可以參考下2023-07-07Oracle數(shù)據(jù)泵(expdp)導(dǎo)入導(dǎo)出數(shù)據(jù)的詳細(xì)步驟
這篇文章主要介紹了Oracle數(shù)據(jù)泵(expdp)導(dǎo)入導(dǎo)出數(shù)據(jù)的詳細(xì)步驟,文中詳細(xì)描述了源數(shù)據(jù)庫操作中的數(shù)據(jù)備份和目標(biāo)數(shù)據(jù)庫操作中的數(shù)據(jù)恢復(fù)過程,需要的朋友可以參考下2024-12-12Oracle 自定義split 函數(shù)實(shí)例詳解
這篇文章主要介紹了Oracle 自定義split 函數(shù)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-01-01oracle 動(dòng)態(tài)AdvStringGrid完美示例 (AdvStringGrid使用技巧/Cells)
本方法實(shí)現(xiàn)用常量和常量數(shù)組完美創(chuàng)建和控制動(dòng)態(tài)TAdvStringGrid。2009-06-06Oracle中多表關(guān)聯(lián)批量插入批量更新與批量刪除操作
這篇文章主要介紹了Oracle中多表關(guān)聯(lián)批量插入,批量更新與批量刪除操作,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12