2012-04-02 7 views
1

私はSQL Serverの新機能で、複製とCDCの概念が新しくなっています。 CDCのチュートリアルはほとんど行っていませんでした。私の問題は次のようなものです - CDCは非常に多くのデータを生成し、非常に多くの領域(メモリ)を占有しているため、より効率的にする必要があります。決定は、CDCテーブルを新しいファイルグループに移動することです。そして、そのためのオプション(およびすべてが潜在的にCDCを壊す危険性を持っている)、次のとおりですCDCテーブルを新しいファイルグループに移動するにはどうすればいいですか?

i)は)各テーブル

IIの主キーを再作成してテーブルを変更することは声明

IIIを作成します)CDCスキーマ全体を新しいファイルグループに移動する

これについては、どうすればよいか教えてください。

Regards, 
CD 

答えて

4

enter code hereオクラホマので、誰も私のquestion..I日を待っていた、ともないコメント答えません。とにかく、私は自分自身で答えに向かって作業しました。だから、ここでそれは、少なくともこれ以上の投票を得るでしょう! :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*/ 
関連する問題