人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

Oracle中鎖(lock)的用法

發(fā)布日期:2022-07-15 19:54 | 文章來(lái)源:CSDN

數(shù)據(jù)庫(kù)鎖介紹: https://www.jb51.net/article/248863.htm

一、查詢oracle鎖定的表:

1、鎖相關(guān)表

  • SELECT * FROM v$lock;
    列:ADDR:鎖定狀態(tài)對(duì)象地址;KADDR:鎖地址;SID :會(huì)話id;ID1:鎖標(biāo)識(shí)符#1;ID2:鎖標(biāo)識(shí)符#2;LMODE:會(huì)話持有的鎖模式(0~6);REQUEST:進(jìn)程請(qǐng)求的鎖模式(0~6);
    CTIME:當(dāng)前模式的時(shí)間;BLOCK:為1代表阻礙者,表示正在阻礙其它會(huì)話;
  • SELECT * FROM v$locked_object;
  • SELECT * FROM v$session;
  • SELECT * FROM v$session_wait;
  • SELECT * FROM v$sqlarea;
  • SELECT * FROM v$process ;
  • SELECT * FROM all_objects

2、常用語(yǔ)句

1、查出鎖定object的session的信息以及被鎖定的object名

SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, l.os_user_name, s.machine, s.terminal, o.object_name, s.logon_time
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial#;

2、查出鎖定表的session的sid, serial#,os_user_name, machine name, terminal和執(zhí)行的語(yǔ)句,比上面那段多出sql_text和action

SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#, l.os_user_name, s.machine, s.terminal, a.sql_text, a.action
FROM v$sqlarea a, v$session s, v$locked_object l
WHERE l.session_id = s.sid
AND s.prev_sql_addr = a.address
ORDER BY sid, s.serial#;

3、查出鎖定表的sid, serial#,os_user_name, machine_name, terminal,鎖的type,mode

SELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine, s.terminal, s.logon_time, l.TYPE
FROM v$session s, v$lock l
WHERE s.sid = l.sid
AND s.username IS NOT NULL
ORDER BY sid;

4、這個(gè)語(yǔ)句將查找到數(shù)據(jù)庫(kù)中所有的DML語(yǔ)句產(chǎn)生的鎖,還可以發(fā)現(xiàn),任何DML語(yǔ)句其實(shí)產(chǎn)生了兩個(gè)鎖,一個(gè)是表鎖,一個(gè)是行鎖。

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;

5、如果發(fā)生了鎖等待,我們可能更想知道是誰(shuí)鎖了表而引起誰(shuí)的等待,以下的語(yǔ)句可以查詢到誰(shuí)鎖了表,而誰(shuí)在等待。

以下查詢結(jié)果是一個(gè)樹(shù)狀結(jié)構(gòu),如果有子節(jié)點(diǎn),則表示有等待發(fā)生。如果想知道鎖用了哪個(gè)回滾段,還可以關(guān)聯(lián)到V$rollname,其中xidusn就是回滾段的USN

SELECT LPAD(' ', DECODE(l.xidusn, 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, xidusn DESC

3、kill session語(yǔ)句:

alter system kill session 'sid,serial#';

alter system kill session'494,7355';

二、一個(gè)有用查找腳本:

1、找到某表的鎖 所屬的sid,alter system kill session 'sid,serial#';即可

select v$lock.sid, decode(v$lock.type, 'MR', 'Media Recovery', 'RT', 'Redo Thread', 'UN', 'User Name', 'TX', 'Transaction', 'TM', 'DML', 'UL', 'PL/SQL User Lock', 'DX', 'Distributed Xaction', 'CF', 'Control File', 'IS', 'Instance State', 'FS', 'File Set', 'IR', 'Instance Recovery', 'ST', 'Disk Space Transaction', 'TS', 'Temp Segment', 'IV', 'Library Cache Invalida-tion', 'LS', 'Log Start or Switch', 'RW', 'Row Wait', 'SQ', 'Sequence Number', 'TE', 'Extend Table', 'TT', 'Temp Table', 'Unknown') LockType, rtrim(owner) || '.' ||
        object_name object_name, decode(lmode, 0, 'None', 1, 'Null', 2, 'Row-S', 3, 'Row-X', 4, 'Share', 5, 'S/Row-X', 6, 'Exclusive', 'Unknown') LockMode, decode(request, 0, 'None', 1, 'Null', 2, 'Row-S', 3, 'Row-X', 4, 'Share', 5, 'S/Row-X', 6, 'Exclusive', 'Unknown') RequestMode, ctime, block b
from v$lock, all_objects
where sid > 6
and v$lock.id1 = all_objects.object_id;

2、查出被lock 的對(duì)象,然后 alter system kill session 'sid,serial#';

select object_id, session_id, serial#, oracle_username, os_user_name, s.process
from v$locked_object a, v$session s
where a.session_id = s.sid;

三、LOCK TABLE

1、語(yǔ)法:

LOCK   TABLE   table_1   [,table_2,   ...,   table_n]   IN   lock_mode   MODE
  NOWAIT

2、變量:

table_1,...,table_n: 一系列你想通過(guò)使用LOCK TABLE語(yǔ)句鎖住的數(shù)據(jù)庫(kù)表。

lock_mode: 對(duì)于某一數(shù)據(jù)庫(kù)表你要設(shè)定的鎖定模式。你可以從如下的鎖定模式中任選一個(gè)。

  • EXCLUSIVE
  • SHARE ROW EXCLUSIVE
  • SHARE
  • SHARE UPDATE
  • ROW SHARE
  • ROW EXCLUSIVE

NOWAIT: Oracle will not wait to lock the given Table(s), if the Table(s) is(are) not available

3、例子:

LOCK   TABLE   loan     IN   SHARE   MODE   ;
LOCK   TABLE   region   IN   EXCLUSIVE   MODE   NOWAIT;
LOCK   TABLE   acct     IN   SHARE   UPDATE   MODE;
LOCK   TABLE   bank     IN   ROW   EXCLUSIVE   MODE   NOWAIT;
LOCK   TABLE   user     IN   SHARE   ROW   EXCLUSIVE   MODE;
LOCK   TABLE   branch   IN   ROW   SHARE   MODE   NOWAIT;
commit

到此這篇關(guān)于Oracle鎖(lock)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持本站。

香港服務(wù)器租用

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部