0

我在数据库中有一个文件组,其中没有无法删除的逻辑文件。错误消息指出文件组不为空。

我已使用以下查询验证不存在分区。

SELECT * FROM sys.partition_functions
SELECT * FROM SYS.PARTITION_RANGE_VALUES
SELECT * FROM SYS.PARTITION_SCHEMES

我还运行了以下查询以查找与文件组相关的任何内容,但什么也没找到

SELECT
    au.*,
    ds.name AS [data_space_name],
    ds.type AS [data_space_type],
    p.rows,
    o.name AS [object_name]
FROM sys.allocation_units au
    INNER JOIN sys.data_spaces ds
        ON au.data_space_id = ds.data_space_id
    INNER JOIN sys.partitions p
        ON au.container_id = p.partition_id
    INNER JOIN sys.objects o
        ON p.object_id = o.object_id
ORDER BY ds.name;

SELECT *
FROM sys.filegroups fg
LEFT OUTER JOIN sysfilegroups sfg
    ON fg.name = sfg.groupname
LEFT OUTER JOIN sysfiles f
    ON sfg.groupid = f.groupid
LEFT OUTER JOIN sys.allocation_units i
    ON fg.data_space_id = i.data_space_id
WHERE i.data_space_id IS NULL;

select * from sys.allocation_units 
where data_space_id = (select data_space_id from sys.data_spaces where name = 'HL7');

此外,我已经能够备份数据库并恢复到不同的 SQL Server 并复制此问题。

还有什么可以检查以找出阻止文件组被删除的原因?

4

1 回答 1

0

我最近也有类似的情况。我跑了

DBCC SHRINKFILE (N'myfile', EMPTYFILE)

之后我能够删除该文件。

坦率地说,我没想到它会起作用,因为在我的情况下,文件组中没有其他文件。所以即使操作应该

将指定文件中的所有数据迁移到同一文件组中的其他文件

没有文件可将数据迁移. 但它奏效了!没有错误或警告。在我毫无问题地删除文件之后。猜测有一些混乱的条目会困扰 REMOVE FILE 而不是 SHRINKFILE。

试一试并在此处发布您的结果。

于 2021-04-26T13:32:38.683 回答