SQL Server 2008更改数据捕获与审核跟踪中的触发器

SQL Server 2008更改数据捕获与审核跟踪中的触发器,sql,sql-server-2008,triggers,Sql,Sql Server 2008,Triggers,我们在web应用程序上使用触发器实现了审计跟踪。这些触发日志字段级别的更新。因此,在一个表中,如果您更改了5个列的值,我们在审计跟踪中有5条记录,每个列有一条旧值和一条新值 最近,我们已升级到SQL Server 2008。我一直在考虑使用新的变更数据捕获功能,因为它提供了一个非常简洁的行级更新,而且非常容易实现。只是想从那些一直在使用变更跟踪的人那里得到一些意见,以获取任何警告或任何其他关于此的实际有用信息 任何建议都会有帮助 编辑:-我在WPF应用程序中使用CDC。效果很好,但我发现了三个问

我们在web应用程序上使用触发器实现了审计跟踪。这些触发日志字段级别的更新。因此,在一个表中,如果您更改了5个列的值,我们在审计跟踪中有5条记录,每个列有一条旧值和一条新值

最近,我们已升级到SQL Server 2008。我一直在考虑使用新的变更数据捕获功能,因为它提供了一个非常简洁的行级更新,而且非常容易实现。只是想从那些一直在使用变更跟踪的人那里得到一些意见,以获取任何警告或任何其他关于此的实际有用信息

任何建议都会有帮助


编辑:-

我在WPF应用程序中使用CDC。效果很好,但我发现了三个问题:

  • 您需要经常备份变更表(我使用
    MERGE
    语句向历史表添加记录)。因为我发现记录在变更表中只保留了2-3天。不要忘记备份cdc.lsn\u time\u映射表
  • 启用CDC时无法截断表
  • 禁用cdc和重新启用存在问题(正如MS所说,应该在新的service pack中解决)。这个问题我只遇到过一次,所以没那么烦人。


无论如何,CDC是一种非常有用的机制,它可以帮助我跟踪数据库上的所有更改。

SQL Server中总共有四种解决方案,以下是详细信息:

  • SQL Server更改跟踪[CTC]
  • SQL Server更改数据捕获[CDC]
  • 带触发器的SQL Server审核跟踪[通用-手动]
  • SQL Server审计
SQL Server更改跟踪[CTC]

专业人士

  • 适用于所有SQL Server版本
  • DML触发器和附加表不是必需的,因为是单临时的 表由名为CHANGETABLE的CTC创建
  • 最低磁盘空间成本
  • 可用于查询数据的打包函数
  • 可配置的保留策略和CHANGETABLE的自动清理 需要时可关闭自动清理功能
  • 无需访问该特定数据库的LDF文件
  • 启用CTC时,可以进行清除/截断
缺点

  • 需要在数据库和每个必需表上启用
  • 同步跟踪机构
  • 所有表的跟踪数据都存储在名为 可变的
  • 无法获取历史数据,也无法提供以前的详细信息 以及跟踪列中的新数据
  • 复合密钥支持问题
  • 需要主键
  • 仅维护数据的当前状态w.r.t操作I=插入, U=更新,D=删除
  • SQL Server用户组“sysadmin”只能启用CTC
SQL Server更改数据捕获[CDC]​

专业人士

  • 启用on后,此功能提供逐表解决方案 数据库级
  • 高效快速​, 异步跟踪机制​
  • 可以得到历史数据,也可以给出准确的细节 阴影表中的以前和新数据
  • DML触发器不是必需的,因为新表是由CDC使用 每个表的前缀为“dbo”,后缀为“CT”
  • 所有与CDC相关的表和函数都将引用“CDC” 模式
  • 所有与CDC相关的存储过程都将使用“sys”或 “cdc”模式
缺点

  • 例如,不会捕获做出更改的用户的信息 您可能需要在每个表中创建一些额外的列 需要跟踪的列如下所示:

    CreatedAt日期时间默认值(getdate()), 由nvarchar(100)默认值(suser_sname())创建,​ UpdateDateTime默认值(getdate()),​ 由nvarchar(100)默认值(suser_sname())更新​

  • 应为CDC启用SQL Server代理,CDC也无法工作 当数据库引擎服务或SQL Server代理 服务正在网络服务帐户下运行
  • 需要在数据库和每个必需表上启用
  • 仅适用于企业版、开发版和数据中心版
  • 需要访问该特定数据库的LDF文件
  • 应启用SQL Server代理以捕获数据
  • 启用CDC时,无法在主表上清除/截断, 启用后,无法关闭阴影表上的自动清理​
  • 事务日志(LDF文件)需要额外空间
  • Db的用户组“Db_所有者”或服务器角色“sysadmin”只能 启用CDC
  • 跟踪包含以下内容的列中的更改时存在限制: XML、稀疏、时间戳、CLOB和BLOB数据类型
  • 如果调用方没有查看源数据的权限,则 函数返回错误229
带有触发器的审核跟踪​ [通用解决方案]

专业人士

  • 可以得到历史数据,也可以给出准确的细节 阴影表中的以前和新数据
  • 控制良好的w.r.t柱选择、操作[I=插入, U=更新,D=删除]
  • 由于审计跟踪流程的复杂性,流程可以实现自动化 可以通过一些常规或服务进行管理
  • 清除/截断以及自动清理也可以自动化
缺点

  • 需要具有一些额外列的表的精确副本作为卷影 桌子
  • 复杂流程w.r.t开发、数据管理和清除
  • 当阴影表中的数据变得巨大时,性能受到影响,清除是必要的 必需的
  • 考虑到所有重要因素,自动化流程需要花费大量时间 可靠性、安全性和性能方面。哪一个是本地的 默认情况下,DB引擎提供解决方案

这提供了一些很好的建议:-如果您需要跟踪同一列