场景:
同事在维护SQL SERVER数据库时,直接将日志文件LDF文件删除,然后附加上数据库后。
软件读其它表都正常,只有对某一个表查询时报错。
尝试在数据库 7 中提取逻辑页 (1:3790083) 失败。该逻辑页属于分配单元 720575940
具体的可参照微软官方:MSSQLSERVER_605 - SQL Server | Microsoft Docs
解决方案:
首先,找到出问题的数据表,运行以下查询,确定与消息中指定的分配单元相关联的表。用错误消息中说明的分配单元替换 allocation_unit_id
。
USE dbName;
GO
SELECT au.allocation_unit_id, OBJECT_NAME(p.object_id) AS table_name, fg.name AS filegroup_name,
au.type_desc AS allocation_type, au.data_pages, partition_number
FROM sys.allocation_units AS au
JOIN sys.partitions AS p ON au.container_id = p.partition_id
JOIN sys.filegroups AS fg ON fg.data_space_id = au.data_space_id
WHERE au.allocation_unit_id = 720575940 OR au.allocation_unit_id = 720575940
ORDER BY au.allocation_unit_id;
GO
检测出来的表,与我预估的表一致。
然后,各种尝试,用了网上其它办法解决,并没有效果。
如表转移,查询大量数据时,会有报错。
每当使用 COUNT(1) 查询会报错。
SELECT COUNT(1)
FROM [BoltDB].[dbo].[AAA]
后来我在重建索引时,发现是主键重复了。主键重复后,就会出现,
“尝试在数据库 7 中提取逻辑页 (1:3790083) 失败。该逻辑页属于分配单元 720575940” 此类问题。
确定好是由于主键重复引起,分3个步骤,解决。
(1)查询出主键重复数据
select id
FROM [BoltDB].[dbo].[AAA]
group by id
having count(1)>1
(2)将主键重复数据去重,插入到表中
(3)删除主键重复数据
delete from [BoltDB].[dbo].[AAA]
where id in (
select id
FROM [BoltDB].[dbo].[AAA]
group by id
having count(1)>1
)文章来源:https://www.toymoban.com/news/detail-453950.html
完美解决此问题,希望对你的问题有帮助!文章来源地址https://www.toymoban.com/news/detail-453950.html
到了这里,关于尝试在数据库 7 中提取逻辑页 (1:3790083) 失败。该逻辑页属于分配单元 720575940的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!