Как переместить таблицы CDC в новую файловую группу?

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

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

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

iii) Переместите всю схему CDC в новую FileGroup.

Пожалуйста, предложите / направьте, как это сделать?

Regards,
CD

person Chirayu    schedule 02.04.2012    source источник


Ответы (1)


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

2 логических варианта:

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

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*/
person Chirayu    schedule 10.04.2012