Удалить (объединить) файл вторичных данных базы данных SQL Server

У меня есть резервная копия базы данных, для которой SQL Server Management Studio сообщает, что в ней есть три файла: файл .mdf, файл .ndf и один файл .ldf. Этот вторичный файл данных (.ndf) был создан безо всякой очевидной причины, поэтому я хочу полностью удалить его (конечно, без потери данных), желательно во время восстановления базы данных из резервной копии.

Это вообще выполнимо?


person Anton Gogolev    schedule 02.02.2010    source источник
comment
Целью NDF является распространение файлового ввода-вывода. Если у вас на живом сервере есть NDF, не возитесь со схемой. Почему вас беспокоит NDF?   -  person Hassan Syed    schedule 02.02.2010
comment
@Hassan Он был создан только для преодоления фрагментации тома NTFS и не имеет других причин для своего существования. Хотя я согласен с тем, что NDF - это хорошо, небрежно созданные NDF - это зло.   -  person Anton Gogolev    schedule 02.02.2010


Ответы (2)


Хорошо, нашел решение.

Сначала сделайте резервную копию базы данных.

Выполните это:

USE database_name;

Затем выполните это и замените logical_ndf_file_name логическим именем вашего файла NDF (которое вы можете легко узнать через Database-> Properties_Files):

DBCC SHRINKFILE('logical_ndf_file_name', EMPTYFILE);
ALTER DATABASE database_name REMOVE FILE logical_ndf_file_name;
person Anton Gogolev    schedule 02.02.2010
comment
в вашем файле были данные? и если да, то сколько времени это заняло, и была ли БД жива? - person Hassan Syed; 02.02.2010
comment
@Hassan NDF был около 8 ГБ, а MDF - около 60 ГБ. Всего на это ушло минут 20. Не уверен, что вы имеете в виду под словом «жить». Оффлайн не переводил, но и запросы к нему не выполнялись. - person Anton Gogolev; 02.02.2010
comment
интересная информация. Под Live я имел в виду производственное использование или работу с клиентами. - person Hassan Syed; 02.02.2010
comment
@Hassan Я сомневаюсь, что он был доступен для производственного использования. - person Anton Gogolev; 02.02.2010
comment
Чтобы добавить здесь некоторые пояснения, «ndf_file_name» в строке кода выше относится к логическому имени файла, а не к физическому. Мне это было не сразу понятно. - person Ben Barreth; 25.03.2013

Я успешно выполнил пустой, а затем ndf drop во время загрузки продукта. Я думаю, что важно запустить drop ndf в той же транзакции, что и пустая, чтобы база данных не пыталась записать в файл, который вы удаляете, но затем после пустой базы данных помечает файлы как непригодные для использования, о чем свидетельствует попытка другой пустой коротышка после.

person user3164106    schedule 03.02.2016