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

首頁 > 數據庫 > SQL Server > 正文

SQL Server審計功能入門:CDC(Change Data Capture)

2024-08-31 00:54:45
字體:
來源:轉載
供稿:網友
SQL Server審計功能入門:CDC(Change Data Capture)介紹

SQL Server 2008引入了CDC(Change Data Capture),它能記錄:

1. 哪些數據行發生了改變

2. 數據行變更的歷史記錄,而不僅僅是最終值。

跟CT(Change Tracking)相比,它通過作業實現異步變更跟蹤(像事務復制),而CT是同步實現的。因此它對性能的影響較輕并且不會影響事務。

典型應用是在提取、傳輸和加載數據到其它數據源,就像圖中的數據倉庫。

clip_image001 實現

微軟建議CDC結合快照快照隔離級別使用,可以避免讀取變更數據與變更數據寫入時的讀寫阻塞。

需要注意:快照隔離級別會有額外的開銷,特別是Tempdb(所有的數據更改都會被版本化存到tempdb)。

use mastergocreate database CDCTestgoalter database CDCTest set allow_snapshot_isolation ongo--enable CDC on database CDCTestuse CDCTestgoexec sys.sp_cdc_enable_dbgo

啟用CDC之后會新增一個叫CDC的Schema和一系列的系統表、SP和View。官方建議不要直接查詢系統表而是使用對應的系統SP/FN來獲取CDC數據。

clip_image002

系統對象

說明

建議使用的對象

cdc.captured_columns

為在捕獲實例中跟蹤的每一列返回一行

sys.sp_cdc_get_source_columns

cdc.change_tables

為數據庫中的每個更改表返回一行

sys.sp_cdc_help_change_data_capture

cdc.ddl_history

針對啟用了變更數據捕獲的表所做的每一數據定義語言 (DDL) 更改返回一行

sys.sp_cdc_get_ddl_history

cdc.lsn_time_mapping

為每個在更改表中存在行的事務返回一行

sys.fn_cdc_map_lsn_to_time (Transact-SQL) , sys.fn_cdc_map_time_to_lsn (Transact-SQL)

cdc.index_column

為與更改表關聯的每一索引列返回一行

sys.sp_cdc_help_change_data_capture

msdb.dbo.cdc_jobs

存儲用于捕獲和清除作業的變更數據捕獲配置參數

NA

cdc.<capture_instance>_CT

對源表啟用變更數據捕獲時創建的更改表。 該表為對源表執行的每個插入和刪除操作返回一行,為對源表執行的每個更新操作返回兩行.capture_instance格式=SchameName_TableName

cdc.fn_cdc_get_all_changes_<capture_instance> ,

cdc.fn_cdc_get_net_changes_<capture_instance>

創建測試表并對期啟用CDC。使用sys.sp_cdc_enable_table 對表啟用CDC。

--Create a test table for CDCuse CDCTestGOcreate table tb(ID int PRimary key ,name varchar(20),weight decimal(10,2));goEXECUTE sys.sp_cdc_enable_table    @source_schema = N'dbo'  , @source_name = N'tb'  , @role_name = null;GO

如果源表是數據庫中第一個要啟用變更數據捕獲的表,并且數據庫不存在事務發布,則 sys.sp_cdc_enable_table 還將為數據庫創建捕獲和清理作業。 它將 sys.tables 目錄視圖中的 is_tracked_by_cdc 列設置為 1。

對應的跟蹤表cdc.dbo_tb_CT包含了源表所有的變更數據。它包含原來所有的列和5個新的列,結構如圖:

clip_image003 驗證

當在源表中操行數據更改操作,表cdc.dbo_tb_CT會記錄下來。試一下:

clipboard[22]

為什么沒有數據呢?因為之前介紹過了,CDC是靠作業來捕獲變更數據的,我的Agent還沒有運行。

手動啟用后,就有數據了。

clip_image005

結果列的含義:

列名

數據類型

說明

__$start_lsn

binary(10)

更改提交的LSN。在同一事務中提交的更改將共享同一個提交 LSN 值。

__$seqval

binary(10)

一個事務內可能有多個更改發生,這個值用于對它們進行排序。

__$Operation

int

更改操作的類型:

1 = 刪除

2 = 插入

3 = 更新(捕獲的列值是執行更新操作前的值)。

4 = 更新(捕獲的列值是執行更新操作后的值)。

__$update_mask

varbinary(128)

位掩碼,源表中被CDC跟蹤的每一列對應一個位。如果 __$operation = 1 或 2,該值將所有已定義的位設置為 1。如果 __$operation = 3 或 4,則只有那些對應已更改列的位設置為 1。

現在再插入一行,并更新它,然后再刪除ID=1的行。再查看結果:

clip_image006

簡單說明一下跟蹤的查詢結果:總共5行,第一行和第二行是插入數據,第三行和第四行是更新前后的數據,第五行是刪除數據。操作類型由_$operation值可得知。 簡單應用

前文中創建的tb表,記錄了每個人的姓名和體重變化信息。另外某一個數據庫(表tb_rs),它是體重變化趨勢報表的數據源。它每天同步一次數據,更新自己的數據。怎么用CDC來實現這個需求呢?

CDC中記錄了start_lsn,如果能知道tb_rs上次同步完成時,tb中被同步的最大LSN。那下次同步時,只需要同步tb表中大于此LSN的變更記錄即可。

問題就簡單:獲取上次同步完成tb的最大LSN,獲取大于此LSN的所有變更記錄,更新tb_rs。

  • 由sys.fn_cdc_map_time_to_lsn可以將時間映射到對應的LSN,時間就是前一天。
  • 由cdc.fn_cdc_get_net_changes_<capture_instance>能得到一天內的所有的凈變更記錄。
  • 由變更記錄自定義同步邏輯和語句。
insert into tbvalues(1,'Ken',70.2),(3,'Joe',66),(4,'Rose',50)update tbset weight=70where ID=3;delete from tb where name='Rose';goDECLARE @begin_time datetime, @end_time datetime, @begin_lsn binary(10), @end_lsn binary(10); --get the intervalselect @begin_time=GETDATE()-1,@end_time=GETDATE();--map the time to LSN of the CDC table tbselect  @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', @begin_time),  @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);--get the net changes within the specified LSNsSELECT * FROM cdc.fn_cdc_get_net_changes_dbo_tb(@begin_lsn, @end_lsn, 'all');

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲韩国欧洲国产日产av| 日韩欧美极品在线观看| 国产精品久久久久秋霞鲁丝| 日韩激情第一页| 日韩欧美亚洲范冰冰与中字| 啪一啪鲁一鲁2019在线视频| 欧美性高潮床叫视频| 中文字幕av一区二区三区谷原希美| 日韩av电影在线免费播放| 国产成人亚洲综合青青| 91免费看片网站| 97精品久久久中文字幕免费| 孩xxxx性bbbb欧美| 欧美中文在线观看国产| 久99久在线视频| 91精品久久久久| 国产精品久久久久久久久影视| 欧美性生交大片免费| 亚洲高清久久久久久| 欧美性资源免费| 国产区精品在线观看| 91久久夜色精品国产网站| 97精品一区二区视频在线观看| 麻豆乱码国产一区二区三区| 亚洲国产精久久久久久久| 国产ts一区二区| 日韩欧美国产高清91| 国产精品丝袜久久久久久不卡| 国产不卡在线观看| 亚洲嫩模很污视频| 色妞一区二区三区| 亚洲国产成人久久综合一区| 亚洲人成网站在线播| 亚洲free嫩bbb| 成人两性免费视频| 亚洲嫩模很污视频| 91精品国产91久久久久久| 日本一区二区三区在线播放| 亚洲区一区二区| 不卡av电影在线观看| 91在线视频导航| 在线性视频日韩欧美| 国产精品福利久久久| 日韩欧美在线免费| 日韩最新中文字幕电影免费看| 久久夜色精品国产| 日日狠狠久久偷偷四色综合免费| 日韩在线精品视频| 亚洲成人精品在线| 欧美激情精品久久久久久变态| 成人性生交大片免费观看嘿嘿视频| 欧美激情第6页| 欧美视频裸体精品| 97精品久久久中文字幕免费| 欧美激情xxxxx| 国产一区二区三区日韩欧美| 欧美裸体男粗大视频在线观看| 欧美色欧美亚洲高清在线视频| 狠狠躁夜夜躁人人爽天天天天97| 亚洲日韩欧美视频| 3344国产精品免费看| 亚洲va欧美va国产综合剧情| 国内精品视频久久| 91久久综合亚洲鲁鲁五月天| 26uuu亚洲伊人春色| 欧美日韩中文在线| 成人网在线观看| 欧美日韩第一视频| 国产一区二区av| 日韩av网站电影| 欧美成人免费网| 97国产一区二区精品久久呦| 亚洲跨种族黑人xxx| 欧美电影免费观看高清| 亚洲变态欧美另类捆绑| 欧美成人免费在线视频| 中文字幕精品av| 精品国产自在精品国产浪潮| 91精品美女在线| 久久高清视频免费| 亚洲精品国精品久久99热| 中文字幕国产精品久久| 91免费看视频.| 国产精品在线看| 国产精品大陆在线观看| 亚洲最新av网址| 91久久久久久久久久| 日韩经典一区二区三区| 国产精品黄页免费高清在线观看| 亚洲欧美制服中文字幕| 91高清视频在线免费观看| 色先锋资源久久综合5566| 日韩中文字幕网站| 亚洲电影免费观看高清完整版在线| 日韩国产一区三区| 久久99精品久久久久久噜噜| 久久亚洲欧美日韩精品专区| 久久成人18免费网站| 久久精品国产欧美亚洲人人爽| 国产精品揄拍500视频| 国产精品扒开腿做爽爽爽视频| 永久免费毛片在线播放不卡| 亚洲视屏在线播放| www.久久草.com| 成人精品网站在线观看| 国产精品一区二区三区久久久| 91在线视频一区| 国产精品一区=区| 成人免费在线视频网址| 亚洲精品久久视频| 国产精品久久久久一区二区| 午夜精品一区二区三区在线视| 欧美一级在线播放| 成人网在线观看| 成人国产精品久久久久久亚洲| 欧美精品18videosex性欧美| 亚洲一区第一页| 日韩av影片在线观看| 欧美日韩国产激情| 成人女保姆的销魂服务| 性色av一区二区三区免费| 精品福利樱桃av导航| 久久亚洲国产精品| 日韩在线观看高清| 国产精品欧美日韩久久| 国产精品ⅴa在线观看h| 欧洲一区二区视频| www.美女亚洲精品| 91精品国产色综合久久不卡98| 欧美黑人xxxⅹ高潮交| 亚洲综合在线做性| 伊人成人开心激情综合网| 亚洲综合第一页| 亚洲国产成人精品女人久久久| 国产成人jvid在线播放| 成人av在线天堂| 亚洲欧美日韩国产成人| 亚洲成色999久久网站| 欧美精品在线免费播放| 日韩成人在线免费观看| 韩国视频理论视频久久| 欧美成人免费小视频| 午夜精品蜜臀一区二区三区免费| 国产精品情侣自拍| 91成人免费观看网站| 国产999在线| 国产精品网站视频| 中文字幕日韩欧美| 国产精品视频一区国模私拍| 亚洲激情视频在线观看| 久热精品视频在线免费观看| 欧美激情视频一区二区| 亚洲欧美国产高清va在线播| 激情亚洲一区二区三区四区| 欧美一级电影免费在线观看| 欧美性受xxxx白人性爽| 久久久精品一区二区| 亚洲欧美日韩中文在线制服| 中文字幕亚洲激情| 九九视频直播综合网| 久久久亚洲天堂| 精品毛片网大全| 久久亚洲精品毛片| 成人午夜激情免费视频|