解析SQL 2008的Change Data Capture功能(2)_Mssql數據庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:解讀SQL Server小知識:Processor Affinity
      SQL Server通常都運行在多處理器的服務器上,這一點在現在尤為普遍。原因是多內核的處理器越來越普及。 那么,在多處理器環境下,Windows操作系統(事實上是從2000開始的)通常都會將

      成功提交上述命令后,就可以在數據表change_tables,captured_columns和index_columns表中看到相應的記錄,其中change_table中一條,capture_column中三條,index_columns中一條。同時cdc架構下有增加了一張新表叫做dbo_Product_CT,這張表的結構和Product表的結構有點相似,Product表中的三列在dbo_Product_CT中都有,同時dbo_Product_CT表中還增加了_$start_lsn,_$end_lsn,_$seqval,_$operation和_$update_mask五個新的字段。ITPUB個人空間-hU:i B%P%B&X

      其實在存儲過程sp_cdc_enable_table_change_data_capture中有一系列的參數,在這里我們為了簡化忽略了一個參數就是@captured_column_list,這個參數可以對表中特定的某些字段啟用更新跟蹤。

      5、在Product表上提交INSERT語句

      INSERT INTO dbo.Product VALUES (1, N'ABC', N'A');

      提交完了這條命令后,就會在lsn_time_mapping和dbo_Product_CT中分別看到一條新記錄。

      其中dbo_Product_CT表中的_$operation字段的值是2,_$update_mask字段的值是0x07。 _$operation字段是代表DML操作類型,1是delete,2是insert,3是update的舊值,4是update的新值。

      $update_mask字段是表示一個字段列表的掩碼,那些在DML操作中被更新了的字段位為1,而沒有更新的字段位為0。在本例中Product表一共有三列被跟蹤,所以應該是一個三位的二進制數,右邊低位第一位是第一列ProductID,低位第二位是第二列ProductName,第三位就是Category了。因為這是一次INSERT,所以更新涉及到了所有的三列,所以_$update_mask字段就應該是0x7了。

      6、繼續在Product表上提交UPDATE語句

      UPDATE dbo.Product SET Category = N'B' WHERE ProductID = 1;

      提交完這條命令后,當然也會在lsn_time_mapping和dbo_Product_CT中看到新記錄了。不過這次lsn_time_mapping中是一條,而dbo_Product_CT中則是兩條。(為什么會這樣呢?建議大家自己試一下咯,一試就明白了。)

      其中dbo_Product_CT表中的_$operation字段的值是第一條是3,第二條是4,_$update_mask字段的值兩條都是0x04。

      在這次操作中我們更新的是第三列,所以_$update_mask字段就應該是0x4了。(如果我們更新的是ProductID會發現_$update_mask并非是0x1,而同樣是0x7,這估計是因為ProductID是主鍵,更新主鍵應該視同一條新的記錄。)

      7、再來一次UPDATE

      UPDATE dbo.Product SET Category = N'A' WHERE ProductID = 1;

      提交完這條命令后,在dbo_Product_CT中又看到兩條新記錄了。其中dbo_Product_CT表中的_$operation字段的值是第一條是3,第二條是4,_$update_mask字段的值兩條都是0x04。(看來CDC確實會記錄下數據的每次修改。)

      8、繼續在Product表上提交DML語句

      DELETE dbo.Product WHERE ProductID = 1;

      提交完了這條命令后,就會在lsn_time_mapping和dbo_Product_CT中分別看到一條新記錄。

      其中dbo_Product_CT表中的_$operation字段的值是1,_$update_mask字段的值是0x07。

      9、提交一個DDL試試看

      分享:看Sql server 2005 找出子表樹
      同事在準備新老系統的切換,清空一個表的時候往往發現這個表的主鍵被另一個表用做外鍵,而系統里有太多層次的引用.所以清起來相當麻煩 用下面這個腳本可以做到找出一個特定表的引用

      來源:模板無憂//所屬分類:Mssql數據庫教程/更新時間:2009-09-04
      相關Mssql數據庫教程