MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 数据库 / 正文

云贝教育 |【技术文章】Oracle 锁的使用 与 oradebug休眠唤醒进程

2024-11-26 20:05 huorong 数据库 5 ℃ 0 评论

作者:刘晓峰

原文链接:http://www.tdpub.cn/Blog/detail/id/1345.html

Oracle 锁的使用

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

Tags:oracle into 临时表

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言