У меня возникают некоторые странные сообщения об ошибках в 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
эту пустую файловую группу, я получаю кучу сообщений об ошибках, таких как:
Не удается обработать набор строк с идентификатором 72057594712162304 объекта "STORY_TRANSLATIONSCCC" (ID 120387498), индекс "Ref90159CCC" (ID 2), поскольку он находится в файловой группе "CCC_APPLICATION_new" (ID 8), которая не была проверена.
Результаты DBCC для STORY_TRANSLATIONSCCC. Для объекта "STORY_TRANSLATIONSCCC" имеется 0 строк на 0 страницах.
Это нормально или это указывает на что-то необычное?
Этот вопрос может быть дубликатом, однако я не могу найти рабочее исправление для меня в других вопросах на dba.stackexchange. Пожалуйста, посмотрите на список того, что я уже пробовал. Это идентично решениям, описанным в разделе Невозможно удалить неиспользуемые файловые группы .
Подробнее
Может быть, это помогает понять, что я делаю, прежде чем ошибка произойдет. Я планирую переход на новый сервер. В настоящее время я тестирую это на тестовом экземпляре. Базы данных восстанавливаются с сервера prod, а модель восстановления переключается на простую. Моя цель - реструктурировать файловые группы и перейти от модели с одним файлом на файловую группу к модели с двумя файлами на файловую группу. Чтобы добиться этого, я создаю новые пустые файловые группы по два файла в каждой и перемещаю данные. К сожалению, большинство объектов имеют 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 |
+-----------------+--------------------------+--------------------+----------------------------------------------------+
Я надеюсь, что это немного помогает. Есть также вторая база данных, в которой имена файловых групп отличаются, но я оставлю это для краткости.