【问题标题】:data capture using CDC使用 CDC 捕获数据
【发布时间】:2014-10-29 06:41:06
【问题描述】:

为了捕获已删除的用户名,我在 CDC 表中添加了一个新列(例如:- cdc.dbo_testCDC_CT)来设置记录的 SQL 用户名。 IE; ALTER TABLE cdc.dbo_testCDC_CT 添加用户名 VARCHAR(20) DEFAULT(SUSER_SNAME()))。 该列中的值始终为“sa”,但我被记录为 Windows 身份验证。为什么会这样?

【问题讨论】:

    标签: cdc change-data-capture


    【解决方案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 帐户下运行。这不是向您的系统添加审核的方法。前面提到的文章也可以为您提供一些关于实施审计的更好方法的建议。

    【讨论】:

    • @Sreepathi,请使用标记作为答案按钮奖励花时间回答您问题的人。
    【解决方案2】:

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

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

    希望这可能会有所帮助。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-13
        • 2020-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多