SqlServer2008实例16捕获和跟踪数据修改的改变之三异步捕获表数据修改

    SQL Server 2008为异步跟踪所有发生在用户表上的数据修改提供了内建的方法,而不需要编写自定义触发器或查询。变更数据捕获拥有最小性能开销,可以用于其他数据源的持续更新,例如,将OLTP数据库中的数据变更迁移到数据仓库数据库。

--创建用来演示的新的数据库
IF NOT EXISTS (SELECT name
               FROM sys.databases
               WHERE name='TSQLRecipe_CDC_DEMO')
BEGIN
	CREATE DATABASE TSQLRecipe_CDC_DEMO
END	

--验证数据库是否启用了变更数据库变更捕获
SELECT is_cdc_enabled
FROM sys.data_spaces
WHERE name='TSQLRecipe_CDC_DEMO'

--开启cdc
USE TSQLRecipe_CDC_DEMO
EXECUTE sys.sp_cdc_enable_db
GO

   启用 变更数据捕获后,可以在数据库中通过使用sys.sp_cdc_enable  table系统存储过程对表进行变更捕获。这个存储过程的参数为:

参数

描述

@source_schema

这个参数定义了对象的架构

@source_name

这个参数指定了表名称

@role_name

这个选项允许你选择拥有访问CDC数据权限的用户定义角色的名称

@capture instance

一个表最多可以指定两个捕获实例。当你计划改变已被CDC捕获的表的架构时,这就派的上用场。你可以在不影响原始CDC的情况下改变榘构(除非它是一个数据类型变更).创建新的捕获实例,在两个表中跟踪变更,然后在你确认新的架构捕获适合你的需求后删除原始捕获实例。如果你不指定名称,默认值为schema_source

@supports_net_changes

当启用时,这个进项允许你只显示在LSN范围内最近的数据变更,这个选项需要表定义一个主键。如果没有定义主键,也可以在@index_name选项中指定一个唯一键

@index_name

这个参数允许在CDC使用的表不存在主键的情况下指定唯一键

@captured_column_llist

如果你对跟踪所有的列变更没兴趣,这个选项允许你减小列表

@filegroup_name 这个选项允许指定CDC数据存储在哪里。对于大型数据集,通过对不同的文件组进行分隔可能会带来更好的管理性及性能
@partition_switch 这个参数用TRUE或FALSE来指定是否允许对CDC表使用ALTER TABLE。。。SWITCH PARTITION(默认为FALSE)
--跟踪下面的新表所有的变更
use TSQLRecipe_CDC_DEMO
go

CREATE TABLE dbo.Equipment
	(
		EquipmentID int NOT NULL PRIMARY KEY IDENTITY(1,1),
		EquipmentDESC varchar(100) NOT NULL,
		LocationID int NOT NULL
	)
go	
--捕获所有发生在行的变更,并且只返回行的净变更.对于其他选项,都将使用默认值
EXEC sys.sp_cdc_enable_table
	@source_schema='dbo',
	@source_name='Equipment',
	@role_name=NULL,
	@capture_instance=NULL,
	@supports_net_changes=1,
	@index_name=NULL,
	@captured_column_list=NULL,
	@filegroup_name=default

  也可以使用sys.sp_cdc_heIp_change_data_capture存储过程来验证新配置的捕获实例的设置:

EXEC sys.sp_cdc_help_change_data_capture

本文地址:https://blog.csdn.net/ngbshzhn/article/details/107133981

THE END
喜欢就支持一下吧
点赞6 分享