sql server 2008新特性之一CDC(Change date capture)
Posted on 2011-08-24 15:50 leo.qian 阅读(448) 评论(0) 收藏 举报--查看有多少DB启用了CDC
select name,is_cdc_enabled from sys.databases
--启用该DB的CDC
EXECUTE sys.sp_cdc_enable_db;
--启用该DB中某一个表的CDC
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'User',
@role_name = null
GO
declare @from_lsn binary(10)
declare @to_lsn binary(10)
--获取与捕获的表相关的最小的LSN
select @from_lsn= sys.fn_cdc_get_min_lsn ('dbo_User')
--获取与捕获的表相关的最大的LSN
select @to_lsn= sys.fn_cdc_get_max_lsn()
-- Delete Statement = 1
-- Insert Statement = 2
-- Value before Update Statement = 3
-- Value after Update Statement = 4
--在指定间隔中发生的所有更改
--select * from cdc.fn_cdc_get_all_changes_dbo_User (@from_lsn,@to_lsn ,N'All')
--在指定间隔中发生的所有更改(包含Operation为3的,即包含Update之前的值)
--select * from cdc.fn_cdc_get_all_changes_dbo_User (@from_lsn,@to_lsn ,N'all update old')
--在指定间隔中发生的所有更改的最终内容(一条数据的所有操作,只返回最后的一条记录)
--如果row_filter_option为all或者all with mask,__$operation可能为1,2,4
--如果为all with merge _$operation可能为1,5
--SELECT * FROM cdc.fn_cdc_get_net_changes_dbo_User(@from_lsn, @to_lsn, 'all')
--SELECT * FROM cdc.fn_cdc_get_net_changes_dbo_User(@from_lsn, @to_lsn, 'all with mask')
--通过上一次请求的时间节点对应的lsn,返回下一次查询的下限时间点
select sys.fn_cdc_increment_lsn (@from_lsn)
--与某一指定时间点比较,获取符合筛选条件的sln,作为获取数据记录的区间参数
--largest less than 取小于当前时间的最大的sln
--largest less than or equal 取小于或者等于当前时间的最大sln
--smallest greater than 取大于当前时间的最小sln
--smallest greater than or equal 取大于或者等于当前时间的最小sln
select sys.fn_cdc_map_time_to_lsn ('smallest greater than or equal', '2011-08-23 15:20:00.000');
--为所有变更数据捕获查询函数创建包装函数的脚本,执行该script后,将会创建对应的function,参数由from_sln,to_sln
--更改为start_time和 end_time
DECLARE @wrapper_functions TABLE (
function_name sysname,
create_script nvarchar(max));
INSERT INTO @wrapper_functions
EXEC sys.sp_cdc_generate_wrapper_function;
DECLARE @create_script nvarchar(max);
DECLARE #hfunctions CURSOR LOCAL fast_forward
FOR
SELECT create_script FROM @wrapper_functions;
OPEN #hfunctions;
FETCH #hfunctions INTO @create_script;
WHILE (@@fetch_status <> -1)
BEGIN
EXEC sp_executesql @create_script
FETCH #hfunctions INTO @create_script
END;
CLOSE #hfunctions;
DEALLOCATE #hfunctions;
CDC通过对事务日志的异步读取,记录DML操作的发生时间、类型和实际影响的数据变化,然后将这些数据记录到启用CDC时自动创建的表中。通过cdc相关的存储过程,可以获取详细的数据变化情况。由于数据变化是异步读取的,因此对整体性能的影响不大,远小于通过Trigger实现的数据变化记录。
不同于Change Data Capture,Change Tracking仅记录DML操作的发生时间、类型和影响到的字段,不包含具体的变化数值
Change Tracking记录的数据比Change Data Capture少,对服务器性能的影响也小。
浙公网安备 33010602011771号