Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не удается удалить файловую группу  [new]
lex452
Member

Откуда:
Сообщений: 588
Нужно было очистить БД. Я trancate основные таблицы, удалил все файлы БД связанные с файловыми группами.
Но при попытке удалить сами файловые группы мне выдает ошибку

невозможно удалить файловую группу по причине наличия данных

Я не понимаю почему? Я же удалил все данные, в чем может быть загвоздка (есть предположение что в индексах, но разве они не должны были удалиться вместе с данными)
6 мар 16, 16:32    [18903258]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
Glory
Member

Откуда:
Сообщений: 104751
lex452
Я же удалил все данные, в чем может быть загвоздка (есть предположение что в индексах, но разве они не должны были удалиться вместе с данными)

https://msdn.microsoft.com/ru-ru/library/ms189493(v=sql.120).aspx - EMPTYFILE
6 мар 16, 16:51    [18903309]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
lex452
Member

Откуда:
Сообщений: 588
Glory
lex452
Я же удалил все данные, в чем может быть загвоздка (есть предположение что в индексах, но разве они не должны были удалиться вместе с данными)

https://msdn.microsoft.com/ru-ru/library/ms189493(v=sql.120).aspx - EMPTYFILE


Не понял ссылки
EMPTYFILE
Выполняет миграцию всех данных из указанного файла в другие файлы в той же файловой группе.
У меня в том и проблема, что файловым группам, которые я путаюсь удалить не соответствует ни одного файла, т.к. я их удалил.
6 мар 16, 19:26    [18903737]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
Glory
Member

Откуда:
Сообщений: 104751
lex452
У меня в том и проблема, что файловым группам, которые я путаюсь удалить не соответствует ни одного файла, т.к. я их удалил.

и какой же командой вы их удалили ?
6 мар 16, 20:03    [18903848]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
lex452
У меня в том и проблема, что файловым группам, которые я путаюсь удалить не соответствует ни одного файла, т.к. я их удалил.
Теперь нужно убедится, что файловой группе не соответствует ни один объект.
Объект может быть привязан, хотя файлов, и соответственно, данных, нет.

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]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
lex452
Member

Откуда:
Сообщений: 588
Glory,

alter database TestGroup REMOVE FILE TestGroup_SECONDARY
9 мар 16, 07:19    [18909555]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
lex452
Member

Откуда:
Сообщений: 588
lex452,

Проверил, в индексах нет зависимости с файловой группой. Где еще может быть?

Есть ли другие варианты удаления файловой группы кроме drop table dbo.Test?
Удалить таблицу уже не вариант, так как в ней уже есть строки
9 мар 16, 12:33    [18910686]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
Glory
Member

Откуда:
Сообщений: 104751
lex452
Проверил, в индексах нет зависимости с файловой группой. Где еще может быть?

18903419

Секционирование было ?
9 мар 16, 12:37    [18910726]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
ланшд
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]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
lex452
Есть ли другие варианты удаления файловой группы кроме drop table dbo.Test?
Удалить таблицу уже не вариант, так как в ней уже есть строки
Так смените ей файлгруппу.
ланшд
может быть и так
Вот если создать кластерный индекс на другую группу, то файлгруппа таблицы изменится, и её можно будет удалить.
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]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
ланшд
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]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
ланшд
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.
А, что то я на TEXTIMAGE_ON не обратил внимания...
Получается, тогда и не поменять использование файлгруппы? Только пересозданием?
9 мар 16, 17:50    [18912390]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
ланшд
Guest
alexeyvg,

да, досадный момент.

В какой-то мере, может помочь, если сразу выставить

ALTER DATABASE [TestGroup] MODIFY FILEGROUP [SECONDARY] DEFAULT;
GO

По крайней мере, по умолчанию в PRIMARY попадать не будет
9 мар 16, 18:12    [18912450]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
lex452
Member

Откуда:
Сообщений: 588
Glory
lex452
Проверил, в индексах нет зависимости с файловой группой. Где еще может быть?

18903419

Секционирование было ?


По вашему запросу ни одного совпадения нет, секционирование было
9 мар 16, 20:24    [18912781]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
Glory
Member

Откуда:
Сообщений: 104751
lex452
секционирование было

и в нем участвовала удаляемая сейчас группа ?
9 мар 16, 20:29    [18912787]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
lex452
Member

Откуда:
Сообщений: 588
Glory,

Да, каждый день создается секция, файловая группа и файл к ней за истекшие сутки, вот мне необходимо удалить старые файлы для освобождения места
9 мар 16, 20:31    [18912792]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
lex452
Glory,

Да, каждый день создается секция, файловая группа и файл к ней за истекшие сутки, вот мне необходимо удалить старые файлы для освобождения места
Ну, задача решена, файлы же удалились, место освободилось :-)

А вы, видимо, просто удаляете данные из таблицы из соотв. секции, и думаете, что всё, можно удалять?
Так не работает, таблица привязана к файлгруппе, через схему и функцию секционирования, и там нужно освобождать группу от них.
Посмотрите хелп по 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]     Ответить | Цитировать Сообщить модератору
 Re: Не удается удалить файловую группу  [new]
lex452
Member

Откуда:
Сообщений: 588
Задача решена. Проблема была в секционировании, в схеме объединил секции через merge, и получилось удалить группы. Всем спасибо за помощь
14 мар 16, 22:31    [18931067]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить