當前位置:首頁 » 編程語言 » oracle查詢鎖表的sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

oracle查詢鎖表的sql

發布時間: 2022-07-12 15:44:34

㈠ 查看Oracle中是否有鎖表的sql

1、查看是否有鎖表的sql
代碼如下:
select 'blocker('||lb.sid||':'||sb.username||')-sql:'|| qb.sql_text blockers,
'waiter ('||lw.sid||':'||sw.username||')-sql:'|| qw.sql_text waiters
from v$lock lb,
v$lock lw,
v$session sb,
v$session sw,
v$sql qb,
v$sql qw
where lb.sid=sb.sid
and lw.sid=sw.sid
and sb.prev_sql_addr=qb.address
and sw.sql_address=qw.address
and lb.id1=lw.id1
and sw.lockwait is not null
and sb.lockwait is null
and lb.block=1 ;
2、查看被鎖的表
代碼如下:
select p.spid,a.serial#,c.object_name,b.session_id,b.oracle_username,b.os_user_name
from v$process p,v$session a, v$locked_object b,all_objects c
where p.addr=a.paddr and a.process=b.process and c.object_id=b.object_id ;
3、查看那個用戶那個進程造成死鎖,鎖的級別
代碼如下:
select b.owner,b.object_name,l.session_id,l.locked_mode fromv$locked_object l, dba_objects
4、查看連接的進程
代碼如下:
SELECT sid, serial#, username, osuser FROMv$session;
5、查看是哪個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;
6、殺掉進程
代碼如下:
alter system kill session 'sid,serial#';

㈡ oracle_capacity鎖怎麼查

1.以下代碼可以查看是否被鎖表:
2selecta.object_name,b.session_id,c.serial#,c.program,c.username,c.command,c.machine,c.lockwait
3fromall_objectsa,v$locked_objectb,v$sessioncwherea.object_id=b.object_idandc.sid=b.session_id;
4
2.查詢鎖表原因:
5selectl.session_idsid,
6s.serial#,
7l.locked_mode,
8l.oracle_username,
9s.user#,
10l.os_user_name,
11s.machine,
12s.terminal,
13a.sql_text,
14a.action
153.接上:
16fromv$sqlareaa,v$sessions,v$locked_objectl
17wherel.session_id=s.sid
18ands.prev_sql_addr=a.address
19orderbysid,s.serial#;
204.解鎖方法:altersystemkillsession』146′;–146為鎖住的進程號,即spid。
215.查看被鎖的表:selectp.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_namefromv$processp,v$sessiona,v$locked_objectb,all_objectscwherep.addr=a.paddranda.process=b.processandc.object_id=b.object_id
226.以上就是oracle查看鎖表的方法,以及一些相關信息,看過之後如果覺得有幫助可以在下面給點個贊~

㈢ oracle 中怎樣查看以前執行過的SQL語句是否有鎖

用如下語句查詢:


select'blocker('||lb.sid||':'||sb.username||')-sql:'||qb.sql_textblockers,'waiter('||lw.sid||':'||sw.username||')-sql:'||qw.sql_textwaitersfromv$locklb,v$locklw,v$sessionsb,v$sessionsw,v$sqlqb,v$sqlqwwherelb.sid=sb.sidandlw.sid=sw.sidandsb.prev_sql_addr=qb.addressandsw.sql_address=qw.addressandlb.id1=lw.id1andsw.lockwaitisnotnullandsb.lockwaitisnullandlb.block=1;

如果有被鎖的sql,查詢中有結果:

㈣ oracle 鎖表時,怎麼查出是哪些SQL語句導致了鎖表

SELECT /*+ rule */ lpad(' ',decode(l.xisn ,0,3,0))||l.oracle_username User_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
FROM v$locked_object l,dba_objects o,v$session s
WHERE l.object_id=o.object_id
AND l.session_id=s.sid
ORDER BY o.object_id,xisn DESC
執行此SQL即可,結果一看便知,適用於oracle, 其他不解釋~

㈤ oracle 怎麼查看數據被鎖

1.創建測試表,如下圖。

createtabletest_lock(idnumber,valuevarchar2(200));


注意事項:

簡化數據:可以將復雜的查詢創建為其他人可以使用的視圖,而不必了解復雜的業務或邏輯關系。這簡化並掩蓋了視圖用戶數據的復雜性。

表結構設計的補充:在設計的系統才剛剛開始,大部分的程序直接訪問數據表結構,但是隨著業務的變化,系統更新,等等,引起了一些表結構不適用,這次修改系統的表結構太大,開發成本較高的影響。

這個時候可以創建一個視圖來補充表結構設計,降低開發成本。程序可以通過查詢視圖直接獲得它想要的數據。

添加安全性:視圖可以向用戶顯示表中的指定欄位,而不是向用戶顯示表中的所有欄位。在實際開發中,視圖通常作為提供數據的一種方式提供,並將只讀許可權提供給第三方以供查詢使用。

㈥ oracle19c查看鎖表

1、查看是否有被鎖的表:selectb.owner,b.object_name,a.session_id,a.locked_modefromv$locked_objecta,dba_objectsbwhereb.object_id=a.object_id。
2、查看是哪個進程鎖的selectb.username,b.sid,b.serial#,logon_timefromv$locked_objecta,v$sessionbwherea.session_id=b.sidorderbyb.logon_time。
3、殺掉進程altersystemkillsession'sid,serial#';。

㈦ oracle資料庫鎖表怎麼解決

首先你要知道表鎖住了是不是正常鎖?因為任何DML語句都會對表加鎖。

你要先查一下是那個會話那個sql鎖住了表,有可能這是正常業務需求,不建議隨便KILL session,如果這個鎖表是正常業務你把session kill掉了會影響業務的。
建議先查原因再做決定。

(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行級鎖的sql

select .sid,a.serial#,blocking_session,username,event,b.sql_text
from v$session a,v$sql b,v$lock c
where a.prev_sql_id=b.sql_id
and a.sid=c.sid
and type in('TX','TM');

㈨ ORACLE 如何查詢被鎖定表及如何解鎖釋放session

ORACLE
EBS操作某一個FORM界面,或者後台資料庫操作某一個表時發現一直出於"假死"狀態,可能是該表被某一用戶鎖定,導致其他用戶無法繼續操作
復制代碼
代碼如下:--鎖表查詢SQLSELECT
object_name,
machine,
s.sid,
s.serial#
FROM
gv$locked_object
l,
dba_objects
o,
gv$session
s
WHERE
l.object_id
=
o.object_id
AND
l.session_id
=
s.sid;
找到被鎖定的表,解鎖
復制代碼
代碼如下:--釋放SESSION
SQL:
--alter
system
kill
session
'sid,
serial#';
您可能感興趣的文章:mysql
事務處理及表鎖定深入簡析

㈩ 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.terminal,s.machine,s.program,s.osuser
FROM
v$session
s,v$lock
l,dba_objects
o
WHERE
l.sid
=
s.sid
AND
l.id1
=
o.object_id(+)
AND
s.username
is
NOT
NULL
以下的語句可以查詢到誰在等待:
復制代碼
代碼如下:
SELECT
/*+
rule
*/
lpad('
',decode(l.xisn
,0,3,0))||l.oracle_username
User_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
FROM
v$locked_object
l,dba_objects
o,v$session
s
WHERE
l.object_id=o.object_id
AND
l.session_id=s.sid
ORDER
BY
o.object_id,xisn
DESC
解鎖命令:
復制代碼
代碼如下:
alter
system
kill
session
'sid,serial#'
1).
復制代碼
代碼如下:
select
LOCK_INFO.OWNER
||
'.'
||
LOCK_INFO.OBJ_NAME
as
"已鎖物件名稱",
--物件名稱(已經被鎖住)
LOCK_INFO.SUBOBJ_NAME
as
"已鎖子物件名稱",
--
子物件名稱(已經被鎖住)
SESS_INFO.MACHINE
as
"機器名稱",
--
機器名稱
LOCK_INFO.SESSION_ID
as
"會話ID",
--
會話SESSION_ID
SESS_INFO.SERIAL#
as
"會話SERIAL#",
--
會話SERIAL#
SESS_INFO.SPID
as
"OS系統的SPID",
--
OS系統的SPID
(SELECT
INSTANCE_NAME
FROM
V$INSTANCE)
"實例名SID",
--實例名SID
LOCK_INFO.ORA_USERNAME
as
"ORACLE用戶",
--
ORACLE系統用戶名稱
LOCK_INFO.OS_USERNAME
as
"OS用戶",
--
作業系統用戶名稱
LOCK_INFO.PROCESS
as
"進程編號",
--
進程編號
LOCK_INFO.OBJ_ID
as
"對象ID",
--
對象ID
LOCK_INFO.OBJ_TYPE
as
"對象類型",
--
對象類型
SESS_INFO.LOGON_TIME
as
"登錄時間",
--
登錄時間
SESS_INFO.PROGRAM
as
"程式名稱",
--
程式名稱
SESS_INFO.STATUS
as
"會話狀態",
--
會話狀態
SESS_INFO.LOCKWAIT
as
"等待鎖",
--
等待鎖
SESS_INFO.ACTION
as
"動作",
--
動作
SESS_INFO.CLIENT_INFO
as
"客戶資訊"
--
客戶資訊
from
(select
obj.OWNER
as
OWNER,
obj.OBJECT_NAME
as
OBJ_NAME,
obj.SUBOBJECT_NAME
as
SUBOBJ_NAME,
obj.OBJECT_ID
as
OBJ_ID,
obj.OBJECT_TYPE
as
OBJ_TYPE,
lock_obj.SESSION_ID
as
SESSION_ID,
lock_obj.ORACLE_USERNAME
as
ORA_USERNAME,
lock_obj.OS_USER_NAME
as
OS_USERNAME,
lock_obj.PROCESS
as
PROCESS
from
(select
*
from
all_objects
where
object_id
in
(select
object_id
from
v$locked_object))
obj,
v$locked_object
lock_obj
where
obj.object_id
=
lock_obj.object_id)
LOCK_INFO,
(select
SID,
SERIAL#,
LOCKWAIT,
STATUS,
(select
spid
from
v$process
where
addr
=
a.paddr)
spid,
PROGRAM,
ACTION,
CLIENT_INFO,
LOGON_TIME,
MACHINE
from
v$session
a)
SESS_INFO
where
LOCK_INFO.SESSION_ID
=
SESS_INFO.SID
order
by
LOCK_INFO.SESSION_ID;
2).
復制代碼
代碼如下:
select
sql_text
from
v$sqltext
where
address
in
(select
sql_address
from
v$session
where
sid
=
&sid)
order
by
piece;
3).
復制代碼
代碼如下:
ALTER
SYSTEM
KILL
SESSION
'會話ID,會話SERIAL#';
4).
kill
-9
OS系統的SPID