Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
lex452 Member Откуда: Сообщений: 588 |
Нужно было очистить БД. Я trancate основные таблицы, удалил все файлы БД связанные с файловыми группами. Но при попытке удалить сами файловые группы мне выдает ошибку невозможно удалить файловую группу по причине наличия данных Я не понимаю почему? Я же удалил все данные, в чем может быть загвоздка (есть предположение что в индексах, но разве они не должны были удалиться вместе с данными) |
6 мар 16, 16:32 [18903258] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
https://msdn.microsoft.com/ru-ru/library/ms189493(v=sql.120).aspx - EMPTYFILE |
||
6 мар 16, 16:51 [18903309] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
А если у вас в группе только один файл, то ищите все объекты, использующие эту файловую группуSELECT o.[name], o.[type], i.[name], i.[index_id], f.[name] FROM sys.indexes i INNER JOIN sys.filegroups f ON i.data_space_id = f.data_space_id INNER JOIN sys.all_objects o ON i.[object_id] = o.[object_id] WHERE i.data_space_id = f.data_space_id |
6 мар 16, 17:26 [18903419] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
Не понял ссылки EMPTYFILE Выполняет миграцию всех данных из указанного файла в другие файлы в той же файловой группе. У меня в том и проблема, что файловым группам, которые я путаюсь удалить не соответствует ни одного файла, т.к. я их удалил. |
||||
6 мар 16, 19:26 [18903737] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
и какой же командой вы их удалили ? |
||
6 мар 16, 20:03 [18903848] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Объект может быть привязан, хотя файлов, и соответственно, данных, нет. go use master go if exists (select * from sys.databases where name = N'TestGroup') drop database TestGroup go CREATE DATABASE TestGroup ON PRIMARY ( NAME = TestBackup_PRIMARY, FILENAME = 'D:\SQLDATA\TestGroup.mdf'), FILEGROUP SECONDARY ( NAME = TestGroup_SECONDARY, FILENAME = 'D:\SQLDATA\TestGroup_SECONDARY.ndf') LOG ON (NAME = TestGroup_Log, FILENAME = 'D:\SQLDATA\TestGroup_Log.ldf') GO -- Создаём таблицы и данные use TestGroup go create table dbo.Test(id int) ON [SECONDARY] go alter database TestGroup REMOVE FILE TestGroup_SECONDARY go alter database TestGroup REMOVE FILEGROUP [SECONDARY] -- WTF??? -- Msg 5042, Level 16, State 8, Line 30 -- The filegroup 'SECONDARY' cannot be removed because it is not empty. go drop table dbo.Test go alter database TestGroup REMOVE FILEGROUP [SECONDARY] go if exists (select * from sys.databases where name = N'TestGroup') drop database TestGroup go |
||
6 мар 16, 20:03 [18903849] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
Glory, alter database TestGroup REMOVE FILE TestGroup_SECONDARY |
9 мар 16, 07:19 [18909555] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
lex452, Проверил, в индексах нет зависимости с файловой группой. Где еще может быть? Есть ли другие варианты удаления файловой группы кроме drop table dbo.Test? Удалить таблицу уже не вариант, так как в ней уже есть строки |
9 мар 16, 12:33 [18910686] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
18903419 Секционирование было ? |
||
9 мар 16, 12:37 [18910726] Ответить | Цитировать Сообщить модератору |
ланшд
Guest |
alexeyvg, может быть и так create table dbo.Test(id int, [image] image) ON [SECONDARY] TEXTIMAGE_ON [SECONDARY] go create clustered index [IDC] on dbo.Test ([id]) ON [PRIMARY] GO SELECT sau.* ,sp.* ,fg.* FROM sys.allocation_units sau INNER JOIN sys.partitions sp ON (sau.[type] in (1,3) AND sau.[container_id] = sp.[hobt_id]) OR (sau.[type] in (2) AND sau.[container_id] = sp.[partition_id]) INNER JOIN sys.filegroups fg ON sau.[data_space_id] = fg.[data_space_id] WHERE sp.[object_id] = OBJECT_ID('dbo.Test') |
9 мар 16, 14:07 [18911256] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
use master go if exists (select * from sys.databases where name = N'TestGroup') drop database TestGroup go CREATE DATABASE TestGroup ON PRIMARY ( NAME = TestBackup_PRIMARY, FILENAME = 'D:\SQLDATA\TestGroup.mdf'), FILEGROUP SECONDARY ( NAME = TestGroup_SECONDARY, FILENAME = 'D:\SQLDATA\TestGroup_SECONDARY.ndf') LOG ON (NAME = TestGroup_Log, FILENAME = 'D:\SQLDATA\TestGroup_Log.ldf') GO -- Создаём таблицы и данные use TestGroup go create table dbo.Test(id int) ON [SECONDARY] go alter database TestGroup REMOVE FILE TestGroup_SECONDARY go alter database TestGroup REMOVE FILEGROUP [SECONDARY] -- WTF??? -- Msg 5042, Level 16, State 8, Line 30 -- The filegroup 'SECONDARY' cannot be removed because it is not empty. go create clustered index [IDC] on dbo.Test ([id]) ON [PRIMARY] go alter database TestGroup REMOVE FILEGROUP [SECONDARY] go use master go if exists (select * from sys.databases where name = N'TestGroup') drop database TestGroup go |
||||
9 мар 16, 17:14 [18912234] Ответить | Цитировать Сообщить модератору |
ланшд
Guest |
alexeyvg, Неа, https://msdn.microsoft.com/en-us/library/ms174979.aspx TEXTIMAGE_ON The storage of any large value column data specified in CREATE TABLE cannot be subsequently altered. |
9 мар 16, 17:23 [18912283] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Получается, тогда и не поменять использование файлгруппы? Только пересозданием? |
||
9 мар 16, 17:50 [18912390] Ответить | Цитировать Сообщить модератору |
ланшд
Guest |
alexeyvg, да, досадный момент. В какой-то мере, может помочь, если сразу выставить ALTER DATABASE [TestGroup] MODIFY FILEGROUP [SECONDARY] DEFAULT; GO По крайней мере, по умолчанию в PRIMARY попадать не будет |
9 мар 16, 18:12 [18912450] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
По вашему запросу ни одного совпадения нет, секционирование было |
||||
9 мар 16, 20:24 [18912781] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
и в нем участвовала удаляемая сейчас группа ? |
||
9 мар 16, 20:29 [18912787] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
Glory, Да, каждый день создается секция, файловая группа и файл к ней за истекшие сутки, вот мне необходимо удалить старые файлы для освобождения места |
9 мар 16, 20:31 [18912792] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
А вы, видимо, просто удаляете данные из таблицы из соотв. секции, и думаете, что всё, можно удалять? Так не работает, таблица привязана к файлгруппе, через схему и функцию секционирования, и там нужно освобождать группу от них. Посмотрите хелп по ALTER PARTITION FUNCTION А для просмотра связей с файлгруппой вот: select * from sys.partition_functions f JOIN sys.partition_schemes ps ON ps.function_id = f.function_id JOIN sys.destination_data_spaces dds ON dds.partition_scheme_id = ps.data_space_id JOIN sys.filegroups fg ON fg.data_space_id = dds.data_space_id JOIN sys.partition_range_values r on r.function_id = f.function_id and dds.destination_id = r.boundary_id + cast(f.boundary_value_on_right as int) left join sys.database_files sf on sf.data_space_id = ps.data_space_id |
||
9 мар 16, 20:43 [18912839] Ответить | Цитировать Сообщить модератору |
lex452 Member Откуда: Сообщений: 588 |
Задача решена. Проблема была в секционировании, в схеме объединил секции через merge, и получилось удалить группы. Всем спасибо за помощь |
14 мар 16, 22:31 [18931067] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |