Когда я пытаюсь удалить «MYFILEGROUP», я получаю сообщение об ошибке, что файловая группа не может быть удалена, поскольку она не пуста. Я уже удалил все таблицы, индексы и удалил все файлы, связанные с группой. Чтобы убедиться, я запустил следующие сценарии:
sp_helpfilegroup
возвращает 0 для количества файлов в MYFILEGROUP.
select o.name, s.groupname
from sysobjects o
join sysindexes i on o.id = i.id
join sysfilegroups s on i.groupid = s.groupid
where groupname = 'MYFILEGROUP'
не возвращает строк ...
У меня есть дополнительная информация. Когда я бегу
dbcc checkfilegroup('MYFILEGROUP')
В результате перечислены все первичные ключи с предупреждением:
Cannot process rowset ID 72057597605511168 of object "TableName" (ID 2071414),
index "PK_TableName" (ID 1), because it resides on filegroup "PRIMARY" (ID 1),
which was not checked.
Это ожидаемое поведение или указывает на проблему с системными таблицами? Если это проблема, как мне ее исправить? Я удалил все внешние ключи, индексы и ограничения из базы данных, оставив только таблицы. Когда я пытаюсь удалить пустой "MYFILEGROUP", все еще возникают ошибки.
Возможно ли, что на MYFILEGROUP есть объект разделения? Если это так, то просмотры совместимости ваше использование не вернет никаких результатов (sql server 2000 не имеет объектов разделов!). Сообщение, которое вы получаете о пропуске объекта для проверки, является ожидаемым поведением в 2008 году, когда checkdb проверяет разделенную таблицу / индекс, см. Это Сообщение блога. Вы получите что-нибудь с этим запросом?
select * from sys.partitions p
inner join sys.allocation_units a on a.container_id = p.hobt_id
inner join sys.filegroups f on f.data_space_id = a.data_space_id
where f.name='myfilegroup'
Что-то в глубине души подсказывает мне, что вам нужно делать резервную копию между удалением файла и удалением файловой группы. Кроме того, когда я делал это раньше, я видел несоответствие между sys.database_files и sys.master_files (т.е. в одном из представлений был файл, а в другом - нет), но, по крайней мере, это говорит вам, что сервер все еще в некоторой степени осведомлен о файле. В любом случае сделайте резервную копию) или позвольте регулярной запланированной копии), а затем попробуйте снова удалить файловую группу.
Это может произойти, если для таблицы, которая использовала файловую группу, была определена статистика для этой файловой группы. Вы можете определить, есть ли у вас свисающие статистические данные для этой файловой группы, если вы запустите этот запрос и замените X идентификатором вашей файловой группы:
select object_name(id) AS TableName, * from dbo.sysindexes where groupid = X
Как только вы узнаете имя таблицы, вы можете запустить DROP STATISTICS и, надеюсь, после этого вы сможете удалить файловую группу.