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