Процессы происходящие при реструктуризации:
- Изначально для каждой таблицы, которую нужно реструктуризовать создается таблица с нужной структурой (набором колонок), имя новой таблицы будет дополнено символами "NG" (_InfoReg13763NG).
- Потом происходит преобразование данных из старой таблицы в новую порциями по 1000 строк. Все преобразование данных выполняется на клиенте, с которого выполняется реструктуризация(обновление).
- По завершении преобразования старая таблица удаляется, а новая переименовывается (обрезаются символы "NG").
Процесс не вызывает проблем пока вы оперируете с малым объемом данных, при больших объемах (таблицы в десятки Гб или десятки миллионов строк) нужно учитывать несколько аспектов, о которых я попытаюсь рассказать.
Место на дисках
Я так же рекомендую перевести базу на время реструктуризации в простой режим восстановления.
Индикация процесса
В данном случае я перелагаю инструкцию T-SQL, которая показывает процент выполненной реструктуризации для каждой (из всех необходимых) таблицы.
Declare @Table varchar(50)
Declare Structur cursor local
FOR
Select So1.Name from dbo.sysobjects So
INNER JOIN dbo.sysobjects So1
ON So.Name = (So1.Name+'NG') And OBJECTPROPERTY(So.id, N'IsUserTable') = 1
Create Table #StructurTable(
_Table varchar(50),
_Rows numeric,
_Rows1 numeric)
Open Structur
Fetch Next From Structur Into @Table
While @@fetch_status=0
Begin
INSERT INTO #StructurTable
EXECUTE('Select '''+@Table+''', Count(*), 0 From '+@Table+'
UNION ALL
Select '''+@Table+''',0,Count(*) From '+@Table+'NG')
Fetch Next From Structur Into @Table
End
Close Structur
Deallocate Structur
Select
_Table,
CAST(Case _Rows1 When 0 Then 100
Else _Rows1*100/_Rows
End AS numeric(15,2)) Precent
FROM (Select
_Table,
Max(_Rows1) _Rows1,
Max(_Rows) _Rows
FROM #StructurTable
Group By _Table) As Tab
DROP TABLE #StructurTable
Комментариев нет:
Отправить комментарий