解析SQL 2008的Change Data Capture功能(3)_Mssql數據庫教程
推薦:解讀SQL Server小知識:Processor AffinitySQL Server通常都運行在多處理器的服務器上,這一點在現在尤為普遍。原因是多內核的處理器越來越普及。 那么,在多處理器環境下,Windows操作系統(事實上是從2000開始的)通常都會將
ALTER TABLE dbo.Product ADD Description nvarchar(100);
提交完這句命令后,只會在ddl_history表中看到一條新的記錄。
10、然后再試試DML
UPDATE dbo.Product SET Description = N'NA';
提交完這句語句后,所有cdc架構下的表中都沒有看到新記錄。說明新增的列Description不跟蹤更新了......估計有人會說(細心的人哦!):“這次當然看不到新記錄了,因為在前面第7步我們已經刪除了所有的記錄,因此這次的UPDATE語句沒有影響到任何記錄,當然CDC的表中不會有任何記錄了。”那么到底對Description更新會不會記錄呢,經過測試確實是不記錄的。
那么如果我們想對Description也進行更新跟蹤應該怎么辦呢?很簡單的,由另外一個存儲過程叫做sp_cdc_disable_table_change_data_capture可以禁用對某張表的更新跟蹤,可以使用這個存儲過程先對Product表禁用更新跟蹤,然后再重新啟用對Product表的更新跟蹤就可以了。
11、最后試一下DROP命令
DROP TABLE dbo.Product;
dbo.Product表消失了,同時cdc.dbo_Product_CT表也消失了。
12. 評估結束。
一定有人問,捕獲到的更新怎么用呢,還有一堆系統函數和存儲過程可以幫助用戶,但是那段測試的過程就不詳細寫了。
其中最重要的應該就是cdc.fn_cdc_get_all_changes_和cdc.fn_cdc_get_net_changes_兩個函數了,這兩個函數可以幫助我們獲取dbo_Product_CT表中數據,其中cdc.fn_cdc_get_all_changes_是用于獲取所有更新,而cdc.fn_cdc_get_net_changes_則是用于獲取精簡后的更新,在精簡的更新中有一些重復的更新就會被合并成一條記錄,比如說我們把產品類型由A改為B,然后又改回A,在cdc.fn_cdc_get_all_changes_中應該有3條記錄,而在cdc.fn_cdc_get_net_changes_中則只有1條記錄。兩個函數的范例如下(你會發現精簡結果集的函數運算相當慢,至少在CTP4中是這樣的,不知道以后的版本會不回有改進):
以下為引用的內容:
SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_Product(0x00000048000001760004,0x00000048000001F70004, 'all'); SELECT * FROM cdc.fn_cdc_get_net_changes_dbo_Product(0x00000048000001760004, 0x00000048000001F70004, 'all'); |
CDC功能的IO開銷
很明顯,CDC功能是會產生一定的IO和存儲開銷的,為了評估CDC功能產生的這些開銷。我又進行了一段評測。
整個評估的思路是這樣的:
1、創建兩個數據庫
2、在兩個數據庫中分別創建一張結構完全相同的表,一個數據庫啟用CDC功能,而另外一個禁用CDC功能
3、向兩張表中寫入相同行數的數據
4、視圖sys.dm_io_virtual_file_stats來獲得兩個數據庫文件上的
5、利用sysindexes來獲得兩個數據庫中數據表的存儲消耗情況
因為是在虛擬機中進行的測試,所以選取了比較小的數據表(AdventureWorks數據庫中的SalesOrderDetails),大約有12萬行數據。
分享:看Sql server 2005 找出子表樹同事在準備新老系統的切換,清空一個表的時候往往發現這個表的主鍵被另一個表用做外鍵,而系統里有太多層次的引用.所以清起來相當麻煩 用下面這個腳本可以做到找出一個特定表的引用
- sql 語句練習與答案
- 深入C++ string.find()函數的用法總結
- SQL Server中刪除重復數據的幾個方法
- sql刪除重復數據的詳細方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數據庫,提示 無法為該請求檢索數據 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數的用法實例詳解
- 相關鏈接:
- 教程說明:
Mssql數據庫教程-解析SQL 2008的Change Data Capture功能(3)。