我在SQL Server 2017 CU3上遇到一些奇怪的错误消息。我正在迁移数据库并重组文件组。“重新组织”是指我使用存储过程,该过程在对象的新文件组上创建分区函数和分区方案,在分区时重建索引,然后删除分区。
最后,我有一些空文件组。他们的文件被删除。文件组本身也将被删除。在大多数情况下,此方法效果很好。但是对于两个数据库,我删除了文件... 剩下一个文件组,但没有文件关联,但是
ALTER DATABASE REMOVE FILEGROUP
引发错误5042:
无法删除文件组“ xyz”,因为它不为空。
题
我如何摆脱那个空文件组...可能是什么问题?
我已经阅读了一些常见问题,但是它们在我的系统中不存在:
已检查:
SELECT * FROM sys.partition_schemes; SELECT * FROM sys.partition_functions;
0行...数据库中没有分区对象
UPDATE STATISTICS
对于数据库中的所有对象没有效果
检查文件组上的索引:
SELECT * FROM sys.data_spaces ds INNER JOIN sys.indexes i ON ds.data_space_id = i.data_space_id WHERE ds.name = 'xyz'
0行
检查文件组中的对象:
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 WHERE au.type_desc = 'LOB_DATA' AND ds.name ='xyz'
0行
在从文件组中删除文件之前,我还尝试了DBCC SHRINKFILE
使用参数EMPTYFILE
。这对我来说真的没有意义,但是我阅读了解决方案以将其描述为修复程序。无论如何都没有效果。
我有一些希望阅读有关服务器故障的问题,并尝试了以下方法:
- 更新所有统计信息
- 删除所有与索引无关的统计信息
但是,这没有效果。我仍然有一个没有文件关联的文件组,并且该文件组无法删除。我完全感到困惑,因为这发生在某些数据库中,而不是在其他数据库中(结构相同)。当我DBCC CHECK FILEGROUP
对这个空文件组执行操作时,会收到一堆错误消息,如下所示:
无法处理对象“ STORY_TRANSLATIONSCCC”(ID 120387498),索引“ Ref90159CCC”(ID 2)的行集ID 72057594712162304,因为它位于文件组“ CCC_APPLICATION_new”(ID 8)上,未经检查。
“ STORY_TRANSLATIONSCCC”的DBCC结果。0页中的对象“ STORY_TRANSLATIONSCCC”中有0行。
这是正常现象还是表明有异常之处?
这个问题可能是重复的,但是我在dba.stackexchange上的其他问题中找不到适合我的解决方案。请查看列表,我已经尝试过了。这与“ 不能删除未使用的文件组 ”中描述的解决方案相同。
更多细节
可能有助于在错误发生之前了解我的操作。我正在计划迁移到新服务器。我目前正在测试实例上对此进行测试。从生产服务器还原数据库,并将恢复模型切换为简单模型。我的目标是重组文件组,并从每个文件组一个文件的模型转移到每个文件组两个文件的模型。为此,我创建了一个新的空文件组,每个文件组有两个文件,并将数据移到上方。不幸的是,大多数对象都具有LOB数据(XML和二进制)...因此,我也利用分区作为助手来移动lob数据。最后,所有数据都驻留在新文件组中,而旧文件组为空。然后,我删除所有文件,并删除相应的文件组。主文件组保留,仅添加另一个文件。我的问题。此过程工作正常,但可以删除两个数据库中的文件,但不能删除文件组。令人惊讶的是,如果在移动数据和删除旧文件组的过程中没有遇到问题,则这些数据库的结构应该与其他数据库的结构相同。
因此,这是发生问题的两个数据库的文件组和文件的列表:
- CCC_GENTE
之前
+-----------------+------------+
| Filegroup | Filename |
+-----------------+------------+
| CCC_APPLICATION | CCC_APP |
+-----------------+------------+
| CCC_ARCHIVE | CCC_ARCHIV |
+-----------------+------------+
| CCC_AXN | CCC_AXN |
+-----------------+------------+
| CCC_GDV | CCC_GDV |
+-----------------+------------+
| PRIMARY | CCC |
+-----------------+------------+
后
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| Filegroup name | Filegroup temporary name | Filename (logical) | Status |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | - | CCC_APP | file removed, filegroup cannot be removed (error) |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | - | CCC_ARCHIV | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | - | CCC_AXN | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | - | CCC_GDV | file and filegroup removed |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| PRIMARY | - | CCC | file renamed to PRIMARY_1 |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| PRIMARY | - | PRIMARY_2 | new file added |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | CCC_APPLICATION_new | CCC_APPLICATION_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_APPLICATION | CCC_APPLICATION_new | CCC_APPLICATION_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | CCC_ARCHIVE_new | CCC_ARCHIVE_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_ARCHIVE | CCC_ARCHIVE_new | CCC_ARCHIVE_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | CCC_AXN_new | CCC_AXN_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_AXN | CCC_AXN_new | CCC_AXN_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | CCC_GDV_new | CCC_GDV_1 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
| CCC_GDV | CCC_GDV_new | CCC_GDV_2 | new filegroup renamed at the end |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
我希望能有所帮助。还有另一个数据库,其中文件组的名称不同,但是为了简洁起见,我不再赘述。