一个客户的思迅服装之星连锁版,今天一个门店出现了 SQL Server 服务不能启动的故障,解决了启动问题并还原数据库后,打开门店系统做数据交换,当上传数据的时候出现 DataWindow Error 错误:「Select error,由于数据移动,未能继续以 NOLOCK 方式扫描」。不能继续上传。如图所示:
出现这个错误是因为数据库中有错误,修复错误后即可正常数据交换。
思迅服装之星数据库错误的修复方法(均在 「查询分析器」 中运行相应的语句):
- 检查错误及数量
DBCC CHECKDB('hbfsv8_branch')
- 设置单用户模式
USE master Go EXEC sp_dboption 'hbfsv8_branch', 'single user', 'TRUE' --设置单用户模式 go
- 数据库修复
DBCC CHECKDB ('hbfsv8_branch','repair_rebuild') Go
- 再次检查有没有错误
DBCC CHECKDB('hbfsv8_branch') --如果没有了红色提示文字,说明修复成功,否则上面数据库修复语句的 repair_rebuild 改成 repair_allow_data_loss 重新执行一遍,并再次检查错误。
- 返回多用户模式
EXEC sp_dboption 'hbfsv8_branch', 'single user','FALSE' go
- 数据库修复好后,最后执行一下自增列的修复
use hbfsv8_branch go declare @tablename varchar(100) declare test_cur cursor for select object_name(id) from syscolumns where status=128 open test_cur fetch test_cur into @tablename while @@fetch_status=0 begin DBCC CHECKIDENT (@tablename, RESEED) fetch test_cur into @tablename end close test_cur deallocate test_cur go
其实检查和修复 SQL 数据库错误的语句都是一样的(参见检测和修复 SQL 数据库错误),只是思迅最后这里多了个 「自增列的修复」(这个东西我自己也不是很明白是啥作用)。