最近公司的一个内部管理系统频频出问题,其后台用的是SQLServer 2000。
20人并发访问时,有的延迟10分钟以上,最终Timeout。该服务器在20人并发访问时,
CPU、内存、硬盘、网络等方面的指标都正常,所以不是硬件性能导致的问题。
经过各种测试未果后,偶尔在应用程序日志中发现“SQLServer 个人版”字样,
立刻考虑是不是由于SQLServer个人版引起的性能问题。因为内部管理系统在另一分公
司(使用SQLServer2000企业版)已经使用几年,并发一二百人时,延迟也不超过几
秒钟。
微软说SQLServer2000个人版在并发超过5人时性能作了限制。
通过select @@version,确定该服务器用的就是个人版。接下来就是重装了。
首先分离数据库,卸载个人版,安装企业版中途出错。经过Google一番,解决
问题,在第二次安装SQLServer时把老的SQLServer清除干净就OK了,步骤:
1、删除SQLServer2000安装目录
2、删除注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Microsoft SQLServer
接下来在新装的SQLServer 2000上附加分离的数据库。遇到孤立用户的问题。
比如,老数据库的表是用户test建立的,当附加该数据库后,test用户此时就成了孤
立用户,没有与之对应的登陆用户名,即使新建一个test登录用户名,而且是以前的
用户密码,使用该用户登录后同样不能操作以前属于test的用户表。因为系统中使用
sid来标识用户,新老test用户有不同的sid,所以出现了上面的问题。
解决的简便方法是使用存储过程sp_change_users_login把登录用户test和
数据库的孤立用户test对应起来:
sp_change_users_login有三种动作,分别是report,update_one和auto_fix。
sp_change_users_login 'report'
列出当前数据库的孤立用户
sp_change_users_login 'update_one','test','test'
把老的test用户和新建的test登陆用户对应起来
如果没有建立test的登录用户,还可以用
sp_change_users_login 'Auto_Fix', 'test', NULL, 'testpassword'
创建一个登录用户test,密码为testpassword。把老的test用户和新建的
test登陆用户对应起来