国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Oracle中鎖(lock)的用法

瀏覽:65日期:2023-03-12 15:25:03

數據庫鎖介紹: https://www.jb51.net/article/248863.htm

一、查詢oracle鎖定的表:

1、鎖相關表

  • SELECT * FROM v$lock;
    列:ADDR:鎖定狀態對象地址;KADDR:鎖地址;SID :會話id;ID1:鎖標識符#1;ID2:鎖標識符#2;LMODE:會話持有的鎖模式(0~6);REQUEST:進程請求的鎖模式(0~6);
    CTIME:當前模式的時間;BLOCK:為1代表阻礙者,表示正在阻礙其它會話;
  • 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、常用語句

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_timeFROM v$locked_object l, all_objects o, v$session sWHERE l.object_id = o.object_idAND l.session_id = s.sidORDER BY sid, s.serial#;

2、查出鎖定表的session的sid, serial#,os_user_name, machine name, terminal和執行的語句,比上面那段多出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.actionFROM v$sqlarea a, v$session s, v$locked_object lWHERE l.session_id = s.sidAND s.prev_sql_addr = a.addressORDER 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.TYPEFROM v$session s, v$lock lWHERE s.sid = l.sidAND s.username IS NOT NULLORDER BY sid;

4、這個語句將查找到數據庫中所有的DML語句產生的鎖,還可以發現,任何DML語句其實產生了兩個鎖,一個是表鎖,一個是行鎖。

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.osuserFROM v$session s, v$lock l, dba_objects oWHERE l.sid = s.sidAND l.id1 = o.object_id(+)AND s.username IS NOT NULL;

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

以下查詢結果是一個樹狀結構,如果有子節點,則表示有等待發生。如果想知道鎖用了哪個回滾段,還可以關聯到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 sWHERE l.object_id = o.object_idAND l.session_id = s.sidORDER BY o.object_id, xidusn DESC

3、kill session語句:

alter system kill session 'sid,serial#';

alter system kill session'494,7355';

二、一個有用查找腳本:

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 bfrom v$lock, all_objectswhere sid > 6and v$lock.id1 = all_objects.object_id;

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

select object_id, session_id, serial#, oracle_username, os_user_name, s.processfrom v$locked_object a, v$session swhere a.session_id = s.sid;

三、LOCK TABLE

1、語法:

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

2、變量:

table_1,...,table_n: 一系列你想通過使用LOCK TABLE語句鎖住的數據庫表。

lock_mode: 對于某一數據庫表你要設定的鎖定模式。你可以從如下的鎖定模式中任選一個。

  • 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

到此這篇關于Oracle鎖(lock)的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持。

標簽: Oracle
相關文章:
主站蜘蛛池模板: 久久91亚洲精品久久91综合 | 欧美一级乱理片免费观看 | 国产在线播放一区 | 国产成人精品高清免费 | 国产一级视频久久 | 成人在线黄色 | 中文字幕一区二区三区视频在线 | 欧美亚洲国产日韩一区二区三区 | www.日本在线 | 一级毛片在线不卡直接观看 | 亚洲国产精品免费 | 久久免费在线观看 | 欧美一级毛片在线一看 | 日本波多野结衣视频 | 国产精品6 | 欧美色黄毛片 | 天堂视频在线免费观看 | 日本午色www高清视频 | 色噜噜狠狠大色综合 | 日本人成在线视频免费播放 | 亚洲夜夜爽 | 伊人久久综合热青草 | 欧美一线高本道高清在线 | 精品自拍视频在线观看 | 色天使色婷婷在线影院亚洲 | 午夜嘿咻| 国产在线精品一区二区高清不卡 | 99精品国产综合久久久久 | 毛片在线全部免费观看 | 免费一级大片 | 波多野结衣免费免费视频一区 | 久久91精品综合国产首页 | 夜色www国产精品资源站 | 亚洲欧美精品中文字幕 | 欧美h版成版在线观看 | 九九热国产精品视频 | 久久精品国产福利 | 午夜成年女人毛片免费观看 | 在线视频免费国产成人 | 国产成人久久综合二区 | 国内精品久久久久久中文字幕 |