`
stupen
  • 浏览: 13354 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

SQL Server和Oracle中的锁和死锁(二)

阅读更多

导读:本文就SQL SERVE和ORACLE常出现的锁和死锁的检测和解决方法进行了全面比较,比较内容包括锁的作用、锁的模式……

 

  3、死锁

  死锁就是两个进程都在等待对方持有的资源锁,要等对方释放持有的资源锁之后才能继续工作,它们互不相让,坚持到底,实际上,双方都要等到对方完成之后才能继续工作,而双方都完成不了。

  Oracle死锁样本:

  步骤一:

  登陆ORACLE SQL *plus 之一窗口,执行:

  update HR.JOBS

  SET JOB_title = ’S.Finance Manager’

  where job_id = ’FI_MGR’

  步骤二:

  登陆ORACLE SQL *plus 之二窗口,执行:

  update HR.JOBS

  SET JOB_title = ’S.President’

  where job_id = ’AD_PRES’;

  步骤三:

  重新ORACLE SQL *plus 之一窗口,执行

  update HR.JOBS

  SET JOB_title = ’S.President’

  where job_id = ’AD_PRES’;

  发现已经无法完成,因为在等待资源释放。

  步骤四:

  登陆ORACLE SQL *plus 之二窗口,执行:

  update HR.JOBS

  SET JOB_title = ’S.Finance Manager’

  where job_id = ’FI_MGR’

  此时出现ORA-00060错误,如下图所示:

  ORA—00060错误

  发现报出错误,系统检测到死锁,此时打开C:\oracle\admin\ORADB\udump\的oradb_ora_5528文件会发现已经记录了死锁deadlock日志,文字如下:

  

*** 2008-07-05 16:46:43.000
*** SESSION ID:(17.16) 2008-07-05 16:46:43.000
DEADLOCK DETECTED
Current SQL statement for this session:
update  HR.JOBS
SET JOB_title  = ’S.President’
where job_id = ’AD_PRES’
The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
infromation may aid in determining the deadlock:
Deadlock graph:
---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TX-000a0002-00001904        16      17     X             17      18           X
TX-00010010-00001917        17      18     X             16      17           X
session 17: DID 0001-0010-00000003 session 18: DID 0001-0011-00000003
session 18: DID 0001-0011-00000003 session 17: DID 0001-0010-00000003
Rows waited on:
Session 18: obj - rowid = 00007339 - AAAHM5AAFAAAABGAAD
(dictionary objn - 29497,file- 5, block - 70, slot - 3)
Session 17: obj - rowid = 00007339 - AAAHM5AAFAAAABGAAA
(dictionary objn - 29497, file - 5, block - 70, slot - 0)
Information on the OTHER waiting sessions:
Session 18:
pid=17 serial=20 audsid=0 user: 0/SYS
O/S info: user: WANGTM\wangtm, term: WANGTM, ospid: 5200:4876, machine: WORKGROUP\WANGTM
prigram: sqlplusw.exe
Current SQL Statement:
update  HR.JOBS
SET JOB_title  = ’S.Finance Manager’
where job_id = ’FI_MGR’ 
End of information on OTHER waiting sessions.   

  SQL Server死锁样本:

  死锁使事务中止时,SQL Server向客户机返回错误号1205,由于死锁不是逻辑错误,而只是资源争夺问题,因此客户机可以更新提交整个事务,要在应用程序中处理死锁,要在错误处理器中捕获消息1205。遇到消息1205时,应用程序可以自动重新提交事务,最好不要然用户看到SQL Server返回的死锁错误消息。

  我们知道可以通过SP_lock和SP_who监视进程之间的锁争用,但是,一旦出现死锁,一个事务回退,一个事务继续。此时使用sp_lock已经看不到真正死锁的资源信息(或许能够看许多X类型的锁信息),因为所涉及资源的锁已经释放。

  SQL SERVER 提供了几个跟踪标志,可以监视出现的死锁。可以用DBCC TRACEON命令打开跟踪标志,用DBCC TRACEOFF关闭跟踪标志,要然SQL SERVER把死锁跟踪标志的输出写入到错误日志中。首先要设置DBCC TRACEON(3605),比如:

  DBCC TRACEON(3605)

  DBCC TRACEON(1204)

  这样,一旦出现死锁,将能在错误日志中监视到相关明细信息。

分享到:
评论

相关推荐

    SQL Server和Oracel中的锁和死锁

    总结来说,SQL Server和Oracle在处理锁和死锁方面有各自的特点和策略。理解并熟练掌握这些机制,对于数据库管理员和开发人员来说,是确保系统稳定性和优化性能的关键。通过合理设置事务隔离级别、优化查询语句和设计...

    SQLServer和Oracle防止数据锁定的比较 .txt

    ### SQL Server与Oracle防止数据锁定的比较 在数据库管理系统(DBMS)中,数据锁定是一种常见的现象,它可能会导致性能下降或者事务处理中的死锁问题。本文将深入探讨SQL Server与Oracle这两种主流数据库系统如何有效...

    SQL server 中锁机制详解

    SQL Server 中的锁机制是为了提供并发控制,防止多个事务同时访问同一个资源时出现的问题。锁机制可以分为悲观锁和乐观锁两种。 悲观锁是一种保守的锁机制,为任何操作(即使是 select)锁定资源,前提是假定用户...

    数据库阻塞监控工具(SQLSERVER和ORACLE)

    本文将详细介绍针对SQL Server和Oracle两大主流数据库的阻塞监控工具及其相关知识。 首先,我们要理解什么是数据库阻塞。当一个事务正在执行时,另一个试图访问相同资源的事务被暂时阻止,这种现象就被称为阻塞。...

    sql数据库死锁查询工具

    - 使用系统视图:许多数据库系统提供了内置视图(如SQL Server的sys.dm_tran_locks,Oracle的v$lock),用于查看当前的锁定状态,帮助找出潜在的死锁。 - 错误日志:数据库系统通常会在发生死锁时记录错误信息,通过...

    ORACLE,sql server笔试题目,答案

    在数据库领域,Oracle和SQL Server都是广泛使用的数据库平台,尤其在企业级应用中占据重要地位。这两款数据库系统都有各自的特性和优势,了解并掌握它们的笔试题目和答案对于数据库管理员、开发人员以及求职者来说至...

    SQL死锁监控工具

    除了使用数据库自带的监控工具,还有一些第三方工具,如SQL Server的SQL Deadlock Monitor、Oracle的Oracle deadlock monitor等,它们提供了图形化的界面和更友好的死锁分析报告,使得问题排查更为便捷。 理解死锁...

    SQL死锁,删除失败解决办法

    具体到数据库环境中,如果事务A已经锁定了一部分数据并请求锁定另一部分数据,而事务B已经锁定了事务A所请求的第二部分数据,并同时请求锁定事务A已经锁住的第一部分数据,这时就会出现死锁。 #### 二、SQL死锁的...

    SQL Server 2005管理最重要特点

    10. **增强复制功能**:SQL Server 2005的复制功能得到了显著增强,包括对分布式数据库的全面DDL复制、改进的监控性能、Oracle到SQL Server的复制支持、多HTTP路径的合并复制以及对合并复制的可升级性改进。...

    SQLServer知识PPT文档

    这份"SQLServer知识PPT文档"提供了一个全面的学习资源,涵盖了SQL Server的基础到进阶知识,是理解这一强大数据库平台的理想起点。 在第1章,通常会介绍SQL Server的基本概念,包括它的历史、版本以及在不同业务...

    Oracle与SQL Server在企业应用的比较

    在企业级应用中,Oracle和SQL Server是两个广泛使用的数据库管理系统。它们各有优缺点,适合不同的应用场景和需求。本文将对比分析这两个系统在企业环境中的表现。 首先,Oracle以其强大的多用户支持和高度可扩展性...

    SQLServer2005的体系结构[收集].pdf

    SQLServer 2005是Microsoft推出的一款关系型数据库管理系统,其体系结构是理解其高效运作的关键。系统主要由四个核心组件构成:协议层、关系引擎、存储引擎和SQLOS。 1. **协议层**: 协议层是SQL Server与外界...

    SQL2008R2数据库质疑 修复工具.rar

    2. **Recovery Manager (RMAN)**: 虽然RMAN主要与Oracle数据库相关,但在SQL Server中,我们可以使用类似的备份和恢复工具来处理数据库的故障。这可能包括还原最近的备份,或者使用事务日志来回滚未提交的更改。 3....

    oracle解决死锁![参考].pdf

    以下是一些解决Oracle死锁的方法: 首先,定位死锁发生的进程是非常重要的。通过查询`V$DB_OBJECT_CACHE`视图可以找出被锁住的对象,然后通过`V$ACCESS`视图进一步获取被锁定的进程信息,如所属用户、过程名。接着...

    sql优化指南.doc

    本指南主要关注SQL Server和Oracle数据库的SQL优化方法。 首先,针对SQL Server的死锁监控,我们可以利用SQL Server Profiler工具来追踪和识别死锁的发生。死锁是由于资源的竞争导致的,当两个或多个事务互相等待...

    相克军 ORACLE 讲座 深度剖析 锁 笔记

    在Oracle中,未提交的修改不影响其他事务的SELECT读取,这是相对于SQL Server的一个优势。 3. **表级锁(TM)** - **行级排他锁(RX)**:在执行DML操作时,Oracle会自动在更新的表上加RX锁,允许修改其他行但禁止...

    查询当前阻塞死锁.sql

    脚本查询当前数据库阻塞,阻塞会话事物,进程,锁类型等

    sql 执行脚本

    我们可以通过数据库的性能监控工具,如SQL Server的Activity Monitor或Oracle的Automatic Workload Repository (AWR)报告,来分析和定位高CPU消耗的SQL语句。 接下来,死锁是数据库中的一种常见问题,发生在两个或...

Global site tag (gtag.js) - Google Analytics