以下方案用于厦门某工贸有限公司用友ERP-U890版本的数据问题。
版本及模块:用友ERP-U890;财务供应链生产一体化
尝试在数据库8 中提取逻辑页 (1:1110) 失败。该逻辑页属于分配单元XXX ,而非 XXX。
看到这样的消息就证明我们的数据库或者表损坏了,需要我们去修复一下,具体的修复的步骤如下:
1. DBCC CHECKDB
重启服务器后,在没有进行任何操作的情况下,在SQL查询分析器中执行以下SQL进行数据库的修复,修复数据库存在的一致性错误与分配错误。
Sql代码
use master
declare @databasename varchar(255)
set @databasename='需要修复的数据库实体的名称'
exec sp_dboption @databasename, N'single', N'true'--将目标数据库置为单用户状态
dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)
dbcc checkdb(@databasename,REPAIR_REBUILD)
exec sp_dboption @databasename, N'single',N'false'--将目标数据库置为多用户状态
然后执行 DBCC CHECKDB('需要修复的数据库实体的名称')检查数据库是否仍旧存在错误。注意:修复后可能会造成部分数据的丢失。
2. DBCC CHECKTABLE
如果DBCC CHECKDB检查仍旧存在错误,可以使用DBCC CHECKTABLE来修复。
Sql代码
1.use需要修复的数据库实体的名称
2.declare @dbnamevarchar(255)
3.set@dbname='需要修复的数据库的名称'
4.exec sp_dboption @dbname,'singleuser','true'
5.dbccchecktable('需要修复的数据表的名称',REPAIR_ALLOW_DATA_LOSS)
6.dbccchecktable('需要修复的数据表的名称',REPAIR_REBUILD)
7.------把’ 需要修复的数据表的名称’更改为执行DBCCCHECKDB时报错的数据表的名称
8.exec sp_dboption @dbname,'singleuser','false'
use 需要修复的数据库实体的名称
declare @dbname varchar(255)
set @dbname='需要修复的数据库的名称'
exec sp_dboption @dbname,'single user','true'
dbcc checktable('需要修复的数据表的名称',REPAIR_ALLOW_DATA_ LOSS)
dbcc checktable('需要修复的数据表的名称',REPAIR_REBUILD)
------把’ 需要修复的数据表的名称’更改为执行DBCC CHECKDB时报错的数据表的名称
exec sp_dboption @dbname,'single user','false'
3. 其他的一些常用的修复命令
DBCC DBREINDEX 重建指定数据库中表的一个或多个索引
用法:
Sql代码
1.DBCC DBREINDEX (表名,’’) 修复此表所有的索引。
DBCC DBREINDEX (表名,’’) 修复此表所有的索引。
4.DBCC CHECKALLOC
检查指定数据库的磁盘空间分配结构的一致性