SQLServer 2008 CDC实现数据变更捕获使用图文详解
在一开始直接执行时,出现了报错信息:
消息22830,级别16,状态1,过程sp_cdc_enable_db_internal,第193 行
无法更新元数据来指示已对数据库adventureworks 启用了变更数据捕获。执行命令'setcdctracked(value = 1)' 时失败。返回的错误为15517: '无法作为数据库主体执行,因为主体"dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限。'。请使用此操作和错误来确定失败的原因并重新提交请求。
这里引出了另外一个知识点:错误号 15517 的错误
这种错误会在很多地方出现,如还原数据库的时候也会有可能出现。共同点是:某个/些存储过程使用了具有withexecute as 的选项。使其在当前库具有了某个架构,但是当在别的地方执行时,由于没有这个架构,所以就报错,解决方法:
alter authorization on database::[adventureworks] to [sa]
经过检查,uspupdateemployeehireinfo这个存储过程的确有:with execute as caller
使用sa的原因是即使sa被禁用,sa还是存在的。所以不会报错。
现在重新执行:
代码如下:
启用成功,然后通过以下语句检查是否成功:
代码如下:
创建成功后,将自动添加cdc用户和cdc架构。
例子:
把humanresources.department 这个表开启变更捕获。
代码如下:
然后查询是否成功:
对表开启以后,可以在下图中看到多了很多cdc架构开头的表:
步骤二:对数据库启用cdc数据库级别功能。必须显式启用: 代码如下:
某些数据库可能存在一些存储过程包含有:execute as 等语句,此时会报错:
代码如下:
现在检查是否成功:
代码如下:
结果如图:
代码如下:
可以从系统表中看到:
代码如下:
结果如下:
结果如下:
代码如下:
可以看到以下截图:
得到下图:
3、修改配置:sp_cdc_change_job: 代码如下:
得到以下结果:
代码如下:
删除作业:
代码如下:
可以看到现在只剩下一个作业了:
代码如下:
下面看到已经创建成功:
代码如下:
然后查询ddl记录表:
代码如下:
可以看到:
6、使用cdc的函数来获取更改: 代码如下: 代码如下:--检查数据
代码如下:
得到以下结果:
代码如下:
结果:
注意,由于该表刚好有一个modfieddate字段,所以和更改时间相同.
d、获取lsn边界:
代码如下:
结果如下:
推荐阅读
-
SQLServer 2008 CDC功能实现数据变更捕获脚本
-
SQLServer 2008 CDC实现数据变更捕获使用图文详解
-
SQLServer 2008 CDC功能实现数据变更捕获脚本
-
SQLServer 2008 CDC实现数据变更捕获使用图文详解
-
使用SQLServer 2008的CDC功能实现数据变更捕获
-
使用SQLServer 2008的CDC功能实现数据变更捕获
-
使用SQLServer 2008的CDC功能实现数据变更捕获
-
[转]使用SQLServer 2008的CDC功能实现数据变更捕获
-
使用CDC捕获SQLSERVER数据变更
-
[转]使用SQLServer 2008的CDC功能实现数据变更捕获