关于锁的一个问题 客户端程序只在一台机器上会出现锁数据库的问题,而在其他的机器上从来就没发生过。程序中没有显示编写有关数据库加锁的代码。数据库系统是SQL2000 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 数据库锁的问题,比较常见,但象 gardenyang(太阳雨)说的因为机器慢导致的锁定很少见,在SQLServer2000中出现的几率很小,因为所谓的抢占资源,其实DBMS现在已经可以很好的处理。但有几点需要注意,如果你自己进行事务锁,则一定要记着及时对锁进行释放。如要从表中的一个字段进行取最大值加一做为下行主键的问题,你要启动自己的事务,在这各事务中进行最大值的锁定操作,取出最大值后马上进行提交。在这个事务中建议你不要有提示信息等功能,设想以下如果用户离开的话,消息框一直没有关闭,就会导致表的一直锁定。另外这中情况的锁类型应该为(TabLockX),而holdLock按意思也是一直锁定直到事物结束单经测试有时会过早的释放。最后就是对锁定的处理:通过企业管理器的管理下的活动可以查看当前的活动用户和锁,你可以查看属性是因为什么数据库要锁定记录,特别是那种死锁一定要处理,对表锁也要特别注意,而页锁的处理要看数据的访问率,不过一般情况下,DBMS可以很好的处理。写了这麽多,如果有其他的,请大家会帖 通过企业管理器查看锁定的进程的上一条TSQL是SELECT .....简单SELECT为什么会锁定表 把SQL语句写全,还有,你用的是ADO还是BDE,这条SQL语句的数据量有多大? BDE目前数据量还不大表里面就上千条吧企业管理器查看到的SQL也不完整,就是SELECT 字段列表[由二十多个字段]可能是从我程序中的SELECT * FROM 表名得到的 注意BDE用的是客户端游标,当数据量大时,它不会一下子将数据全部从服务器上取回来,因此服务器上将会占用资源。请在你的QUERY。OPEN后加上LAST;FIRST将数据全部取回来。(我曾经碰到过,它会造成阻塞,而且不是死锁,很麻痹人的) 注意BDE用的是客户端游标->可能说错了,呵呵,请见谅! 请详细描述问题。比如作什么操作的时候会发生锁,锁是的类型是什么等等你的问题好像是:我写的程序没有对数据库的显示加锁操作,但是在一台特定的机器执行会出现数据库会被锁定,为什么?这样的问题怎么回答?另外提供一些常识:数据库是否加锁与数据库设置的隔离等级相关,如果隔离等级设的高,则哪怕是select也会加锁。因此排除数据库锁的问题应当首先 检查锁的类型,检查造成锁的程序代码,检查数据库的设置,别着急,找到问题后,一切就简单了 不是我不愿意把代码贴出来只是一些Edit,Post,Insert,Open之类的操作罗列出来可能大家看的头痛因为只有那一台机器会发生这种情况,所以还没确定到底那个过程的代码引起的!另外请问 tomyang(tomyang)怎样设置数据库的隔离等级 TDatabase.TransIsolation的属性设置的是tiReadCommitted 数据库的隔离级别取决于DBMS,很多你在Delphi中设置的是无效的 提示type of expression must be boolean 请问这个控件是什么意思?帮助里怎么没有? rave的問題??? 关于动态数据交换 用delphi实现在WORD中插入表格,如何实现??? [无未结帖记录]有感于2353939 (菜鸟) 的问题,我也想问问,我的这个MIS值多少? 急 在线等待 请问在DELPHI中不用语句建立一个控件数组怎么作 VCL中的assign与":="有什么区别吗为什么有时用:=会造成内存溢出。 有什么API可以得到目前可用端口,或正在使用的端口? 问:这个SQL语句应该怎么写 如何取中表中最大数?
但有几点需要注意,如果你自己进行事务锁,则一定要记着及时对锁进行释放。如要从表中的一个字段进行取最大值加一做为下行主键的问题,你要启动自己的事务,在这各事务中进行最大值的锁定操作,取出最大值后马上进行提交。在这个事务中建议你不要有提示信息等功能,设想以下如果用户离开的话,消息框一直没有关闭,就会导致表的一直锁定。
另外这中情况的锁类型应该为(TabLockX),而holdLock按意思也是一直锁定直到事物结束单经测试有时会过早的释放。
最后就是对锁定的处理:
通过企业管理器的管理下的活动可以查看当前的活动用户和锁,你可以查看属性是因为什么数据库要锁定记录,特别是那种死锁一定要处理,对表锁也要特别注意,而页锁的处理要看数据的访问率,不过一般情况下,DBMS可以很好的处理。
写了这麽多,如果有其他的,请大家会帖
锁定的进程的上一条TSQL是SELECT .....
简单SELECT为什么会锁定表
表里面就上千条吧企业管理器查看到的SQL也不完整,就是SELECT 字段列表[由二十多个字段]
可能是从我程序中的SELECT * FROM 表名得到的
你的问题好像是:我写的程序没有对数据库的显示加锁操作,但是在一台特定的机器执行会出现数据库会被锁定,为什么?
这样的问题怎么回答?另外提供一些常识:
数据库是否加锁与数据库设置的隔离等级相关,如果隔离等级设的高,则哪怕是select也会加锁。因此排除数据库锁的问题应当首先 检查锁的类型,检查造成锁的程序代码,检查数据库的设置,别着急,找到问题后,一切就简单了
只是一些Edit,Post,Insert,Open之类的操作
罗列出来可能大家看的头痛因为只有那一台机器会发生这种情况,所以还没确定到底那个过程的代码引起的!另外请问 tomyang(tomyang)怎样设置数据库的隔离等级
tiReadCommitted