我是新來的SQL Server,複製和CDC的概念。我爲CDC做了幾個入門教程。我的問題就像 - 因爲CDC正在生成如此多的數據並佔用太多空間(內存),所以我們需要提高它的效率。決定是將CDC表移動到新的文件組。而以下是它的選項(以及所有有可能打破了CDC的危險):如何將CDC表移動到新的文件組?
我)在每張桌子上
II)ALTER TABLE重新創建一個主鍵創建語句
III )將整個CDC模式移動到一個新的FileGroup
請建議/指導如何去做這件事?
Regards,
CD
我是新來的SQL Server,複製和CDC的概念。我爲CDC做了幾個入門教程。我的問題就像 - 因爲CDC正在生成如此多的數據並佔用太多空間(內存),所以我們需要提高它的效率。決定是將CDC表移動到新的文件組。而以下是它的選項(以及所有有可能打破了CDC的危險):如何將CDC表移動到新的文件組?
我)在每張桌子上
II)ALTER TABLE重新創建一個主鍵創建語句
III )將整個CDC模式移動到一個新的FileGroup
請建議/指導如何去做這件事?
Regards,
CD
enter code here
好的,所以沒有人回答我的問題。我等了一天,甚至沒有評論。無論如何,我自己努力尋找答案,所以在這裏,希望至少得到一些投票! :P
2邏輯選項:
1)禁止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*/