亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

在SSIS 2012中使用CDC(數據變更捕獲)

2024-07-21 02:50:15
字體:
來源:轉載
供稿:網友
在SSIS 2012中使用CDC(數據變更捕獲)

最新項目稍有空隙,開始研究SQL Server 2012和2014的一些BI特性,參照(Matt)的一個示例,我們開始體驗SSIS中的CDC(Change Data Capture,變更數據捕獲)。

注:如果需要了解關于SQL Server 2008中的CDC,請看這里http://www.cnblogs.com/downmoon/archive/2012/04/10/2439462.html),本文假定讀者對CDC的工作方式已有所了解。^_^。

我們分三步完成實例:

1、準備基礎數據;

2、設計一個初始包;

3、在2的基礎上設計一個增量包。

首先請完成以下準備安裝:

(1)Visual studio 2012或Visual Studio 2012 Shell (Isolated) Redistributable Package

http://www.microsoft.com/en-us/download/details.aspx?id=30678

http://www.microsoft.com/en-us/download/details.aspx?id=30670

(2)SQL Server Data Tools - Business Intelligence for Visual Studio 2012

http://www.microsoft.com/zh-cn/download/details.aspx?id=36843

(2)SQL Server 2012企業版或開發版

http://www.microsoft.com/en-us/download/details.aspx?id=29066

(3)示例數據庫AdventureWorksDW2012(本文必須,如果自建表則不必)

http://msftdbPRodsamples.codeplex.com/releases/view/55330

好了,開始第一步:

/*-- =============================================-- 創建測試數據庫及數據表,借助AdventureWorksDW2012示例數據庫---Generate By downmoon(邀月),3w@live.cn-- =============================================*/--Create database CDCTest--GO--USE [CDCTest]--GO--SELECT * INTO DimCustomer_CDC--FROM [AdventureWorksDW2012].[dbo].[DimCustomer]--WHERE CustomerKey < 11500;--select * from DimCustomer_CDC;
/*-- =============================================-- 啟用數據庫級別CDC,只對企業版和開發版有效---Generate By downmoon(邀月),3w@live.cn-- =============================================*/USE [CDCTest]GOEXEC sys.sp_cdc_enable_dbGO-- add a primary key to the DimCustomer_CDC table so we can enable support for net changesIF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[DimCustomer_CDC]') AND name = N'PK_DimCustomer_CDC')  ALTER TABLE [dbo].[DimCustomer_CDC] ADD CONSTRAINT [PK_DimCustomer_CDC] PRIMARY KEY CLUSTERED (    [CustomerKey] ASC)GO/*-- =============================================-- 啟用表級別CDC---Generate By downmoon(邀月),3w@live.cn-- =============================================*/EXEC sys.sp_cdc_enable_table @source_schema = N'dbo',@source_name = N'DimCustomer_CDC',@role_name = N'cdc_admin',@supports_net_changes = 1GO
/*-- =============================================-- 創建一個目標表,與源表(Source)有相同的表結構--注意,在生產環境中,完全可以是不同的實例或服務器,本例為了方便,在同一個數據庫實例的同一個數據庫中演示---Generate By downmoon(邀月),3w@live.cn-- =============================================*/SELECT TOP 0 * INTO DimCustomer_DestinationFROM DimCustomer_CDC--select @@version;select * from DimCustomer_Destination;

邀月工作室邀月工作室

第二步:創建初始包

-- =============================================-- 我們使用兩個包來完成示例,一個初始包完成數據的初始加載,一個增量包完成數據的變更捕獲---Generate By downmoon(邀月),3w@live.cn-- =============================================

初始包包含如下邏輯:(1)使用CDC Control Task標記初始加載開始LSN(Use the CDC Control Task to mark the initial load start LSN)(2)轉換所有源表數據到目標表(Transfer all of the data from the source table into our destination table)(3)使用CDC Control Task標記初始加載結束LSN(Use the CDC Control Task to mark the initial load end LSN)示例:http://code.msdn.microsoft.com/My-First-Integration-fa41c0b1

新建一個SSIS項目,創建一個包“Initial Load”,如下圖:

邀月工作室

新建兩個CDC Control Task,分別命名為“CDC Control Task Start”和“CDC Control Task End”,分別對應屬性為“Mark initial load start”和""Mark initial load end"

連接管理器均為ADO.NET方式,其他屬性如下圖:

邀月工作室

邀月工作室

中間加入一個“Data Flow Task”,屬性默認。

邀月工作室

此時,運行包,可見CDC_States有初始標記。

邀月工作室

第三步:創建增量包

增量包包含如下邏輯:(1)創建一個源數據庫的連接管理器(Create a connection manager for the Source database)(2)設置CDC運算符以獲取處理邊界(Set the CDC Control Operation to Get processing range)(3)創建一個新的CDC狀態變量(CDC_state)(Create a new CDC state variable (CDC_state))(4)創建一個目標數據庫的連接管理器(Create a connection manager for the Destination database)(5)選擇前面初始加載包創建的狀態表(Select the state table (this was created by the Initial Load package) – [dbo].[cdc_states])(6)設置狀態名稱(必須匹配初始加載包使用過的狀態名稱,this must match what was used in the Initial Load package (CDC_State))

在項目中創建一個新包,命名為“Incremental Load”

在包的"Control Flow"視圖中,自上而下分別手動6個Task,順序如下圖,除去上面用到的三個Task,其余均為Execute SQL Task

邀月工作室

注意:CDC Control Task End的CDC運算符為MARK Process Range,CDC Control Task Start的CDC運算符為Get Process Range

其余4個Execute SQL Task的SQL語句如下:

--Create stage TablesIF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[stg_DimCustomer_UPDATES]') AND type in (N'U'))BEGIN   SELECT TOP 0 * INTO stg_DimCustomer_UPDATES   FROM DimCustomer_DestinationENDIF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[stg_DimCustomer_DELETES]') AND type in (N'U'))BEGIN   SELECT TOP 0 * INTO stg_DimCustomer_DELETES   FROM DimCustomer_DestinationEND
-- batch updateUPDATE destSET     dest.FirstName = stg.FirstName,     dest.MiddleName = stg.MiddleName,    dest.LastName = stg.LastName,     dest.YearlyIncome = stg.YearlyIncomeFROM     [DimCustomer_Destination] dest,     [stg_DimCustomer_UPDATES] stgWHERE     stg.[CustomerKey] = dest.[CustomerKey]
-- batch deleteDELETE FROM [DimCustomer_Destination]  WHERE[CustomerKey] IN (    SELECT [CustomerKey]    FROM [dbo].[stg_DimCustomer_DELETES])
-- truncate table truncate table  [dbo].[stg_DimCustomer_DELETES]truncate table  [dbo].[stg_DimCustomer_UPDATES]

最關鍵的一步,選中CDC Control Task Start,并切換到Data Flow,自上而下分別拖動CDC Source,CDC Splitter Transformer,三個ADO.NET Destination,如下圖:

邀月工作室

其中三個的目標表分別為:[DimCustomer_Destination],stg_DimCustomer_DELETES,stg_DimCustomer_UPDATES。

邀月工作室

邀月工作室

而CDC Source的連接管理器屬性如下圖:

邀月工作室

此時,可運行增量包,但我們不會看到任何運行結果,因為此時我們還沒有進行數據的Insert或Update操作。

下來我們提供一個腳本,測試下效果:

-- =============================================-- 更新一些數據,以顯示SSIS 2012中CDC的效果---Generate By downmoon(邀月),3w@live.cn-- =============================================USE [CDCTest]GO -- Transfer the remaining customer rowsSET IDENTITY_INSERT DimCustomer_CDC ON INSERT INTO DimCustomer_CDC(       CustomerKey, GeographyKey, CustomerAlternateKey, Title, FirstName,        MiddleName, LastName, NameStyle, BirthDate, MaritalStatus,        Suffix, Gender, EmailAddress, YearlyIncome, TotalChildren,        NumberChildrenAtHome, EnglishEducation, SpanishEducation,       FrenchEducation, EnglishOccupation, SpanishOccupation,        FrenchOccupation, HouSEOwnerFlag, NumberCarsOwned, AddressLine1,        AddressLine2, Phone, DateFirstPurchase, CommuteDistance)SELECT CustomerKey, GeographyKey, CustomerAlternateKey, Title, FirstName,        MiddleName, LastName, NameStyle, BirthDate, MaritalStatus,        Suffix, Gender, EmailAddress, YearlyIncome, TotalChildren,        NumberChildrenAtHome, EnglishEducation, SpanishEducation,       FrenchEducation, EnglishOccupation, SpanishOccupation,        FrenchOccupation, HouseOwnerFlag, NumberCarsOwned, AddressLine1,        AddressL
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美中文字幕| 91探花福利精品国产自产在线| 在线午夜精品自拍| 国产视频久久久| 992tv成人免费影院| 日韩av日韩在线观看| 精品久久久久久| 欧美成人精品xxx| 成人免费视频网址| 亚洲免费人成在线视频观看| 国产精品ⅴa在线观看h| 国产中文字幕亚洲| 91精品啪在线观看麻豆免费| 日韩精品视频免费专区在线播放| 亚洲人成电影网| 日韩天堂在线视频| 91免费精品视频| 91精品国产高清久久久久久久久| 国产精品美女av| 高清欧美性猛交xxxx| 久久天天躁狠狠躁夜夜av| 亚洲男人天堂2019| 91久久国产精品91久久性色| 中文字幕精品国产| 国产精品h片在线播放| 久久91亚洲精品中文字幕奶水| 精品国产老师黑色丝袜高跟鞋| 欧美电影第一页| 国产丝袜一区二区三区免费视频| 日韩精品免费在线| 韩国一区二区电影| 97视频在线免费观看| 国产精品白嫩美女在线观看| 久久久精品久久久久| 日日狠狠久久偷偷四色综合免费| 久久久精品久久久久| 国模私拍一区二区三区| 亚洲日韩中文字幕| 国产午夜精品一区二区三区| 久久久久999| 久久久国产在线视频| 国产美女久久久| 欧美一级电影免费在线观看| 亚洲午夜女主播在线直播| 4438全国亚洲精品在线观看视频| 亚洲欧美日韩中文视频| 色哟哟入口国产精品| 欧美日韩国产成人高清视频| 色香阁99久久精品久久久| 欧美日韩国产123| 影音先锋日韩有码| 亚洲在线视频福利| 国产精品丝袜久久久久久高清| 久久69精品久久久久久久电影好| 国内久久久精品| 亚洲精品网站在线播放gif| 国产精品狼人色视频一区| 欧美成年人视频| 国产精品无av码在线观看| 国语自产精品视频在线看抢先版图片| 国产成人小视频在线观看| 国产精品永久在线| 国产精品扒开腿做爽爽爽的视频| 国产精品美腿一区在线看| 亚洲女人初尝黑人巨大| 欧美一级视频免费在线观看| 91久久久久久久久| 亚洲人成网站777色婷婷| 亚洲国产日韩欧美在线图片| 日本精品久久中文字幕佐佐木| 欧美日韩国产影院| 欧美大片欧美激情性色a∨久久| 成人免费看吃奶视频网站| 欧美性猛交xxxxx水多| 色老头一区二区三区在线观看| 色哟哟亚洲精品一区二区| 亚洲缚视频在线观看| 国产一区二区三区日韩欧美| 国产亚洲精品美女久久久久| 久久影院中文字幕| 成人黄色激情网| 日韩av电影手机在线| 91影视免费在线观看| 欧美大人香蕉在线| 亚洲开心激情网| 性欧美xxxx视频在线观看| 亚洲午夜未满十八勿入免费观看全集| 中文字幕亚洲一区二区三区五十路| 国产99久久精品一区二区 夜夜躁日日躁| 国产男人精品视频| 亚洲精品久久视频| 久久精品国产清自在天天线| 91亚洲精品在线| 亚洲女人初尝黑人巨大| 久久精品色欧美aⅴ一区二区| 国产欧美 在线欧美| 91亚洲午夜在线| 26uuu另类亚洲欧美日本老年| 亚洲精品视频在线观看视频| 欧美激情视频一区二区| 国产精品欧美亚洲777777| 亚洲精品福利视频| 91sa在线看| 日本精品免费一区二区三区| 91久久久久久久| 成人综合国产精品| 欧美大片免费观看| 亚洲欧洲激情在线| 亚洲精品国产拍免费91在线| 久久精品91久久香蕉加勒比| 亚洲一二三在线| 欧美二区在线播放| 亚洲免费高清视频| 日韩中文娱乐网| 亚洲区在线播放| 黄色一区二区在线观看| 国产美女精品视频| 日韩在线观看免费全| 国产精品99久久久久久久久| 日韩精品在线第一页| 日韩欧中文字幕| 国产精品精品视频一区二区三区| 色一情一乱一区二区| 亚洲女人天堂成人av在线| 亚洲精品久久久久久久久久久久久| 久久久久久久久久久国产| 国产欧美最新羞羞视频在线观看| 亚洲无限av看| 亚洲国产精品高清久久久| 欧美一级在线亚洲天堂| 日韩av电影免费观看高清| 日韩av免费在线播放| 日韩成人在线视频观看| 国产亚洲日本欧美韩国| 欧美黑人狂野猛交老妇| 91麻豆国产语对白在线观看| 亚洲综合自拍一区| 日韩中文字幕在线视频| 第一福利永久视频精品| 亚洲理论片在线观看| 亚洲在线免费看| 精品网站999www| 日韩av在线电影网| 国产国语videosex另类| 成人亚洲欧美一区二区三区| 欧美自拍视频在线观看| 久久久久国产精品免费网站| 亚洲性xxxx| 一区二区日韩精品| 91久久国产综合久久91精品网站| 亚洲一区二区三区视频| 久久久久久久97| 精品无人国产偷自产在线| 亚洲最大激情中文字幕| 成人字幕网zmw| 精品爽片免费看久久| 亚洲一区二区三区在线免费观看| 欧美一级电影在线| 欧美激情乱人伦| 日韩在线视频中文字幕| 欧美黑人国产人伦爽爽爽| 国产日韩欧美电影在线观看| 疯狂做受xxxx高潮欧美日本| 欧美性生交大片免费|