1

私はSQLServer、レプリケーション、およびCDCの概念に不慣れです。私はCDCの入門チュートリアルをいくつか行いました。私の問題は次のようなものです-CDCは非常に多くのデータを生成し、非常に多くのスペース(メモリ)を使用しているため、より効率的にする必要があります。決定は、CDCテーブルを新しいファイルグループに移動することです。そして、以下はそれのためのオプションです(そしてすべてが潜在的にCDCを壊す危険があります):

i)各テーブルに主キーを再作成します

ii)テーブル作成ステートメントの変更

iii)CDCスキーマ全体を新しいFileGroupに移動します

これについてどうやって行くかを提案/ガイドしてください?

Regards,
CD
4

1 に答える 1

5

enter code hereさて、誰も私の質問に答えませんでした。私は1日待っていましたが、コメントすらありませんでした。とにかく、私は自分で答えに向けて努力したので、ここにあります、うまくいけば、これに少なくともいくつかの票を獲得するでしょう!:P

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*/
于 2012-04-10T18:42:57.983 に答える