2013-04-30 1 views
6

私は、チェンジ・データ・キャプチャ(CDC)は私のMS SQL 2008データベース上で活性化し、データキャプチャに新しいtabelを追加するために、次のコードを使用していsys.fn_cdc_get_min_lsn(@TableName)機能を使用するトラッキングテーブルスカラ関数fn_cdc_get_min_lsn()は、有効なテーブル名に対して常に '0x00000000000000000000'を返します。私はからの変更を選択しようとするたびに、しかし</p> <pre><code>EXEC sys.sp_cdc_enable_table @source_schema ='ordering', @source_name ='Fields', @role_name = NULL, @supports_net_changes = 0; </code></pre> <p>:

SET @Begin_LSN = sys.fn_cdc_get_min_lsn('Fields') 

私はいつもゼロの値を得ています。

私は、次のスペル使用してスキーマ名を追加してみました:

SET @Begin_LSN = sys.fn_cdc_get_min_lsn('ordering.Fields') 

が、これは役立ちませんでしたが。

答えて

14

私の考えは、sys.fn_cdc_get_min_lsn()がテーブル名を受け入れると仮定していました。私はMSDNのドキュメントの例にほとんど間違っていましたが、おそらくパラメータの正確な意味をチェックしませんでした。

sys.fn_cdc_get_min_lsn()は、テーブル名ではなくのキャプチャインスタンス名を受け入れることが判明しました。

私の現在のキャプチャインスタンスでチラッと見:

ordering_Fields 

ので、1は、スキーマの区切りとしてアンダースコアを使用すべきではなく、ドット表記:

SELECT capture_instance FROM cdc.change_tables 

が正しいパラメータ名を返します。それはSQL Serverで一般的です。

+0

...でも、@kevinが指摘しているように、ドットを置き換えるだけでは常に動作するとは限りません – piers7

1

上記の答えは正しいです。別の方法としては、

EXEC sys.sp_cdc_enable_table 
@source_schema ='ordering', 
@source_name ='Fields', 
@capture_instance = 'Fields' 
@role_name = NULL, 
@supports_net_changes = 0; 

は、最初のLSNを返しますmin_lsn機能

SET @Begin_LSN = sys.fn_cdc_get_min_lsn('Fields') 

にcapture_instance文字列を使用可能にCDCに追加のパラメータcapture_instanceを追加し、ない0x00000000000000000000することができます。

単にを意味

cdc_get_net_changes_Fields(@Begin_LSN, sys.fn_cdc_get_max_lsn(), 'all') 

を呼び出すときにSQLから「引数の数が不足が...プロシージャまたは関数のCDCのために提供された」というエラー を解決しようとするときに便利partiularlyです「LSNが予想外の範囲」

関連する問題