可以解决以下死锁问题的人有280分等着你们,谢谢!欢迎高手作答.(280分)

  • 主题发起人 主题发起人 lonelyboy
  • 开始时间 开始时间
L

lonelyboy

Unregistered / Unconfirmed
GUEST, unregistred user!
当系统多人运行的时候,偶尔出现以下错误:怎么解决和防止
General SQL error
[Microsoft][ODBC SQL Server Driver][SQL Server] your transaction(process ID#17)
was deadlock with another process and has been closen as the deadlock victim.
Return your transaction
服务器会不会自动回滚回去,不致出错?我看了看书,也没清楚说明死锁的解决问题?
请指教!thanks a lot
 
這個問題我見過很多,產生此問題的主要緣因是多個用戶同時頻煩訪問表所造成的,
對于數據多的表,此類問題尤為突出,對于解決辦法,總的宗旨就是減少對該表問的
訪問及精簡要讀取的數據,可以在在Select語句中加入Nolock 選項,盡量不要用視圖.
 
to P_W_Q
谢谢你的回答,当系统出现这种错误的时候,系统会回滚回去原来的状态吗?
 
死锁被检测出来后,SQL Server自动中止其中一个事务(当然会回滚),然后让另一个事务
继续运行。
解决办法就是让用户再试一次你的操作。
另外就是尽可能避免死锁。
 
使用try ...execpt ...end.把raise闭掉,showmessage('信息')
让用户再做一次.!
 
原因:
当一个客户端程序打开一个表,而且不全部下载数据时(为了提高性能,都是这样的),
在那个表上服务器会加上一个共享锁,当这时有其它客户要写这个表时,会升级为排它锁,
这时,要写入表的进程会挂起,直到锁消失或者成为牺牲者,这时事务会回滚。
解决办法:
在打开表后,在那个数据集部件上使用Last方法,让数据全部下载到客户端,
那么服务器上的共享锁会消失了,就不会出现死锁的情况。
引发的问题:
这样网络数据流量会增大
解决办法:
所以应该只让客户端数据集select出他需要的数据,而不要把
有用没用的都select出来,关键控制好where子句的内容。
 
1.重点检查你的SQL语句,看是否有可以优化的地方.
2.分析死锁时的详细情况.
 
不会吧,这种解决办法实在不敢恭维!
怎么知道到底是锁牺牲者还是其它的数据库操作异常呢,而且成为锁牺牲者前的等待时间也让人受不了呀。
 
后退
顶部