解析SQL 2008的Change Data Capture功能(2)_Mssql數(shù)據(jù)庫教程
推薦:解讀SQL Server小知識(shí):Processor AffinitySQL Server通常都運(yùn)行在多處理器的服務(wù)器上,這一點(diǎn)在現(xiàn)在尤為普遍。原因是多內(nèi)核的處理器越來越普及。 那么,在多處理器環(huán)境下,Windows操作系統(tǒng)(事實(shí)上是從2000開始的)通常都會(huì)將
成功提交上述命令后,就可以在數(shù)據(jù)表change_tables,captured_columns和index_columns表中看到相應(yīng)的記錄,其中change_table中一條,capture_column中三條,index_columns中一條。同時(shí)cdc架構(gòu)下有增加了一張新表叫做dbo_Product_CT,這張表的結(jié)構(gòu)和Product表的結(jié)構(gòu)有點(diǎn)相似,Product表中的三列在dbo_Product_CT中都有,同時(shí)dbo_Product_CT表中還增加了_$start_lsn,_$end_lsn,_$seqval,_$operation和_$update_mask五個(gè)新的字段。ITPUB個(gè)人空間-hU:i B%P%B&X
其實(shí)在存儲(chǔ)過程sp_cdc_enable_table_change_data_capture中有一系列的參數(shù),在這里我們?yōu)榱撕喕雎粤艘粋(gè)參數(shù)就是@captured_column_list,這個(gè)參數(shù)可以對表中特定的某些字段啟用更新跟蹤。
5、在Product表上提交INSERT語句
INSERT INTO dbo.Product VALUES (1, N'ABC', N'A');
提交完了這條命令后,就會(huì)在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字段是表示一個(gè)字段列表的掩碼,那些在DML操作中被更新了的字段位為1,而沒有更新的字段位為0。在本例中Product表一共有三列被跟蹤,所以應(yīng)該是一個(gè)三位的二進(jìn)制數(shù),右邊低位第一位是第一列ProductID,低位第二位是第二列ProductName,第三位就是Category了。因?yàn)檫@是一次INSERT,所以更新涉及到了所有的三列,所以_$update_mask字段就應(yīng)該是0x7了。
6、繼續(xù)在Product表上提交UPDATE語句
UPDATE dbo.Product SET Category = N'B' WHERE ProductID = 1;
提交完這條命令后,當(dāng)然也會(huì)在lsn_time_mapping和dbo_Product_CT中看到新記錄了。不過這次lsn_time_mapping中是一條,而dbo_Product_CT中則是兩條。(為什么會(huì)這樣呢?建議大家自己試一下咯,一試就明白了。)
其中dbo_Product_CT表中的_$operation字段的值是第一條是3,第二條是4,_$update_mask字段的值兩條都是0x04。
在這次操作中我們更新的是第三列,所以_$update_mask字段就應(yīng)該是0x4了。(如果我們更新的是ProductID會(huì)發(fā)現(xiàn)_$update_mask并非是0x1,而同樣是0x7,這估計(jì)是因?yàn)镻roductID是主鍵,更新主鍵應(yīng)該視同一條新的記錄。)
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確實(shí)會(huì)記錄下數(shù)據(jù)的每次修改。)
8、繼續(xù)在Product表上提交DML語句
DELETE dbo.Product WHERE ProductID = 1;
提交完了這條命令后,就會(huì)在lsn_time_mapping和dbo_Product_CT中分別看到一條新記錄。
其中dbo_Product_CT表中的_$operation字段的值是1,_$update_mask字段的值是0x07。
9、提交一個(gè)DDL試試看
分享:看Sql server 2005 找出子表樹同事在準(zhǔn)備新老系統(tǒng)的切換,清空一個(gè)表的時(shí)候往往發(fā)現(xiàn)這個(gè)表的主鍵被另一個(gè)表用做外鍵,而系統(tǒng)里有太多層次的引用.所以清起來相當(dāng)麻煩 用下面這個(gè)腳本可以做到找出一個(gè)特定表的引用
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- sql里將重復(fù)行數(shù)據(jù)合并為一行數(shù)據(jù)使用逗號(hào)進(jìn)行分隔
- 詳解MySQL權(quán)限
- 解讀為SQL Server數(shù)據(jù)庫傳數(shù)組參數(shù)的變通辦法
- 解讀史上最簡單的方法復(fù)制或遷移Oracle數(shù)據(jù)庫
- sqlserver 2005連接超時(shí)采用bat命令解決
- 淺談Linq To Sql集成數(shù)據(jù)庫語言的優(yōu)劣
- sql 語句練習(xí)與答案
- 解析SQL Server索引管理的六大鐵律
- 談SQL Server 2005最后升級(jí):SP3年底發(fā)布
- 解讀SQL查詢結(jié)果集對注入的影響及利用
猜你也喜歡看這些
- MySQL筆記之索引的使用
- MySQL筆記之?dāng)?shù)據(jù)類型詳解
- 詳解MYSQL的備份還原(PHP實(shí)現(xiàn))
- 解析SQL語句中Replace INTO與INSERT INTO的不同之處
- mysql 定時(shí)更新表字段列的值狀態(tài)
- mysql 將列值轉(zhuǎn)變?yōu)榱械姆椒?/a>
- Mysql中的find_in_set的使用方法介紹
- 總結(jié)MySQL建表、查詢優(yōu)化的一些實(shí)用小技巧
- mysql登錄遇到ERROR 1045問題解決方法
- mysql常用設(shè)置:字符集編碼、自動(dòng)完成(自動(dòng)提示)、監(jiān)聽外網(wǎng)ip
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-解析SQL 2008的Change Data Capture功能(2)
。