一、表加锁、死锁出现的现象

 1、对数据库操作update、insert、delete时候,数据库无法更新,操作等待时长,操作结果不发生改变;
 2、在程序中,底层(数据访问层)操作时候不成功,数据库连接超时,无法操作,或者操作等待时长等现象。
 加锁原理:如果一个操作在进行修改一表,它没完成,另一个操作也操作这张表时候就需要等待,前面操作结束之后才可进行操作。

二、表加锁、导致死锁原因

1、可能在Oracle中可以有计时器,在频繁操作数据库update、insert、delete语句。

2、可能在.net程序中使用到timer控件,频繁地操作数据库update、insert、delete语句。

3、可能使用到事务处理(Tran),没有提交事务(CommintTran)或者没有回滚事务(Rollback)

【注释】:在SqlServer数据库里面有一个隐式事务,关闭时候,每次修改插入都需要手动提交,不然就会导致死锁。

三、解决方案

步骤为:
1、执行下面SQL,先查看哪些表被锁住了:
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
 
2、查处引起死锁的会话
 select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b  where a.session_id = b.sid order by b.logon_time;
 这里会列出SID
SELECT s.username, l.OBJECT_ID, l.SESSION_ID, s.SERIAL#, l.ORACLE_USERNAME, l.OS_USER_NAME, l.PROCESS FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID; 
 
3、 查出SID和SERIAL#:
查V$SESSION视图:
SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='刚才查到的SID';
这一步将得到PADDR
 
4、查V$PROCESS视图:
SELECT SPID FROM V$PROCESS WHERE ADDR='刚才查到的PADDR';
这一步得到SPID
 
5、杀掉进程 sid,serial#,这里的两个数是根据数据库查询得到的
alter system kill session'210,11562';
 
 

最新文章

  1. Entity Framework 教程——安装Entity Framework环境
  2. 三、最小化的Spring XML配置
  3. LeetCode 【Single Number I II III】
  4. react-组件生命周期
  5. IE8 margin: auto 无法居中
  6. 用PHP实现Windows域验证
  7. ZeroMQ(java)之I/O线程的实现与组件间的通信
  8. python进程、线程、协程(转载)
  9. Wps的ppt里 让图片按顺序出现 就是点击一下 出现一张照片
  10. kernel hexdump分析
  11. 大爱jQuery,10美女模特有用jQuery/CSS3插入(集成点免费下载)
  12. mkfs -t ext3 错误/dev/sdxx is apparently in use by the system; 解决方法
  13. SpringBoot(三):springboot启动参数
  14. 在Linux上安装Python3
  15. Vue 组件之间传值
  16. keras中的重要函数
  17. 变量安全过滤,防止xss攻击
  18. hdoj:2042
  19. Spring Hibernate Transaction示例
  20. HTML5 WebSocket 权威指南 学习一 (第二章 WebSocket API)

热门文章

  1. Sharding-Proxy的基本功能使用
  2. Centos7安装ftp服务
  3. Android 性能优化---布局优化
  4. OFDM通信系统的MATLAB仿真(2)
  5. springmvc(一)springmvc简介与入门程序
  6. LevelDB,你好~
  7. NFS /etc/exports参数解释
  8. 数据结构C语言实现----图
  9. jmeter单接口和多接口测试
  10. gc 模块常用函数