WEB开发网
开发学院数据库Oracle SQL Server和Oracle中的锁和死锁 阅读

SQL Server和Oracle中的锁和死锁

 2008-09-02 12:46:27 来源:WEB开发网   
核心提示: SQL Server死锁样本:死锁使事务中止时,SQL Server向客户机返回错误号1205,SQL Server和Oracle中的锁和死锁(4),由于死锁不是逻辑错误,而只是资源争夺问题,动态性能视图V$LOCK包含所有当前由系统和所以连接的会话保持的锁的信息,如select * fr

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)

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

4、锁争用的监测和解决

ORACLE:

ORACLE提供了有用的锁的动态性能视图V$LOCK和V$locked_OBJECT。

动态性能视图V$LOCK包含所有当前由系统和所以连接的会话保持的锁的信息。

如select * from V$lock 返回下面样本:

ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK

---------- ----------------- ---------- ---------- -------- -------- ----

682BE878 682BE888 2 MR 201 0 4 0 12383 0

682BE82C 682BE83C 2 MR 11 0 4 0 12383 0

682BE7E0 682BE7F0 2 MR 10 0 4 0 12383 0

V$locked_OBJECT提供了当前被锁定的对象。可以查出该对象由什么锁模式锁定的。

上一页  1 2 3 4 5 6  下一页

Tags:SQL Server Oracle

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接