日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQLServer2008數(shù)據(jù)庫中CDC的功能使用及說明

SQL Server 2008數(shù)據(jù)庫中CDC的功能使用及說明的相關(guān)知識是本文我們主要要介紹的內(nèi)容,那么什么是CDC呢?CDC(Change Data Capture:變更數(shù)據(jù)捕獲)這個功能是SQL Server 2008企業(yè)版的功能,它提供了一種新的機(jī)制,對表格數(shù)據(jù)的更新進(jìn)行跟蹤,在數(shù)據(jù)倉庫的建設(shè)過程中,通過這種技術(shù),可以簡化從業(yè)務(wù)數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)的復(fù)雜度。

劍河網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。創(chuàng)新互聯(lián)公司2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

1. 準(zhǔn)備一個數(shù)據(jù)庫,里面準(zhǔn)備一個表,Orders

2. 啟用數(shù)據(jù)庫級別的CDC選項

--在數(shù)據(jù)庫級別啟用CDC功能

EXEC sys.sp_cdc_enable_db

這個命令執(zhí)行完之后,會在系統(tǒng)表里面添加6個表格

3.在需要做數(shù)據(jù)捕獲的表上面啟用CDC選項

 
 
 
 
  1. EXEC sys.sp_cdc_enable_table @source_schema='dbo',@source_name='Orders',@capture_instance='Orders',@supports_net_changes=0,@role_name=null
  2. http://msdn.microsoft.com/en-us/library/bb522475.aspx

執(zhí)行之后,會有如下的輸出消息

這個提示的意思是說,要啟動SQL Server Agent。因為CDC功能是要通過一個兩個作業(yè)來自動化完成的

與此同時,執(zhí)行上面的命令還將在系統(tǒng)表中添加一個表格

還會添加一個函數(shù)

4.插入或者更新數(shù)據(jù)測試CDC功能

--插入或者更新數(shù)據(jù)測試CDC功能

 
 
 
 
  1. INSERT Orders(CustomerID) VALUES('Microsoft');
  2. INSERT Orders(CustomerID) VALUES('Google');
  3. UPDATE Orders SET CustomerID='Yahoo' WHERE OrderID=1
  4. DELETE FROM Orders WHERE OrderID=2

這個范例插入兩行數(shù)據(jù),緊接著又對第一行更新,然后還刪除了第二行,所以最終只有一行數(shù)據(jù)

那么,我們來看看CDC做了什么事情呢?

SELECT * FROM cdc.Orders_CT

我們可以來解釋一下上面結(jié)果的含義:

__$operation=2的情況,表示新增

__$operation=3或者4,表示更新,3表示舊值,4表示新值

__$operation=1的情況,表示刪除

很好理解,不是嗎?

但是,我們一般都是需要按照時間范圍進(jìn)行檢索,對吧,所以,需要使用下面的語法進(jìn)行查詢

--按照時間范圍查詢CDC結(jié)果

 
 
 
 
  1. DECLARE @from_lsn BINARY(10),@end_lsn BINARY(10)
  2. DECLARE @start_time DATETIME = '2011-8-10 00:00:00'
  3. DECLARE @end_time DATETIME ='2011-8-11 00:00:00'
  4. SELECT @from_lsn=sys.fn_cdc_map_time_to_lsn('smallest greater than or equal',@start_time)
  5. SELECT @end_lsn=sys.fn_cdc_map_time_to_lsn(' largest less than or equal',@end_time)
  6. SELECT * FROM cdc.fn_cdc_get_all_changes_Orders(@from_lsn,@end_lsn,'all')

關(guān)于sys.fn_cdc_map_time_to_lsn這個函數(shù),請參考http://msdn.microsoft.com/en-us/library/bb500137.aspx

查詢的結(jié)果如下:

如果需要包含更新操作的舊值,則可以以下的語法

 
 
 
 
  1. DECLARE @from_lsn BINARY(10),@end_lsn BINARY(10)
  2. DECLARE @start_time DATETIME = '2011-8-10 00:00:00'
  3. DECLARE @end_time DATETIME ='2011-8-11 00:00:00'
  4. SELECT @from_lsn=sys.fn_cdc_map_time_to_lsn('smallest greater than or equal',@start_time)
  5. SELECT @end_lsn=sys.fn_cdc_map_time_to_lsn(' largest less than or equal',@end_time)
  6. SELECT * FROM cdc.fn_cdc_get_all_changes_Orders(@from_lsn,@end_lsn,'all update old')

通常,為了方便起見,我們會將這個查詢定義為一個存儲過程,如下

--定義存儲過程來進(jìn)行查詢

 
 
 
 
  1. CREATE PROC GetOrdersCDCResult(@start_time DATETIME,@end_time DATETIME)
  2. AS
  3. BEGIN
  4. DECLARE @from_lsn BINARY(10),@end_lsn BINARY(10)
  5. SELECT @from_lsn=sys.fn_cdc_map_time_to_lsn('smallest greater than or equal',@start_time)
  6. SELECT @end_lsn=sys.fn_cdc_map_time_to_lsn(' largest less than or equal',@end_time)
  7. SELECT * FROM cdc.fn_cdc_get_all_changes_Orders(@from_lsn,@end_lsn,'all')
  8. END

然后,每次需要用的時候,就直接調(diào)用即可。

--執(zhí)行存儲過程

EXEC GetOrdersCDCResult '2011-8-10','2011-8-11'

5.結(jié)合SSIS實現(xiàn)事實表的增量更新

下面展示了一個SSIS 包的設(shè)計,這里面讀取CDC的數(shù)據(jù),先進(jìn)行一些查找,然后按照__$operation的值拆分成為三個操作,分別進(jìn)行插入,更新和刪除,這樣就可以實現(xiàn)對事實表的增量更新

本文所有的代碼如下:

 
 
 
 
  1. USE SampleDatabase
  2. GO
  3. --在數(shù)據(jù)庫級別啟用CDC功能
  4. EXEC sys.sp_cdc_enable_db 
  5. --在需要做數(shù)據(jù)捕獲的表格上面啟用CDC功能
  6. EXEC sys.sp_cdc_enable_table @source_schema='dbo',@source_name='Orders',@capture_instance='Orders',@supports_net_changes=0,@role_name=null
  7. --插入或者更新數(shù)據(jù)測試CDC功能
  8. INSERT Orders(CustomerID) VALUES('Microsoft');
  9. INSERT Orders(CustomerID) VALUES('Google');
  10. UPDATE Orders SET CustomerID='Yahoo' WHERE OrderID=1
  11. DELETE FROM Orders WHERE OrderID=2
  12. --查詢CDC的結(jié)果
  13. SELECT * FROM cdc.Orders_CT
  14. --按照時間范圍查詢CDC結(jié)果
  15. DECLARE @from_lsn BINARY(10),@end_lsn BINARY(10)
  16. DECLARE @start_time DATETIME = '2011-8-10 00:00:00'
  17. DECLARE @end_time DATETIME ='2011-8-11 00:00:00'
  18. SELECT @from_lsn=sys.fn_cdc_map_time_to_lsn('smallest greater than or equal',@start_time)
  19. SELECT @end_lsn=sys.fn_cdc_map_time_to_lsn(' largest less than or equal',@end_time)
  20. SELECT * FROM cdc.fn_cdc_get_all_changes_Orders(@from_lsn,@end_lsn,'all')
  21. --定義存儲過程來進(jìn)行查詢
  22. CREATE PROC GetOrdersCDCResult(@start_time DATETIME,@end_time DATETIME)
  23. AS
  24. BEGIN
  25. DECLARE @from_lsn BINARY(10),@end_lsn BINARY(10)
  26. SELECT @from_lsn=sys.fn_cdc_map_time_to_lsn('smallest greater than or equal',@start_time)
  27. SELECT @end_lsn=sys.fn_cdc_map_time_to_lsn(' largest less than or equal',@end_time)
  28. SELECT * FROM cdc.fn_cdc_get_all_changes_Orders(@from_lsn,@end_lsn,'all')
  29. END
  30. --執(zhí)行存儲過程
  31. EXEC GetOrdersCDCResult '2011-8-10','2011-8-11'

以上就是SQL Server 2008數(shù)據(jù)庫中CDC的功能使用及說明的全部內(nèi)容,本文我們就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!


本文題目:SQLServer2008數(shù)據(jù)庫中CDC的功能使用及說明
文章來源:http://www.5511xx.com/article/coehigs.html