使用CDC捕获数据

时间:2014-10-29 06:41:06

标签: cdc change-data-capture

要捕获已删除的用户名,我在CDC表中添加了一个新列(例如: - cdc.dbo_testCDC_CT)以设置记录的SQL用户名。 即; ALTER TABLE cdc.dbo_testCDC_CT ADD username VARCHAR(20)DEFAULT(SUSER_SNAME()))。 该列中的值始终为" sa",但我记录为Windows身份验证。为何如此讨厌?

3 个答案:

答案 0 :(得分:1)

首先,您永远不应该修改cdc生成的系统表。在dbo.testCDC表上启用cdc时会生成此表,并且将包含源表的列以及另外5列,其含义在此处描述:http://msdn.microsoft.com/en-us/library/bb500305(v=sql.110).aspx。当您从表中禁用cdc时,它将自动删除。

我建议先阅读cdc和预期的使用模式。一篇好的开头可能是这篇文章: http://technet.microsoft.com/en-us/magazine/2008.11.sql.aspx

要回答您的问题,为什么sa总是分配给您的列:* _CT表中的所有行都由日志读取器进程填充,该进程恰好在您的情况下在sa帐户下运行。这不是向系统添加审核的方法。前面提到的文章可以为您提供更好的实施审计方法的一些指示。

答案 1 :(得分:1)

您的解决方案应该是抓住“改变者”。或者'插入者'记录用户名并将其持久保存到捕获实例本身的基础数据表主题。这样,您的CDC实例也将为您捕获记录的用户名。

如前所述,您不应该更改系统生成的表,原因有两个: 1.当它们因任何原因恢复时,您的更改将会丢失 2.更改系统表可能会给您带来非常意想不到的后果。

希望这可能有所帮助。

答案 2 :(得分:0)

无需更改CDC表,而是更改基表(默认值设置为DEFAULT(SUSER_SNAME()的主源表))COLUMN,您将获得删除,插入或更新的用户

相关问题