SQL Server 多表資料增量獲取和發布 1

2021-09-19 21:16:27 字數 1329 閱讀 5349

子公司統一門戶系統已完成開發,安全執行一年。接到通知,總部也開發了一套統一門戶,要求各子公司使用總部開發的平台,子公司領導討論決定使用總公司開發的平台,但是也不放棄自己開發的平台,而使用乙個折中的方案——使用子公司統一平台發布資訊後需要將資料同步到總公司開發的平台資料庫中(時間間隔需要越短越好)

1、無法提供統一門戶系統原始碼,只能提供門戶表的資料字典

2、領導要求基於門戶表內容進行資料變化記錄功能——當資料變化(新增,編輯,刪除),同步資訊到總公司平台,同時本地記錄變化資訊(永久儲存或者儲存幾個月)

3、需要保證同步的準確性和資料變化的實效性

在開發前,首先考慮的了幾個問題:

1、無法獲取統一門戶平台源**,哪些技術方法就不能使用

2、如何實時記錄資料庫表的變化資訊,寫乙個迴圈服務還是有工具軟體可以實現

3、用什麼技術進行開發,選取什麼應用作為開發模式

一、首先基於第一點,無法得到源**,如果在有源**的前提下,可以採取的方式為——對需要修改的表,進行**層更改,新建一張表歷史資訊表,在對應增加刪除修改的方法前後的前後進行日誌記錄。因為沒有原始碼,服務->資料庫的這條路徑就走不通,只能想辦法走資料庫->服務這條路。

2、變更資料捕獲(change data capture 即cdc)功能

cdc功能主要捕獲sqlserver指定表的增刪改操作,由於任何操作都會寫日誌(哪怕truncate),所以cdc的捕獲**於日誌檔案。日誌檔案會把更改應用到資料檔案中,同時也會標記符合要求的資料標記為需要新增跟蹤的項。然後通過一些配套函式,最後寫入到資料倉儲中。大概流程:

cdc流程.png

好處:1、在sqlserver2008(含)以後的企業版、開發版和評估版中可用。支援的資料庫版本更多

2、網上對cdc的講解和使用文件很多,方便學習

3、sqlserver自身的服務,安全可靠,且支援多表(只需一條配置語句),簡單方便,效率高

4、方便運維

三、專案基於.net開發,先編寫乙個測試demo,使用控制台程式。

大體的思路是:

建立三個類庫+乙個服務

模型層,公共幫助層,業務邏輯層+ui(控制台)

步驟1:基於cdc功能配置資料庫需要的表,完成資料捕獲功能配置。

步驟2:編寫乙個服務:迴圈秒後讀取cdc新生成的資料捕獲表,根據時間戳獲取需要每張表的資料,將獲取的資料放入乙個佇列中,同時將資料序列化放入日誌表,設定標誌位:未讀狀態

步驟3:開啟乙個方法——迴圈秒讀取佇列中的內容,如果佇列中存在值,啟動事務,同時修改資料庫日誌表當前資訊的狀態位和傳送資訊到總公司統一門戶平台

SQL Server 多表資料增量獲取和發布 4

最關鍵的在於獲取捕獲表資訊 系統表中間 ct結尾的資料 根據網上資料查取,找到了獲取當前捕獲表時間區間範圍內資料的方式。見 sql server 多表資料增量獲取和發布 2.3 10.按照時間範圍查詢cdc結果 declare from lsn binary 10 end lsn binary 10...

Sql Server多表查詢

同庫操作 select a.列名1,b.列名2,a.列名3 from 表名1 as a join 表名2 as b on a.關聯字段 b.關聯字段 不同庫操作 select a.列名1,b.列名2,a.列名3 from 庫名1.dbo.表名1 as a join 庫名2.dbo.表名2 as b ...

SQLServer多表聯查,多表分頁查詢

多表聯查 select p.s.sheng i.shi from dbo productrecordinfo 表名 p left join shenginfo s on p.shenginfo s.shengid 使用left join左連線 讓兩個表中的指定字段產生連線關係 left join s...