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

Откуда:
Сообщений: 424
Раньше никогда не работал с большими БД. Всегда был одни мдф и один лдф и всё. Тут думаю отделить одну большую таблицу которая занимает 90% от всего объема данных БД. К этой таблице будет особый подход. Реже бэкапирование и т.д.
И тут возникает несколько вопросов. Можно ли выделить таблицу? Можно ли при восстановлении БД восстанавливать всё кроме этой большой таблицы (ну например для программистов для тестирования, им эта куча данных совсем не нужна для разработки). Налицо экономия дискового пространства, времени на бэкапирование и восстановление и т.д.
31 окт 14, 15:10    [16783976]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Мона все - читайте про файловые группы :)
31 окт 14, 15:16    [16784029]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
1) Создаёте отдельную ФГ на отдельных дисках
2) Пересоздаёте кластерный индекс для вашей таблицы на новой ФГ
3) Дальше можно бэкапить и восстанавливать по файлам/по файловым группам
31 окт 14, 15:16    [16784032]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
leonix
Member

Откуда:
Сообщений: 424
Спасибо, буду пробовать
31 окт 14, 15:32    [16784185]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
leonix,

Если вырубать базу нельзя, то скорее всего придётся действовать так.
1) Создаете новую файловую группу.
2) Меняете схему партиционирования, так чтобы таблица пока осталась на старой группе, но возникла возможность использовать новую. (все записи в старой, 0 в новой)
3) Затем меняете схему партиционирования (функцию партицинирования) так, чтобы данные порциями перетекали в новую группу
31 окт 14, 15:34    [16784198]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
a_voronin
leonix,

Если вырубать базу нельзя, то скорее всего придётся действовать так.
1) Создаете новую файловую группу.
2) Меняете схему партиционирования, так чтобы таблица пока осталась на старой группе, но возникла возможность использовать новую. (все записи в старой, 0 в новой)
3) Затем меняете схему партиционирования (функцию партицинирования) так, чтобы данные порциями перетекали в новую группу
Простой онлайновый ребилд обеспечит большую доступность данных. Особенно, если нет поля, по которому можно разделить старые записи и новые.
31 окт 14, 15:40    [16784271]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
leonix
Member

Откуда:
Сообщений: 424
Сделал следующим образом. Посмотрите на сколько всё правильно.

добавил файловую группу

USE [master]
GO
ALTER DATABASE [mybase] ADD FILEGROUP [secondary]
GO


Добавил файл в файловую группу

USE [master]
GO
ALTER DATABASE [mybase] 
ADD FILE ( NAME = N'mybase', FILENAME = N'D:\data\mybase.mdf' , 
SIZE = 3072KB , FILEGROWTH = 1024KB ) TO FILEGROUP [secondary]
GO


добавил индекс

USE [mybase]
GO
CREATE UNIQUE CLUSTERED INDEX [myindex] ON [mytable] 
(
	[field1] ASC,
	[field2] ASC,
	[field3] ASC,
	[field4] ASC
)WITH (PAD_INDEX  = OFF, 
STATISTICS_NORECOMPUTE  = OFF, 
SORT_IN_TEMPDB = OFF, 
IGNORE_DUP_KEY = OFF, 
DROP_EXISTING = ON, 
ONLINE = OFF, 
ALLOW_ROW_LOCKS  = ON, 
ALLOW_PAGE_LOCKS  = ON) ON [secondary]
GO



сделал ребилд индекса

USE [mybase]
GO
ALTER INDEX [myindex] 
ON [mytable] 
REBUILD PARTITION = ALL WITH 
( PAD_INDEX  = OFF, 
STATISTICS_NORECOMPUTE  = OFF, 
ALLOW_ROW_LOCKS  = ON, 
ALLOW_PAGE_LOCKS  = ON, 
IGNORE_DUP_KEY  = OFF, 
ONLINE = OFF, 
SORT_IN_TEMPDB = OFF )
GO
31 окт 14, 16:39    [16784888]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
ребилд нафига? если вы только что его создали?
31 окт 14, 16:46    [16784954]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
leonix
Member

Откуда:
Сообщений: 424
Knyazev Alexey
ребилд нафига? если вы только что его создали?


Блин я чёта не вкуриваю. У меня это существующая база, в ней куча данных. Мне нужно эту таблицу перенести. Если я её просто создаю в новом файле она сама перенесётся?
31 окт 14, 16:48    [16784968]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
leonix
Knyazev Alexey
ребилд нафига? если вы только что его создали?


Блин я чёта не вкуриваю. У меня это существующая база, в ней куча данных. Мне нужно эту таблицу перенести. Если я её просто создаю в новом файле она сама перенесётся?


в вашем скрипте вы создаёте новый индекс...кластерный, т.е. кластеризуете таблицу (которая у вас видимо куча) и все данные "поедут" в ту ФГ, где ваш кластерный индекс
31 окт 14, 17:02    [16785072]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
leonix
Member

Откуда:
Сообщений: 424
У меня кластерный индекс. Ну от ребилда хоже не будет.

Нашёл пример в мсдн


Перемещение существующего индекса в другую файловую группу
В обозревателе объектов установите соединение с экземпляром компонента Компонент Database Engine.
На панели «Стандартная» выберите пункт Создать запрос.
Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2012;
GO
-- Creates the TransactionsFG1 filegroup on the AdventureWorks2012 database
ALTER DATABASE AdventureWorks2012
ADD FILEGROUP TransactionsFG1;
GO
/* Adds the TransactionsFG1dat3 file to the TransactionsFG1 filegroup. Please note that you will have to change the filename parameter in this statement to execute it without errors.
*/
ALTER DATABASE AdventureWorks2012 
ADD FILE 
(
    NAME = TransactionsFG1dat3,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12\MSSQL\DATA\TransactionsFG1dat3.ndf',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
)
TO FILEGROUP TransactionsFG1;
GO
/*Creates the IX_Employee_OrganizationLevel_OrganizationNode index
  on the TransactionsPS1 filegroup and drops the original IX_Employee_OrganizationLevel_OrganizationNode index.
*/
CREATE NONCLUSTERED INDEX IX_Employee_OrganizationLevel_OrganizationNode
    ON HumanResources.Employee (OrganizationLevel, OrganizationNode)
    WITH (DROP_EXISTING = ON)
    ON TransactionsFG1;
GO
31 окт 14, 20:41    [16786136]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
dekan79
Member

Откуда:
Сообщений: 13
А как перенести саму таблицу в эту отдельную файловую группу.
6 ноя 14, 12:10    [16805313]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
dekan79
А как перенести саму таблицу в эту отдельную файловую группу.

прочитать еще раз про кластерный индекс Ребилд его в новую группу здесь незря указывали
6 ноя 14, 12:15    [16805336]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
dekan79
Member

Откуда:
Сообщений: 13
Ребилд кластера я сделал но это ведь только сам кластер будет размещен в новой ФГ.
А я хочу саму таблицу с данными переместить в ФГ.
6 ноя 14, 18:09    [16807861]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
dekan79
Ребилд кластера я сделал но это ведь только сам кластер будет размещен в новой ФГ.
А я хочу саму таблицу с данными переместить в ФГ.
Пора вам уже, пожалуй, теорию какую-нибудь про индексы почитать, чтобы понимать, что такое "кластерный индекс".
6 ноя 14, 18:10    [16807870]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
dekan79
Member

Откуда:
Сообщений: 13
Я как бы очень в этом так что извините. посмотрел что индексы по данной таблице типа Некластерные.
Можете чуть расшевелить меня?
6 ноя 14, 18:17    [16807898]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
dekan79
Member

Откуда:
Сообщений: 13
Индекс это объект БД предназначенный для быстрого поиска инфы в таблице. Если я индекс перенес в другую ФГ это ведь не означает что и сама таблица по которой сделан индекс перекачуют в эту ФГ???
6 ноя 14, 18:42    [16807993]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
dekan79
Индекс это объект БД предназначенный для быстрого поиска инфы в таблице. Если я индекс перенес в другую ФГ это ведь не означает что и сама таблица по которой сделан индекс перекачуют в эту ФГ???
Кластерный индекс - это индекс со всеми данными, т.е. сама таблица.
6 ноя 14, 18:44    [16808002]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
dekan79
Member

Откуда:
Сообщений: 13
хм ясно. Но если у меня не кластерный индекс? получается для такой таблицы это не релаьно?
6 ноя 14, 18:46    [16808007]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
dekan79
Member

Откуда:
Сообщений: 13
http://clip2net.com/s/jelCEO если посмотреть на свойста таблицы то указана ФГ, а вот поменять ее нельзя.
6 ноя 14, 18:54    [16808033]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
dekan79
Member

Откуда:
Сообщений: 13
Правильно я понял что нужно создать новый индекс Кластерный для данной таблицы, а текущие 2 некластерных индекса нужно удалить???
6 ноя 14, 18:55    [16808036]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
dekan79
Правильно я понял что нужно создать новый индекс Кластерный для данной таблицы, а текущие 2 некластерных индекса нужно удалить???
Телепатов тут нет, чтобы угадать, правильно ли вы что-то делаете для решения какой-то неизвестной задачи.
6 ноя 14, 18:58    [16808046]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
dekan79
Member

Откуда:
Сообщений: 13
Ладно понятно - кластерный индекс мне поможет.
6 ноя 14, 19:02    [16808053]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8877
Суть КЛАСТЕРНОГО индекса в том, что на его leaf-уровне (т.е. на самом нижнем) находятся САМИ ДАННЫЕ ТАБЛИЦЫ (т.е. все, ёпта; сиречь - сама таблица, которая Вас интересует). Это, пожалуй, самое важное отличие именно кластерного индекса от НЕкластерных индексов. Вам на это уже указали выше по топегу.

PS Уважаемые, ну хватит стебаться над человеком,- он же вполне вменяемый.
PPS А вот если бы ник был женский (а особенно - блондинистый), то вы бы не только про фотки с сиськами спрашивали, но и ответ кто-нибудь нормальный написал, без стёбов и изъ@бов...
6 ноя 14, 19:44    [16808158]     Ответить | Цитировать Сообщить модератору
 Re: Как работающей БД выделить отдельную таблицу в отдельный файл?  [new]
dekan79
Member

Откуда:
Сообщений: 13
Спасибо :-)
7 ноя 14, 09:36    [16810134]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить