当前位置:  数据库>oracle

Oracle DML和DDL锁的解决方法

    来源: 互联网  发布时间:2017-06-26

    本文导语: 普通的Oracle开发人员经常会遇到删除,修改数据遇到锁,还有修改或删除存储过程产生锁。请看下面的例子: 一、DML锁解决办法假设锁在会话1上session1: drop table test; create table test as select * from dba_objects; select * from test for update; ...

普通的Oracle开发人员经常会遇到删除,修改数据遇到锁,还有修改或删除存储过程产生锁。请看下面的例子:

一、DML锁解决办法
假设锁在会话1上
session1:
 drop table test;
 create table test as select * from dba_objects;
 select * from test for update;

系统现在无法完成DML操作,这个时候要人工造成一个锁等待冲突的现象
session2:
 select sid from v$mystat where rownum=1; --204  先查出被堵塞会话id
 select * from test for update;

排除,解决
session3:
--找到被堵塞会话中,可以看到行锁的等待事件enq: TX - row lock contention,还可以看到制造堵塞的源头
select w.EVENT,w.BLOCKING_INSTANCE,w.BLOCKING_SESSION from v$session w where w.sid=204;
 EVENT                          BLOCKING_INSTANCE BLOCKING_SESSION
 ------------------------------ ----------------- ----------------
 enq: TX - row lock contention                  1              134

查找到源头的会话信息
select s.INST_ID,s.SID,s.SERIAL# from gv$session s where s.INST_ID =1 and s.SID =134;
    INST_ID        SID    SERIAL#
 ---------- ---------- ----------
          1        134      3559

现在实例1上杀会话:
alter system kill session '134,3559';

有的时候不一定能杀掉,则需要在操作系统层面上杀:
select spid
  from gv$process p, gv$session s
  where p.INST_ID = s.INST_ID
    and p.INST_ID = 1
    and s.SID = 134
    and s.SERIAL# = 3559
    and p.ADDR = s.PADDR;
 SPID
 -----
 27004
   
登陆实例1执行
 
kill -9  27004

二、DDL锁解决办法
 假设锁在会话1上
session1:
 create or replace procedure p_test is
 begin
  dbms_lock.sleep(1000);
 end;


 call p_test();


系统现在无法完成DML操作,这个时候要人工造成一个锁等待冲突的现象
session2:
 select sid from v$mystat where rownum=1; --134  先查出被堵塞会话id
 drop procedure p_test;


排除,解决
session3:
--找到被堵塞会话中,可以看到行锁的等待事件enq: TX - row lock contention,还可以看到制造堵塞的源头
select w.EVENT,w.BLOCKING_INSTANCE,w.BLOCKING_SESSION from v$session w where w.sid=134;
 EVENT                                                            BLOCKING_INSTANCE BLOCKING_SESSION
 ---------------------------------------------------------------- ----------------- ----------------
 library cache pin                                                    1              202


查找到源头的会话信息
select s.INST_ID,s.SID,s.SERIAL# from gv$session s where s.INST_ID =1 and s.SID =202;
    INST_ID        SID    SERIAL#
 ---------- ---------- ----------
          1        202      105


现在实例1上杀会话:
alter system kill session '202,105';


有的时候不一定能杀掉,则需要在操作系统层面上杀:
select spid
  from gv$process p, gv$session s
  where p.INST_ID = s.INST_ID
    and p.INST_ID = 1
    and s.SID = 202
    and s.SERIAL# = 105
    and p.ADDR = s.PADDR;
 SPID
 -----
 27008
   
登陆实例1执行
kill -9 27008


    
 
 

您可能感兴趣的文章:

  • 解决oracle用户连接失败的解决方法
  • Oracle Connect to Idle Instance解决方法
  • Linux下安装Tomcat后与Oracle冲突的解决
  • linux下安装oracle,出现没有权限的报警,怎么解决?
  • 安装Oracle加载数据库错误areasQueries的解决
  • Oracle 11g 相关工具netca,dbca乱码之解决
  • Linux安装Oracle 11时报错DISPLAY解决方案
  • Linux下Oracle安装时遇到的问题及解决
  • 简单的Oracle小问题解决
  • oracle中文乱码解决的办法
  • 关于系统重装后Oracle数据库完全恢复的解决办法
  • 安装oracle9时,安装界面的字体无法正确显示,怎么解决啊???
  • Oracle安装后8080和80端口被占用的解决办法
  • oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法
  • oracle 实际值超过数据库某个字段指定长度报错解决
  • Linux下命令行启动oracle时报错的解决
  • 网络技术 iis7站长之家
  • Linux系统下安装Oracle X11错误解决办法
  • Linux中安装Oracle乱码问题的解决
  • Oracle与JSDK4.0环境变量冲突,如何解决(在线等待)?
  • linux下安装oracle后使用命令行启动的方法 linux启动oracle
  • ORACLE 中修改用户密码的方法
  • Linux下完全卸载ORACLE 10G的方法
  • 将Oracle 8i数据成功移植Oracle 10g的方法
  • oracle增加表空间大小两种实现方法
  • linux下用ODBC链接Oracle怎么连啊?跪求具体方法!!!
  • Linux系统下查看oracle SID的方法
  • oracle 彻底删除方法
  • window中oracle环境变量设置方法分享
  • Oracle 忘记密码的找回方法
  • Oracle中serveroutput参数一次设置永久保存方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle DDL,DML,DCL,TCL 基础概念
  • Oracle10g使用sql获得ADDM报告以及利用ADDM监控表的dml情况
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3