SQLServer 启用 CDC

用户怀疑系统数据经常性变化,要求我们验证,之前没有对数据库进行过任何设置,以前的情况不想在查了,只能现在开始监视,于是网上看到了sqlserver 2008的新功能,正好可以用上,把网上具有借鉴的整合到一起,供快速设置。


要捕获某个表的变更,必须先开启数据库级别的捕获,再开启表级的捕获


  1. 启用数据库:在当前数据库下执行命令
USE financetrade;
    GO

其中financetrade是数据库名称。

EXEC sys.sp_cdc_enable_db  

这个过程会在当前数据库下创建6个系统表
cdc.captured_columns
cdc.change_tables
cdc.ddl_history
cdc.index_columns
cdc.lsn_time_mapping
dbo.systranschemas

2查询哪些数据库启用了CDC功能

select * from sys.databases where is_cdc_enabled = 1  

3启用表,例如表名为”dbo.t1”

EXEC sys.sp_cdc_enable_table  
    @source_schema = 'dbo',  
    @source_name = 't1',  
    @role_name = null;  

注:为第一个表启用CDC后,SQLServer生成两个Agent作业
cdc.dbname_capture
cdc.dbname_cleanup
4. 查看表是否启用了CDC

select name, is_tracked_by_cdc from sys.tables where object_id = OBJECT_ID('dbo.t1')  

5禁用表(“dbo.t1”)

EXEC sys.sp_cdc_disable_table  
    @source_schema = 'dbo',  
    @source_name = 't1',  
    @capture_instance = 'all';  

6 禁用数据库
EXEC sys.sp_cdc_disable_db;
7一些异常情况的处理
(1) 数据库从2005恢复到2008,打开表级别的附加日志报错

未针对数据库 'AdventureWorks2014' 启用变更数据捕获。    
请确保已设置正确的数据库上下文,然后重试该操作。若要报告数据库已启用变更数据捕获这一情况,    
请查询 sys.databases 目录视图中的 is_cdc_enabled 列.    

解决办法:

ALTER AUTHORIZATION ON DATABASE::[数据库名] TO [sa]  

相关说明:
这里写图片描述

我们可以来解释一下上面结果的含义:

__$operation=2的情况,表示新增

__$operation=3或者4,表示更新,3表示旧值,4表示新值

__$operation=1的情况,表示删除

很好理解,不是吗?

但是,我们一般都是需要按照时间范围进行检索,对吧,所以,需要使用下面的语法进行查询

DECLARE @from_lsn BINARY(10),@end_lsn BINARY(10)  
DECLARE @start_time DATETIME = '2011-8-10 00:00:00' 
DECLARE @end_time DATETIME ='2011-8-11 00:00:00' 
SELECT @from_lsn=sys.fn_cdc_map_time_to_lsn('smallest greater than or equal',@start_time)  
SELECT @end_lsn=sys.fn_cdc_map_time_to_lsn(' largest less than or equal',@end_time)  
SELECT * FROM cdc.fn_cdc_get_all_changes_Orders(@from_lsn,@end_lsn,'all') 
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在SQL Server中启用Change Data Capture (CDC)(更改数据捕获)功能会对数据库产生一定的影响。 首先,启用CDC会在数据库中创建一些系统表和函数,用于存储和管理更改数据的元数据信息。这些系统表和函数占用一定的存储空间和系统资源,并且会增加数据库的复杂性。因此,在启用CDC之前,需要评估数据库的大小和性能,以确保数据库能够承受这些额外的开销。 其次,启用CDC会引入一些额外的系统作业,用于捕获和管理更改数据。这些作业会定期运行,对系统的性能产生一定的影响。如果系统的负载已经很高或者对实时性要求较高,启用CDC可能会导致系统性能下降。因此,需要根据实际情况来决定是否启用CDC以及如何配置捕获和清理作业的调度。 此外,启用CDC还会对数据库的事务日志产生一定的影响。CDC通过读取事务日志来捕获更改数据,如果数据库的事务日志非常繁忙,则可能影响到CDC的性能甚至导致CDC的延迟。在启用CDC之前,需要评估数据库的事务负载,以确保事务日志能够满足CDC的要求。 最后,启用CDC还需要对数据库中的相关对象进行一些设置和配置。这些设置和配置可能会对现有的应用程序和业务逻辑产生一定的影响,因此在启用CDC之前,需要进行充分的测试和验证。 总之,启用CDC会对SQL Server数据库产生一定的影响,包括存储空间、系统资源、性能和配置等方面。在决定是否启用CDC之前,需要综合考虑数据库的大小、性能、负载以及应用程序的需求,并进行充分的评估和测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值