暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【技术文章】Oracle 锁的使用 与 oradebug休眠唤醒进程

云贝教育 2023-03-06
286

1.问题:编译包,发现无法编译的情况,查询用户在执行锁命令

2.编译包,无法编译的时候,可以采用以下命令查询谁加了共享锁(执行)或者排它锁(正在编译)

    select * from dba_lock_internal d where d.lock_id1='APPS.XXXXX'
    and d.mode_held <>'Null'

    表上的锁能用这个表查,但是有更快的方法,

      select * from gv$lock lo ,dba_objects do where do.object_id=lo.id1
      and do.object_name ='XXXX'

      3.查询的lock_type:

      TM是表上的锁,TX是行锁,TO是临时表锁,可以查询v$lock_type获取详细信息



      oradebug 休眠、唤醒进程

      1、问题背景:

      测试环境有一个JDBC进程池,有20个进程并行执行SQL,此SQL非常缓慢,想要hang住进程,让我的test跑完再启用


      2、模拟执行缓慢的进程

      查询进程

        SELECT p.pid--35
        ,p.spid--28095
        FROM v$session s
        ,v$process p
        WHERE s.paddr = p.addr
        AND s.sid = userenv('sid') ;

        一秒写一个  

          create table cux_oradebug(id number,creation_date date);


          declare
          begin
          for i in 1..3600 loop
          dbms_lock.sleep(1);
          insert into cux_oradebug(id,creation_date)values(i,sysdate);
          commit;
          end loop;
          end;

          3.休眠

            SQL> oradebug setospid 28095
            Oracle pid: 35, Unix process pid: 28095, image: oracle@MyHost
            SQL> oradebug suspend

            查询果然停在了148秒

               select max(id)from   cux_oradebug;

              --4.唤醒

                SQL> oradebug resume

                继续查询,发现ID继续上升

                   select max(od) from   cux_oradebug


                  文章转载自云贝教育,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论