Как переместить таблицы CDC в новую файловую группу? - PullRequest
1 голос
/ 02 апреля 2012

Я новичок в SQL Server, репликации и концепции CDC.Я сделал несколько учебников для начинающих для CDC.Моя проблема такова: поскольку CDC генерирует так много данных и занимает много места (памяти), мы должны сделать его более эффективным.Решение состоит в том, чтобы переместить таблицы CDC в новую файловую группу.И следующие варианты для него (и все они могут привести к поломке CDC):

i) Повторно создать первичный ключ для каждой таблицы

ii) Изменить оператор создания таблицы

iii) Переместить всю схему CDC в новую файловую группу

. Подскажите, пожалуйста, как это сделать?

Regards,
CD

1 Ответ

4 голосов
/ 10 апреля 2012

enter code here Хорошо, так что никто не ответил на мой вопрос .. Я ждал день, и даже не комментарий.В любом случае, я работал над ответом сам, так что вот, надеюсь, по крайней мере, получить некоторые голоса за это!: P

2 Логические параметры:

1) Отключите CDC, а затем включите CDC при изменении группы файлов. Теперь это кажется логичным, но вы потеряете все предыдущие данные CDC,и может потерять CDC Meta Date.Тем не менее, это может быть полезно для некоторых, поэтому найдите ниже:

Declare @RowNo Int, @RowCount Int, @Capture_Instance Varchar(200), @strSQL NVarchar(1000)
Set @RowCount = 0 
Set @RowNo = 1 
Set @Capture_Instance = ''
Set @strSQL = ''

Declare @myTable Table (Capture_instance Varchar(200), RowNo Int) 
Insert Into @myTable 
Select capture_instance, ROW_NUMBER() Over(Order By Source_Object_Id) As RN From cdc.change_tables 

Set @RowCount = @@ROWCOUNT 

While @RowNo <= @RowCount 
Begin 

Select @Capture_Instance = Capture_instance From @myTable Where RowNo = @RowNo 

Set @strSQL = 'sys.sp_cdc_disable_table @source_schema = N''' + Left(@Capture_Instance, CharIndex('_', @Capture_Instance) - 1)  + ''', 
    @source_name = N''' + SubString(@Capture_Instance, CharIndex('_', @Capture_Instance) + 1, Len(@Capture_Instance)) + ''',
    @capture_instance = N''All'''

Exec sp_ExecuteSQL @strSQL /*Diabling the sp_cdc*/

Set @strSQL = 'sys.sp_cdc_enable_table @source_schema = N''' + Left(@Capture_Instance, CharIndex('_', @Capture_Instance) - 1)  + '''
    ,@source_name = N''' + SubString(@Capture_Instance, CharIndex('_', @Capture_Instance) + 1, Len(@Capture_Instance)) + '''
    ,@role_name = N''' + 'cdc_Admin' + '''
    ,@fileGroup_Name = N''' + 'CDCFileGroup' + ''';'

Exec sp_ExecuteSQL @strSQL /*Enabling the sp_cdc, with a new CDCFileGroup(this filegroup would have been created before running this script)*/

Set @RowNo += 1 
End

2) Это правильное решение! Создание уникального кластеризованного индекса при изменении группы файлов - это сохраняет предыдущийДанные CDC и все остальное.Вам просто нужно убедиться, что файловая группа уже создана и содержит файлы, размер которых вы установили.(для получения дополнительной информации., спросите в комментарии).Сценарий для этого:

/*CREATING CLUSTERED INDEX, AND DROPPING CLUSTERED INDEX, TOGETHER*/
CREATE UNIQUE CLUSTERED INDEX dbo_YourTableName_CT_clustered_idx
ON cdc.dbo_YourTableName_CT (   [__$start_lsn] ASC,
[__$seqval] ASC,
[__$operation] ASC)
WITH (DROP_EXISTING = ON)
ON CDCFileGroup /*Your File Group Name*/
...