成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server 2008數據庫中CDC的功能使用及說明

數據庫 SQL Server
本文我們主要對SQL Server 2008數據庫中CDC的功能使用進行了詳細地說明與解釋,希望能夠對您有所幫助。

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

1. 準備一個數據庫,里面準備一個表,Orders

SQL Server 2008數據庫中CDC的功能使用及說明

2. 啟用數據庫級別的CDC選項

--在數據庫級別啟用CDC功能

EXEC sys.sp_cdc_enable_db

這個命令執行完之后,會在系統表里面添加6個表格

SQL Server 2008數據庫中CDC的功能使用及說明

3.在需要做數據捕獲的表上面啟用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 

執行之后,會有如下的輸出消息

SQL Server 2008數據庫中CDC的功能使用及說明

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

SQL Server 2008數據庫中CDC的功能使用及說明

與此同時,執行上面的命令還將在系統表中添加一個表格

SQL Server 2008數據庫中CDC的功能使用及說明

還會添加一個函數

SQL Server 2008數據庫中CDC的功能使用及說明

4.插入或者更新數據測試CDC功能

--插入或者更新數據測試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 

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

SQL Server 2008數據庫中CDC的功能使用及說明

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

SELECT * FROM cdc.Orders_CT

SQL Server 2008數據庫中CDC的功能使用及說明

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

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

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

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

很好理解,不是嗎?

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

--按照時間范圍查詢CDC結果

  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') 

關于sys.fn_cdc_map_time_to_lsn這個函數,請參考http://msdn.microsoft.com/en-us/library/bb500137.aspx

查詢的結果如下:

SQL Server 2008數據庫中CDC的功能使用及說明

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

  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') 

SQL Server 2008數據庫中CDC的功能使用及說明

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

--定義存儲過程來進行查詢

  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 

然后,每次需要用的時候,就直接調用即可。

--執行存儲過程

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

5.結合SSIS實現事實表的增量更新

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

SQL Server 2008數據庫中CDC的功能使用及說明

本文所有的代碼如下:

  1. USE SampleDatabase  
  2. GO  
  3. --在數據庫級別啟用CDC功能  
  4. EXEC sys.sp_cdc_enable_db   
  5. --在需要做數據捕獲的表格上面啟用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. --插入或者更新數據測試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的結果  
  13. SELECT * FROM cdc.Orders_CT  
  14. --按照時間范圍查詢CDC結果  
  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. --定義存儲過程來進行查詢  
  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. --執行存儲過程  
  31. EXEC GetOrdersCDCResult '2011-8-10','2011-8-11' 

以上就是SQL Server 2008數據庫中CDC的功能使用及說明的全部內容,本文我們就介紹到這里了,希望本次的介紹能夠對您有所收獲!

【編輯推薦】

  1. SQL Server數據庫鏈接查詢的方式詳解
  2. SQL Server 2005導入Oracle 10g的C#源碼
  3. SQL Server數據庫沒有JOIN條件導致笛卡爾乘積
  4. SQL Server 2008中使用FileStream存取大文件實例介紹
  5. SQL Server數據庫row_number() over() 來自動產生行號
責任編輯:趙鵬 來源: 博客園
相關推薦

2010-07-13 14:31:09

SQL Server

2010-12-17 09:11:41

SQL Server

2009-03-19 09:30:59

2011-08-11 14:23:57

SQL Server 索引分區

2011-08-09 17:24:21

SQL Server 數據庫日志

2011-03-29 13:56:12

SQL Server 數據壓縮

2010-07-06 14:00:51

SQL Server

2011-07-25 12:56:44

SSMAOracle數據庫SQL Server

2011-08-18 10:21:50

SQL ServerDATEPART

2010-08-27 09:59:51

SQL Server

2011-08-25 13:41:50

SQL Server 變更跟蹤

2011-08-16 18:11:13

SQL Server 手動提交

2011-03-28 16:39:41

SQL Server

2011-08-15 14:12:16

SQL ServerDATEDIFF

2011-08-18 10:55:55

SQL ServerDATEADD

2011-03-29 13:33:26

2011-09-01 18:38:02

SQL Server 文件流功能

2010-07-06 15:02:12

SQL Server

2010-10-26 15:54:02

連接oracle數據庫

2009-04-10 15:37:48

SQL Server2鏡像實施
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩 欧美 二区 | 午夜精品久久久久久久久久久久久 | .国产精品成人自产拍在线观看6 | 久久久久久国产精品免费 | 小早川怜子xxxxaⅴ在线 | 二区在线观看 | 亚洲va在线va天堂va狼色在线 | 亚洲成人精品 | 天堂久久天堂综合色 | 成人亚洲片 | h视频在线看 | 成人欧美一区二区三区黑人孕妇 | 免费在线观看av | 亚洲精品欧美 | 一区二区三区高清 | 女朋友的闺蜜3韩国三级 | 婷婷久久网 | 欧美日韩视频在线 | 黄色免费观看 | 国产偷录叫床高潮录音 | 久久人人爽人人爽人人片av免费 | 国产精品久久久久久久久久免费 | 久久亚洲一区二区三区四区 | 激情五月婷婷综合 | 日韩一区二区三区在线视频 | 久久i| 91精品国产91 | 伊人影院在线观看 | 免费中文字幕日韩欧美 | 伊人一区| 亚洲码欧美码一区二区三区 | 亚洲不卡在线观看 | 91精品国产一区二区三区 | 精品久久久久久久久久久 | 91久久婷婷 | 久久久久国产一区二区三区 | 自拍视频在线观看 | 亚洲一区二区黄 | 成人综合视频在线观看 | 久久网站免费视频 | 欧美一区二区三区在线 |