解决过程:(用你的数据库实体名替换newdb)
1.建一个新库newdb,最好目录是SQL的默认目录。
2.停掉数据库。删除新库的log文件,用metadb.mdf覆盖newdb.mdf。(这里的metadb就是出问题的帐套实体名,其实和我们新建的帐套一样,才会替换啊)
3.启动数据库服务器。数据库newdb的状态为“置疑”。
4. 允许对系统目录直接修改
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
update sysdatabases set status=-32768 where dbid=DB_ID('newdb')
5.停掉服务,删掉覆盖过来的日志,重建log
dbcc rebuild_log('newdb','C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Data\\newdb_log.ldf')
6.dbcc检查
dbcc checkdb('newdb')
7.设置数据库为正常状态
sp_dboption 'newdb','dbo use only','false'
8 不允许对系统目录直接修改
sp_configure 'allow updates',0
go
reconfigure with override
go
整个运行语句:
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
update sysdatabases set status=-32768 where dbid=DB_ID('AIS20080821091903')
dbcc rebuild_log('AIS20080821091903','C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Data\\AIS20080821091903_log.ldf')
dbcc checkdb('AIS20080821091903')
sp_dboption 'AIS20080821091903','dbo use only','false'
sp_configure 'allow updates',0
go
reconfigure with override
go
又出现多次置疑,到最后,存货核算、入库查询功能都不能用了。
下面就用了两个语句:
DBCC CHECKdb ‘检查数据库的
dbcc checktable(ICPurchase) ‘检查数据表的
DBCC CHECKdb 检查,发现都是类似这样的错误:
'REC_Code_PositionCategory' 的 DBCC 结果。
服务器: 消息 8951,级别 16,状态 1,行 1
表错误: 表 'ICPurchaseEntry'(ID 108631530)。索引 'IDX_ICPurchaseEntry_FGuid'(ID 10)中下列行的键缺少或无效:
服务器: 消息 8955,级别 16,状态 1,行 1
数据行(1:29384:4)(由 RID = (1:29384:4) FInterID = 1325 and FEntryID = 3 and ? = NULL 标识)的索引值为 FGUID = C70F9FD2-6DA2-4295-B3E5-1043B4790855 and FInterID = 1325 and FEntryID = 3 and ? = NULL。
服务器: 消息 8951,级别 16,状态 1,行 1
表错误: 表 'ICPurchaseEntry'(ID 108631530)。索引
'IDX_ICPurchaseEntry_FGuid'(ID 10)中下列行的键缺少或无效:
服务器: 消息 8955,级别 16,状态 1,行 1
发现主要是索引错误,那么修改索引就行了。
1.找到索引
2.
3.
4.
只要分析、执行成功,回头再检查表,没有问题
又出现以下错误:
'CB_TableFieldInfo' 的 DBCC 结果。
服务器: 消息 8929,级别 16,状态 1,行 1
对象 ID 479392827: 在文本 ID 29247275008 中发现错误,该文本的所有者是由 RID = (1:27867:82) FSchemeID = 42 and FKey = 'HideColumns' 标识的数据记录。
服务器: 消息 8964,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:22238),槽 22,文本 ID 26887847936)未被引用。
服务器: 消息 8964,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:22238),槽 23,文本 ID 26887913472)未被引用。
服务器: 消息 8964,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:22238),槽 24,文本 ID 26887979008)未被引用。
服务器: 消息 8964,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:22238),槽 25,文本 ID 26888044544)未被引用。
服务器: 消息 8964,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:22238),槽 26,文本 ID 26888110080)未被引用。
服务器: 消息 8964,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:22238),槽 27,文本 ID 26888175616)未被引用。
服务器: 消息 8961,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:28704),槽 1,文本 ID 29247275008)与该节点位于页 (1:22238),槽 27 处的引用不匹配。
服务器: 消息 8974,级别 16,状态 1,行 1
对象 'HR_CMP_CompetencyLevel' 有 6 行,这些行位于 1 页中。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
服务器: 消息 8929,级别 16,状态 1,行 1
对象 ID 479392827: 在文本 ID 29247275008 中发现错误,该文本的所有者是由 RID = (1:27867:82) FSchemeID = 42 and FKey = 'HideColumns' 标识的数据记录。
服务器: 消息 8964,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:22238),槽 22,文本 ID 26887847936)未被引用。
服务器: 消息 8964,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:22238),槽 23,文本 ID 26887913472)未被引用。
服务器: 消息 8964,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:22238),槽 24,文本 ID 26887979008)未被引用。
服务器: 消息 8964,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:22238),槽 25,文本 ID 26888044544)未被引用。
服务器: 消息 8964,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:22238),槽 26,文本 ID 26888110080)未被引用。
服务器: 消息 8964,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:22238),槽 27,文本 ID 26888175616)未被引用。
服务器: 消息 8961,级别 16,状态 1,行 1
表错误: 对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:28704),槽
1,文本 ID 29247275008)与该节点位于页 (1:22238),槽 27 处的引用不匹配。
服务器: 消息 8974,级别 16,状态 1,行 1
不止一个节点引用了文本节点。对象 ID 479392827。text、ntext 或 image 节点(位于页 (1:28704),槽 1,文本 ID 29247275008)被页 (1:22238),槽 27 指向,同时又被页 (1:22233),槽 21 指向。
'ICSchemeProfileEntry' 的 DBCC 结果。
解决方法:
USE MASTER
GO
sp_dboption 'AIS20081201123537', 'single user', 'true'
Go
DBCC CHECKDB('AIS20081201123537', REPAIR_ALLOW_DATA_LOSS)
Go
USE AIS20081201123537
go
exec sp_msforeachtable 'DBCC CHECKTABLE(''?'',REPAIR_ALLOW_DATA_LOSS)'
exec sp_msforeachtable 'DBCC DBREINDEX(''?'')'
go
sp_dboption 'AIS20081201123537', 'single user', 'false'
回头再检查数据库,没有发现任何错误。
完了,恢复帐套的时候还是会出错,分离数据库,删掉日志,然后附件数据库,备份后再恢复就没有问题了。
因篇幅问题不能全部显示,请点此查看更多更全内容