导读:本文就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错误,如下图所示:

发现报出错误,系统检测到死锁,此时打开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和Oracle在处理锁和死锁方面有各自的特点和策略。理解并熟练掌握这些机制,对于数据库管理员和开发人员来说,是确保系统稳定性和优化性能的关键。通过合理设置事务隔离级别、优化查询语句和设计...
### SQL Server与Oracle防止数据锁定的比较 在数据库管理系统(DBMS)中,数据锁定是一种常见的现象,它可能会导致性能下降或者事务处理中的死锁问题。本文将深入探讨SQL Server与Oracle这两种主流数据库系统如何有效...
SQL Server 中的锁机制是为了提供并发控制,防止多个事务同时访问同一个资源时出现的问题。锁机制可以分为悲观锁和乐观锁两种。 悲观锁是一种保守的锁机制,为任何操作(即使是 select)锁定资源,前提是假定用户...
本文将详细介绍针对SQL Server和Oracle两大主流数据库的阻塞监控工具及其相关知识。 首先,我们要理解什么是数据库阻塞。当一个事务正在执行时,另一个试图访问相同资源的事务被暂时阻止,这种现象就被称为阻塞。...
- 使用系统视图:许多数据库系统提供了内置视图(如SQL Server的sys.dm_tran_locks,Oracle的v$lock),用于查看当前的锁定状态,帮助找出潜在的死锁。 - 错误日志:数据库系统通常会在发生死锁时记录错误信息,通过...
在数据库领域,Oracle和SQL Server都是广泛使用的数据库平台,尤其在企业级应用中占据重要地位。这两款数据库系统都有各自的特性和优势,了解并掌握它们的笔试题目和答案对于数据库管理员、开发人员以及求职者来说至...
除了使用数据库自带的监控工具,还有一些第三方工具,如SQL Server的SQL Deadlock Monitor、Oracle的Oracle deadlock monitor等,它们提供了图形化的界面和更友好的死锁分析报告,使得问题排查更为便捷。 理解死锁...
具体到数据库环境中,如果事务A已经锁定了一部分数据并请求锁定另一部分数据,而事务B已经锁定了事务A所请求的第二部分数据,并同时请求锁定事务A已经锁住的第一部分数据,这时就会出现死锁。 #### 二、SQL死锁的...
10. **增强复制功能**:SQL Server 2005的复制功能得到了显著增强,包括对分布式数据库的全面DDL复制、改进的监控性能、Oracle到SQL Server的复制支持、多HTTP路径的合并复制以及对合并复制的可升级性改进。...
这份"SQLServer知识PPT文档"提供了一个全面的学习资源,涵盖了SQL Server的基础到进阶知识,是理解这一强大数据库平台的理想起点。 在第1章,通常会介绍SQL Server的基本概念,包括它的历史、版本以及在不同业务...
在企业级应用中,Oracle和SQL Server是两个广泛使用的数据库管理系统。它们各有优缺点,适合不同的应用场景和需求。本文将对比分析这两个系统在企业环境中的表现。 首先,Oracle以其强大的多用户支持和高度可扩展性...
SQLServer 2005是Microsoft推出的一款关系型数据库管理系统,其体系结构是理解其高效运作的关键。系统主要由四个核心组件构成:协议层、关系引擎、存储引擎和SQLOS。 1. **协议层**: 协议层是SQL Server与外界...
2. **Recovery Manager (RMAN)**: 虽然RMAN主要与Oracle数据库相关,但在SQL Server中,我们可以使用类似的备份和恢复工具来处理数据库的故障。这可能包括还原最近的备份,或者使用事务日志来回滚未提交的更改。 3....
以下是一些解决Oracle死锁的方法: 首先,定位死锁发生的进程是非常重要的。通过查询`V$DB_OBJECT_CACHE`视图可以找出被锁住的对象,然后通过`V$ACCESS`视图进一步获取被锁定的进程信息,如所属用户、过程名。接着...
本指南主要关注SQL Server和Oracle数据库的SQL优化方法。 首先,针对SQL Server的死锁监控,我们可以利用SQL Server Profiler工具来追踪和识别死锁的发生。死锁是由于资源的竞争导致的,当两个或多个事务互相等待...
在Oracle中,未提交的修改不影响其他事务的SELECT读取,这是相对于SQL Server的一个优势。 3. **表级锁(TM)** - **行级排他锁(RX)**:在执行DML操作时,Oracle会自动在更新的表上加RX锁,允许修改其他行但禁止...
脚本查询当前数据库阻塞,阻塞会话事物,进程,锁类型等
我们可以通过数据库的性能监控工具,如SQL Server的Activity Monitor或Oracle的Automatic Workload Repository (AWR)报告,来分析和定位高CPU消耗的SQL语句。 接下来,死锁是数据库中的一种常见问题,发生在两个或...