SQL Server 2008: Неспособный удалить Файл FileStream и Группу файлов

С SQL Server 2008 SP1 я удалил единственную таблицу, которой связали Filestream с ним, но каждый раз я пытаюсь сделать следующее:

изменитесь база данных ConsumerMarketingStore удаляют файл CMS_JobInstanceFiles

изменитесь база данных ConsumerMarketingStore удаляют группу файлов JobInstanceFiles

Я получаю следующее исключение:

Сообщение 5042, Уровень 16, состояние 10, Строка 2 файл 'CMS_JobInstanceFiles' не может быть удален, потому что это не пусто. Сообщение 5042, Уровень 16, состояние 11, Строка 3 группа файлов 'JobInstanceFiles' не может быть удалена, потому что это не пусто.

Как в мире я избавляюсь от файла Filestream и группы файлов? Спасибо!

13
задан James Alexander 15 February 2010 в 23:11
поделиться

3 ответа

Убедитесь, что таблица, которую вы удалили, на самом деле единственная таблица, использующая этот файл filestream:

select * 
from ConsumerMarketingStore.sys.tables t 
join ConsumerMarketingStore.sys.data_spaces ds 
 on t.filestream_data_space_id = ds.data_space_id 
 and ds.name = 'JobInstanceFiles'

Результат вышеприведенного запроса должен быть пустым. Если у вас были другие таблицы со столбцами Filestream, и вы отбросили эти столбцы, таблица все равно будет использовать файл Filestream. Способ избавиться от этого использования - установить файловую группу Filestream таблицы в NULL:

alter table t1 set (filestream_on = "NULL")
14
ответ дан 2 December 2019 в 00:17
поделиться

Вы должны запустить DBCC SHRINKFILE (CMS_JobInstanceFiles, EMPTYFILE)

Это пометит файл как «пустой» и позволит удалить его.

Конечно, ALTER DATABASE не упоминает об этом, но DBCC SHRINKFILE делает ... очевидным, а?

1
ответ дан 2 December 2019 в 00:17
поделиться

После удаления таблицы сборщику мусора требуется некоторое время, чтобы очистить данные. Это может быть причиной происходящего. Вы можете принудительно выполнить сборку мусора, выдав CHECKPOINT.

Вы можете проверить, очищены ли данные FILESTREAM, зайдя в контейнер данных Filestream. Если данные FILESTREAM удалены, то ALTER DATABASE dbname REMOVE FILE обычно приводит к успеху. После этого можно выпустить ALTER DATABASE dbname REMOVE FILEGROUP.

0
ответ дан 2 December 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: