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

Откуда:
Сообщений: 9627
делал по этой статье
после вфполнение, делаю sp_help 'моя таблица'.
Data_located_on_file_froup пишет новую файловую группу...
Но!
Размер файлов не изменился. У меня в этой таблице почти 5 гиг изображений, а размер файла созданного для этой файловой группы 5 мб.
То есть данные всетаки остались в группе PRIMARY.
Как их перетащить-то?
17 май 11, 02:46    [10662283]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9627
В менеджмент студии смотрю кластерный индекс - файловая группа указано новая.
Для теста накидал в таблицу кучу тяжелых файлов - размер основного файла увеличиается, а файла этой файловой группы нет!
То есть данные пишутся в группу PRIMARY!

Я, кстати наврал про 2005, SQL2008R2 Express.
Вот скрипт того, что я делал
use master
GO
ALTER DATABASE enterprise ADD FILEGROUP UserFiles
GO
ALTER DATABASE [enterprise] 
ADD FILE ( NAME = N'user_files', 
FILENAME = N'D:\SQLDATA\user_files.ndf' , 
SIZE = 3072KB , FILEGROWTH = 10%) 
TO FILEGROUP [UserFiles]
GO
USE enterprise
GO
ALTER TABLE UserFiles.Files DROP CONSTRAINT PK__Files__0D9B94C5 WITH (MOVE TO UserFiles)
GO
ALTER TABLE UserFiles.Files ADD CONSTRAINT PK_UserFiles PRIMARY KEY(FileId)
17 май 11, 03:01    [10662291]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
iljy
Member

Откуда:
Сообщений: 8711
Дикий Билл,

а вы из каких соображений MOVE указываете при удалении, а не при создании ограничения?
17 май 11, 08:48    [10662475]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9627
iljy
Дикий Билл,

а вы из каких соображений MOVE указываете при удалении, а не при создании ограничения?
Гм... в примере так.
Попробую при создании, потом отпишусь :)
17 май 11, 08:54    [10662508]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Дикий Билл
ALTER TABLE UserFiles.Files ADD CONSTRAINT PK_UserFiles PRIMARY KEY(FileId)
[/src]
Вот тут вы создаёте кластерный индекс (кстати, надо бы указать, что он кластерный) в файловой группе по умолчанию, т.е. в PRIMARY
17 май 11, 08:56    [10662516]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9627
alexeyvg
Вот тут вы создаёте кластерный индекс (кстати, надо бы указать, что он кластерный) в файловой группе по умолчанию, т.е. в PRIMARY
Но в SSMS показывает, что он в группе UserFiles.
17 май 11, 09:00    [10662530]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Дикий Билл
alexeyvg
Вот тут вы создаёте кластерный индекс (кстати, надо бы указать, что он кластерный) в файловой группе по умолчанию, т.е. в PRIMARY
Но в SSMS показывает, что он в группе UserFiles.
"Он" - это констрейн, индекс или таблица?
17 май 11, 09:04    [10662540]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9627
alexeyvg
"Он" - это констрейн, индекс или таблица?
Констрейнт. Primary key.
17 май 11, 09:16    [10662584]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9627
iljy
Дикий Билл,

а вы из каких соображений MOVE указываете при удалении, а не при создании ограничения?
Судя по БОЛ (и по экспериментам) эту опцию можно указывать только при удалении.

<drop_clustered_constraint_option> ::=
{
MAXDOP = max_degree_of_parallelism
| ONLINE = {ON | OFF }
| MOVE TO { partition_scheme_name ( column_name ) | filegroup
| "default"}
}
17 май 11, 09:17    [10662587]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9627
alexeyvg
Дикий Билл
ALTER TABLE UserFiles.Files ADD CONSTRAINT PK_UserFiles PRIMARY KEY(FileId)
[/src]
Вот тут вы создаёте кластерный индекс (кстати, надо бы указать, что он кластерный) в файловой группе по умолчанию, т.е. в PRIMARY

Изменил на
ALTER TABLE UserFiles.Files ADD CONSTRAINT
	PK_FileId PRIMARY KEY CLUSTERED 
	(
	FileId
	)  ON Us
Результат тот же.
Всё показывает, что данные в UserFiles, но размер файлов не меняется и реально они в Primary :(
17 май 11, 09:19    [10662593]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9627
ALTER TABLE UserFiles.Files ADD CONSTRAINT
	PK_FileId PRIMARY KEY CLUSTERED 
	(
	FileId
	)  ON UserFiles
17 май 11, 09:20    [10662597]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9627
Можно конечно сделать новую таблицу в этой файловой группе, потом перенести туда данные, потом исхдную удалить, а эту переименовать в неё :) но как-то это неправильно.
(Хотя работает - проверил)
17 май 11, 09:22    [10662606]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9627
create unique clustered index PK_files ON UserFiles.Files(fileid) ON UserFiles

Тот же эффект :(
Вообще у кого-то получлся подобный перенос не создавая новую таблицу?
17 май 11, 09:37    [10662663]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Дикий Билл
Всё показывает, что данные в UserFiles, но размер файлов не меняется и реально они в Primary :(
Хотя да, если не указывать, то создаётся в UserFiles, т.к. таблица к ней приписана. Хотя лучьше указывать.

Но вот я выполнил ваш скрипт, увеличивается файл в группе UserFiles

Просто внимательнее делайте, всё должно работать.
17 май 11, 09:39    [10662672]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9627
alexeyvg
Но вот я выполнил ваш скрипт, увеличивается файл в группе UserFiles
Просто внимательнее делайте, всё должно работать.
Работает???
В смысле внимательно? Ошибки ведь нет?
sp_help 'UserFiles.Files' показывает, что данные в группе UserFiles. Но они не там!!! Этот файл только 5 мб :)

Приведите пожалуйста тот скрипт который вы выполнили! Я в полном тупике!
17 май 11, 09:47    [10662720]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Дикий Билл
alexeyvg
Но вот я выполнил ваш скрипт, увеличивается файл в группе UserFiles
Просто внимательнее делайте, всё должно работать.
Работает???
В смысле внимательно? Ошибки ведь нет?
sp_help 'UserFiles.Files' показывает, что данные в группе UserFiles. Но они не там!!! Этот файл только 5 мб :)

Приведите пожалуйста тот скрипт который вы выполнили! Я в полном тупике!
Да в общем то то же самое, что и у вас, только имя базы и таблицы другие (которые у меня уже были)

ALTER DATABASE [test] ADD FILEGROUP UserFiles
go
ALTER DATABASE [test] 
ADD FILE ( NAME = N'user_files', 
FILENAME = N'C:\databases\test2.ndf') 
TO FILEGROUP [UserFiles]
GO
USE [test]
GO
ALTER TABLE [dbo].[T] DROP CONSTRAINT PK_T WITH (MOVE TO UserFiles)
GO
ALTER TABLE [dbo].[T] ADD CONSTRAINT PK_T PRIMARY KEY(id)
GO
insert [dbo].[T](name) select o1.name from sysobjects o1 cross join sysobjects o2 cross join sysobjects o3
Файл test2.ndf увеличился с первоначального мегабайта до 68 мегабайт.

Вы приведите скрипт создания таблицы с всеми индексами и с указанием файлгруп
17 май 11, 10:24    [10662965]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9627
alexeyvg
Да в общем то то же самое, что и у вас, только имя базы и таблицы другие (которые у меня уже были)

Мож дело в сервиспаках, вернее их отсутствии...
alexeyvg
Вы приведите скрипт создания таблицы с всеми индексами и с указанием файлгруп

Версия:
Express Edition with Advanced Services
RTM
10.50.1600.1
Кстати - заметил, что скрипт создания таблицы 2005й и 2008r2 генерируют чуток по разному
Так как экспериментирую на 2008R2, то привожу оттуда

Сначала
CREATE TABLE [UserFiles].[Files](
	[FileId] [int] IDENTITY(1,1) NOT NULL,
	[FileGuid] [uniqueidentifier] NOT NULL,
	[DateEnter] [smalldatetime] NOT NULL,
	[UserName] [varchar](200) NULL,
	[FileName] [varchar](1000) NOT NULL,
	[Compressed] [bit] NOT NULL,
	[UserComment] [varchar](1000) NULL,
	[SystemComment] [varchar](1000) NULL,
	[File] [varbinary](max) NULL,
PRIMARY KEY CLUSTERED 
(
	[FileId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
UNIQUE NONCLUSTERED 
(
	[FileGuid] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [UserFiles].[Files] ADD  DEFAULT (getdate()) FOR [DateEnter]
GO

ALTER TABLE [UserFiles].[Files] ADD  DEFAULT (suser_name()) FOR [UserName]
GO

ALTER TABLE [UserFiles].[Files] ADD  DEFAULT ((0)) FOR [Compressed]
GO



Потом запускаю
use master
GO
ALTER DATABASE enterprise ADD FILEGROUP UserFiles
GO
ALTER DATABASE [enterprise] 
ADD FILE ( NAME = N'user_files', 
FILENAME = N'D:\SQLDATA\user_files.ndf') 
TO FILEGROUP [UserFiles]
GO
USE enterprise
GO
ALTER TABLE UserFiles.Files DROP CONSTRAINT PK__Files__0D9B94C5 WITH (MOVE TO UserFiles)
GO
ALTER TABLE UserFiles.Files ADD CONSTRAINT PK__Files__0D9B94C5 PRIMARY KEY(FileId) 
Для чистоты эксперимента даже имя нового индекса сделал таким же.
Размер файла 1 мб! Должен быть 4,5 гиг
Скрипт создания таблицы после этого
CREATE TABLE [UserFiles].[Files](
	[FileId] [int] IDENTITY(1,1) NOT NULL,
	[FileGuid] [uniqueidentifier] NOT NULL,
	[DateEnter] [smalldatetime] NOT NULL,
	[UserName] [varchar](200) NULL,
	[FileName] [varchar](1000) NOT NULL,
	[Compressed] [bit] NOT NULL,
	[UserComment] [varchar](1000) NULL,
	[SystemComment] [varchar](1000) NULL,
	[File] [varbinary](max) NULL,
 CONSTRAINT [PK__Files__0D9B94C5] PRIMARY KEY CLUSTERED 
(
	[FileId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [UserFiles],
UNIQUE NONCLUSTERED 
(
	[FileGuid] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [UserFiles]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [UserFiles].[Files] ADD  DEFAULT (getdate()) FOR [DateEnter]
GO

ALTER TABLE [UserFiles].[Files] ADD  DEFAULT (suser_name()) FOR [UserName]
GO

ALTER TABLE [UserFiles].[Files] ADD  DEFAULT ((0)) FOR [Compressed]
GO

Индекс по FileGuid правда на PRIMARY, но я пытался и без него, в смысле сначала его удалял, а потом проделывал туже процедуру.

Наверно надо попробовать на 2005м.
17 май 11, 10:46    [10663109]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
iljy
Member

Откуда:
Сообщений: 8711
Дикий Билл,

https://www.sql.ru/Forum/actualthread.aspx?bid=1&tid=786633&hl=
17 май 11, 11:27    [10663404]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Дикий Билл
Наверно надо попробовать на 2005м.
Да я тоже на 2008 р2 пробую.

Кстати, у вас там [varbinary](max) есть.

Если у вас весь объём данных приходится на это поле, то вот и причина.

Перемещение таблицы, как я понимаю, не меняет расположение страниц для varbinary(max)
Они остаются на прежней файловой группе

Тогда только пересозданием таблицы
17 май 11, 11:29    [10663417]     Ответить | Цитировать Сообщить модератору
 Re: (2005) Перенос таблицы в другую файловую группу. Размер файлов не изменился.  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9627
alexeyvg, Спасибо!
18 май 11, 02:01    [10668673]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить