Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Индекс не создаётся в нужной ФГ / 11 сообщений из 11, страница 1 из 1
24.09.2018, 20:17
    #39707284
Zulus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс не создаётся в нужной ФГ
Коллеги, подскажите что не так под вечер
нужно переместить индекс в другую ФГ

вот запрос №1
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
  object_name(object_id) as [obj_name]
, ds.[name] as [filegroup_name]
, p.[object_id]
, p.index_id
from
sys.data_spaces ds
inner join sys.database_files df on df.data_space_id = ds.data_space_id
inner join sys.allocation_units au on ds.data_space_id = au.data_space_id
inner join sys.partitions p on au.container_id = 
case when au.type = 2 then p.partition_id else p.hobt_id end
where df.[name] = 'HISTORY2'



вот результат (одинокий кластерный индекс в нужной ФГ):
obj_name filegroup_name object_id index_idtCardsEventsHistory DataFGHYSTORY2 854371650 1
удаляем ПК
Код: sql
1.
alter table [dbo].[tCardsEventsHistory] drop constraint [ItCardsEvent_CardEventIdHistory]


опять запрос №1
ПК помер, куча в наличии
obj_name filegroup_name object_id index_idtCardsEventsHistory DataFGHYSTORY2 854371650 0
двигаем ПК
Код: sql
1.
2.
alter table [dbo].[tCardsEventsHistory] add constraint [ItCardsEvent_CardEventIdHistory_qwerty] primary key clustered ([CardEventId] asc )
on [PRIMARY];


опять запрос №1
obj_name filegroup_name object_id index_idtCardsEventsHistory DataFGHYSTORY2 854371650 1
Индекс создан, но не в явно указанной PRIMARY, а опять там, где и был.
Уже чего только не делал - вместо ПК создавал кластерный где надо, проверял по-всякому.
Но воз и ныне там.

ФГ по-умолчанию - PRIMARY, файл HISTORY2 не принадлежит ФГ PRIMARY, куда ещё смотреть - неясно
...
Рейтинг: 0 / 0
24.09.2018, 20:20
    #39707288
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс не создаётся в нужной ФГ
Zulus,

Я бы посоветал сделать явно кластерный индекс CardEventId без primary key по нужному столбцу в файловой группе PRIMARY, строки таблицы физически переедут при этом в PRIMARY, потом его удалить, потом добавить constraint по тому же столбцу.
...
Рейтинг: 0 / 0
24.09.2018, 20:30
    #39707291
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс не создаётся в нужной ФГ
Andy_OLAP,

вы как всегда бред пишете

Автору - используйте DROP_EXISTING=ON для класт. индекса.
...
Рейтинг: 0 / 0
24.09.2018, 20:37
    #39707293
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс не создаётся в нужной ФГ
aleksrovAndy_OLAP,

вы как всегда бред пишете

Автору - используйте DROP_EXISTING=ON для класт. индекса .
Вы явно не прочитали "ПК помер, куча в наличии ".
...
Рейтинг: 0 / 0
24.09.2018, 20:42
    #39707296
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс не создаётся в нужной ФГ
Zulus,

Чересчур мудрено и не с той стороны заходите.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select
 ds.name
from
 sys.partitions p join
 sys.allocation_units au on au.type in (1, 3) and au.container_id = p.hobt_id join
 sys.data_spaces ds on ds.data_space_id = au.data_space_id
where
 p.object_id = object_id('[dbo].[tCardsEventsHistory]') and
 p.index_id = 1;
...
Рейтинг: 0 / 0
24.09.2018, 21:51
    #39707316
Zulus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс не создаётся в нужной ФГ
Andy_OLAPZulus,

Я бы посоветовал сделать явно кластерный индекс CardEventId без primary key по нужному столбцу в файловой группе PRIMARY, строки таблицы физически переедут при этом в PRIMARY, потом его удалить, потом добавить constraint по тому же столбцу.
Andy, спасибо, но так я уже пробовал
ZulusУже чего только не делал - вместо ПК создавал кластерный где надо, проверял по-всякому.
как ни странно, после create clustered index индекс оказывается как принадлежащий не PRIMARY, хоть явно указано, а DataFGHYSTORY2.

Я понимаю, что чудес не бывает и выглядит со стороны неправдоподобно, но вот такая засада.
...
Рейтинг: 0 / 0
24.09.2018, 22:19
    #39707321
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс не создаётся в нужной ФГ
Zulusпосле create clustered index индекс оказывается как принадлежащий не PRIMARY, хоть явно указано, а DataFGHYSTORY2.Database trigger гадит?
...
Рейтинг: 0 / 0
24.09.2018, 22:25
    #39707327
Zulus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс не создаётся в нужной ФГ
invmZulus,

Чересчур мудрено и не с той стороны заходите.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select
 ds.name
from
 sys.partitions p join
 sys.allocation_units au on au.type in (1, 3) and au.container_id = p.hobt_id join
 sys.data_spaces ds on ds.data_space_id = au.data_space_id
where
 p.object_id = object_id('[dbo].[tCardsEventsHistory]') and
 p.index_id = 1;



Ну, Вы правы, конечно, по-своему, но мне изначально не особо было нужно знать, в каком файле размещён индекс =1 некоторой таблицы.
Есть ФГ с файлом и эту пару надо удалить.
Я посмотрел что там есть, перенёс содержимое в другую ФГ и попытался выполнить dbcc shrinkfile.
В ответ получил
Cannot move all contents of file "HISTORY2" to other places to complete the emptyfile operation.
Опять посмотрел, что мешает (размещается в файла данных) - и вижу индекс, который я шагом ранее перенёс.

Сейчас такой запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
  object_id(p.[object_id])
, p.index_id
from
sys.data_spaces ds
left join sys.database_files df on df.data_space_id = ds.data_space_id
left join sys.allocation_units au on ds.data_space_id = au.data_space_id
left join sys.partitions p on au.type in (1, 3) and au.container_id = p.hobt_id
where
df.[name] = 'HISTORY2'


возвращает вот что:
(No column name) index_idNULL NULL
что я интерпретирую как то, что в ФГ HISTORY2 ничего нет.
При попытке выполнить шринк
Код: sql
1.
dbcc shrinkfile(N'HISTORY2', emptyfile);


вылетает ошибка
DBCC SHRINKFILE: Index Allocation Map (IAM) page 11:155 could not be moved.
Msg 2555, Level 16, State 1, Line 194
Cannot move all contents of file "HISTORY2" to other places to complete the emptyfile operation.

Упражняюсь на восстановленном бэкапе БД заказчика, и, начинаю подозревать, что бэкап битый.
...
Рейтинг: 0 / 0
25.09.2018, 00:05
    #39707344
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс не создаётся в нужной ФГ
ZulusОпять посмотрел, что мешает (размещается в файла данных) - и вижу индекс, который я шагом ранее перенёс.
Упражняюсь на восстановленном бэкапе БД заказчика, и, начинаю подозревать, что бэкап битый.
Есть еще предположение.

Что команды по переделке индексов Вы выполняете на развернутом бэкапе, а команды, которые сверяют результат, выполняете в другом окне SSMS на соединении с сервером, где работает исходная база заказчика.

Я бы рекомендовал Вам исходя из своего опыта не доверять своим глазам, а закрыть все окна и студию SSMS, явно открыть соединение к развернутой из бэкапа БД и еще раз последовательно в одном окне выполнять команду за командой, комментирую выполненные ранее шаги.

Очень часто нужно не доверять себе, а как бы начать с чистого листа. Невнимательность от усталости настигает в любом возрасте и на любой, казалось бы доведенной до автоматизма, операции или последовательности шагов.
...
Рейтинг: 0 / 0
25.09.2018, 06:43
    #39707382
Владимир Затуливетер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс не создаётся в нужной ФГ
Вы вот этот фильтр уберите для начала, может быть у вас там LOB_DATA?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
    object_id(p.object_id)
  , p.index_id
  , au.type_desc
from sys.data_spaces as ds
    left join sys.database_files as df on df.data_space_id = ds.data_space_id
    left join sys.allocation_units as au on ds.data_space_id = au.data_space_id
    left join sys.partitions as p on au.container_id = p.hobt_id
                                     --and au.type in ( 1, 3 )
where df.name = 'HISTORY2';



При ребилде индекса на другую файловую группу LOB_DATA не переносится. Чтобы это обойти нужно ребилдить кластерный индекс на схему секционирования сначала, а потом просто на файловую группу. При ребилде на схему секционированния LOB_DATA будет перенесен.
...
Рейтинг: 0 / 0
25.09.2018, 08:44
    #39707425
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Индекс не создаётся в нужной ФГ
Zulus,
если я ничего не пропустил, то
авторYou cannot move indexes created using a UNIQUE or PRIMARY KEY constraint using Management Studio. To move these indexes use the CREATE INDEX statement with the (DROP_EXISTING=ON) option in Transact-SQL.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Индекс не создаётся в нужной ФГ / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]