亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Oracle查鎖表的實現(xiàn)(史上最全)

 更新時間:2023年12月14日 15:35:21   作者:Tzq@2018  
Oracle提供幾種不同的方式來查看鎖表,本文主要介紹了Oracle查鎖表的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Oracle分兩種鎖,一種是DDL鎖,一種是DML鎖。

一、Oracle DDL鎖的解鎖(dba_ddl_locks視圖)

1.1、查表的DDL鎖的詳情(kill session腳本、表名、執(zhí)行鎖表的SQL等)

查DDL鎖的數(shù)據(jù)字典,SQL如下:

SELECT DISTINCT 'alter system kill session ''' || s.sid || ',' || s.serial# || ',@' ||
                s.inst_id || ''' immediate;' AS kill_session_scripts
               ,s.sql_id
               ,a.sql_text
               ,s.sid
               ,s.serial#
  FROM dba_ddl_locks l
      ,gv$session    s
      ,gv$sqlarea     a
 WHERE 1 = 1
   AND l.session_id = s.sid
   AND s.sql_id = a.sql_id
   AND lower(a.sql_text) NOT LIKE '%alter system kill session %'
-- AND l.owner IN ('TZQ','LOG')
;

查表的DDL鎖的詳情的查詢結(jié)果如下圖所示:

在這里插入圖片描述

1.2、解鎖表的DDL鎖

有兩種方式可以解鎖表的DDL鎖。

  • 一是:執(zhí)行kill session腳本。
  • 二是:調(diào)用tzq_server_pkg包的kill_session存過執(zhí)行殺會話kill session。

1.2.1、解鎖表的DDL鎖 - 1、執(zhí)行kill session腳本

Ⅰ、打開命令窗口

在這里插入圖片描述

Ⅱ、執(zhí)行上面生成好的kill session腳本

alter system kill session '314,93,@1' immediate;

在這里插入圖片描述

1.2.2、解鎖表的DDL鎖 - 2、調(diào)用tzq_server_pkg包的kill_session存過執(zhí)行殺會話kill session。

tzq_server_pkg包的代碼詳見博客:Oracle解鎖表、包、用戶、殺會話、停job

打開命令行窗口,執(zhí)行下面命令:

set serveroutput on
execute sys.tzq_server_pkg.kill_session(6335,15519);

二、Oracle DML鎖的解鎖(gv$locked_object視圖)

2.1、查表的DML鎖的詳情(kill session腳本、表名、執(zhí)行鎖表的SQL等)

查DML鎖的數(shù)據(jù)字典,SQL如下:

SELECT DISTINCT 'alter system kill session ''' || s.sid || ',' || s.serial# || ',@' ||
                s.inst_id || ''' immediate;' AS kill_session_scripts
               ,o.owner
               ,o.object_name
               ,s.sql_id
               ,a.sql_text
               ,s.sid
               ,s.serial#
  FROM gv$locked_object l
      ,dba_objects      o
      ,gv$session       s
      ,gv$sqlarea        a
 WHERE l.object_id = o.object_id
   AND l.session_id = s.sid
   AND l.inst_id = s.inst_id
   AND s.sql_id = a.sql_id
   -- AND o.owner IN ('TZQ','LOG')
;

查表的DML鎖的詳情的查詢結(jié)果如下圖所示:

在這里插入圖片描述

2.2、解鎖表的DML鎖

有兩種方式可以解鎖表的DML鎖。

  • 一是:執(zhí)行kill session腳本。
  • 二是:調(diào)用tzq_server_pkg包的kill_session存過執(zhí)行殺會話kill session。

2.2.1、解鎖表的DML鎖 - 1、執(zhí)行kill session腳本

Ⅰ、打開命令窗口

在這里插入圖片描述

Ⅱ、執(zhí)行上面生成好的kill session腳本

alter system kill session '314,93,@1' immediate;

在這里插入圖片描述

2.2.2、解鎖表的DML鎖 - 2、調(diào)用tzq_server_pkg包的kill_session存過執(zhí)行殺會話kill session。

tzq_server_pkg包的代碼詳見博客:Oracle解鎖表、包、用戶、殺會話、停job

打開命令行窗口,執(zhí)行下面命令:

set serveroutput on
execute sys.tzq_server_pkg.kill_session(6335,15519);

三、附錄

3.1、根據(jù)sid查sql_text(gv$session、gv$sqlarea)

SELECT s.sid
      ,s.serial#
      ,s.sql_id
      ,s.sql_hash_value
      ,s.username
      ,a.sql_text
  FROM gv$session s
  LEFT JOIN gv$sqlarea a
    ON s.sql_id = a.sql_id
 WHERE s.sql_id IS NOT NULL
   AND a.sql_text NOT LIKE '%AND a.sql_text NOT LIKE %'
 ;

在這里插入圖片描述

3.2、查鎖表的詳情(dba_locks視圖)

SELECT DISTINCT 'alter system kill session ''' || s.sid || ',' || s.serial# || ',@' ||
                s.inst_id || ''' immediate;' AS kill_session_scripts
      ,l.session_id
      ,s.serial#
      ,l.lock_TYPE
      ,l.mode_held
      ,l.mode_requested
      ,CASE
         WHEN o1.object_name IS NOT NULL
           THEN o1.owner||'.'||o1.object_name
         ELSE NULL
       END AS id1_object_name
      ,CASE
         WHEN o2.object_name IS NOT NULL
           THEN o2.owner||'.'||o2.object_name
         ELSE NULL
       END AS id2_object_name
      ,l.last_convert
      ,l.blocking_others
      ,a.SQL_TEXT
  FROM dba_locks l
  LEFT JOIN dba_objects o1
    ON l.lock_id1 = o1.OBJECT_ID
  LEFT JOIN dba_objects o2
    ON l.lock_id2 = o2.OBJECT_ID
  LEFT JOIN gv$session s
    ON l.session_id = s.SID
  LEFT JOIN v$sqlarea a
    ON s.sql_id = a.sql_id
 WHERE 1=1
   AND a.SQL_TEXT IS NOT NULL
   AND (o1.owner IN ('TZQ','LOG') OR
        o2.owner IN ('TZQ','LOG'))
;

在這里插入圖片描述

3.3、Oracle查詢鎖定表的會話信息(gv$session、gv$process、gv$sqlarea)

Oracle查詢鎖定表的會話信息,可以執(zhí)行下面的SQL來進(jìn)行查詢:

SELECT s.sid
      ,s.serial#
      ,p.spid
      ,s.username
      ,s.osuser
      ,s.program
      ,s.module
      ,s.action
      ,s.logon_time
      ,s.type
      ,a.sql_text
  FROM gv$session s
      ,gv$process p
      ,gv$sqlarea a
 WHERE s.paddr = p.addr
   AND s.sql_id = a.sql_id
   AND s.status = 'ACTIVE'
   AND s.username IS NOT NULL
   AND s.type != 'BACKGROUND'
   AND a.sql_text NOT LIKE '%gv$sqlarea a%'
 ORDER BY s.logon_time DESC;

在這里插入圖片描述

3.4、gv$lock視圖

此查詢將返回被鎖定的表的會話ID、用戶名、機(jī)器名、鎖模式、鎖定類型以及鎖定對象的ID等信息。請注意,如果有多個鎖定類型,則此查詢可能會返回多行。

SELECT s.sid
      ,s.serial#
      ,s.username
      ,s.osuser
      ,s.machine
      ,l.type
      ,l.block
      ,l.id1
      ,l.id2
      ,a.SQL_TEXT
      ,CASE
         WHEN o1.object_name IS NOT NULL
           THEN o1.owner||'.'||o1.object_name
         ELSE NULL
       END AS id1_object_name
      ,CASE
         WHEN o2.object_name IS NOT NULL
           THEN o2.owner||'.'||o2.object_name
         ELSE NULL
       END AS id2_object_name
  FROM gv$session s
      ,gv$lock    l
      ,gv$sqlarea a
      ,dba_objects o1
      ,dba_objects o2
 WHERE s.sid = l.sid
   AND s.sql_id = a.sql_id
   AND l.id1 = o1.OBJECT_ID(+)
   AND l.id2 = o2.OBJECT_ID(+)
   AND a.SQL_TEXT NOT LIKE '%,gv$sqlarea a%'
;

查詢結(jié)果如下圖:

在這里插入圖片描述

在這里插入圖片描述

到此這篇關(guān)于Oracle查鎖表的實現(xiàn)(史上最全)的文章就介紹到這了,更多相關(guān)Oracle查鎖表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評論