SQL Server 2008更改数据捕获与审核跟踪中的触发器
我们在web应用程序上使用触发器实现了审计跟踪。这些触发日志字段级别的更新。因此,在一个表中,如果您更改了5个列的值,我们在审计跟踪中有5条记录,每个列有一条旧值和一条新值 最近,我们已升级到SQL Server 2008。我一直在考虑使用新的变更数据捕获功能,因为它提供了一个非常简洁的行级更新,而且非常容易实现。只是想从那些一直在使用变更跟踪的人那里得到一些意见,以获取任何警告或任何其他关于此的实际有用信息 任何建议都会有帮助SQL Server 2008更改数据捕获与审核跟踪中的触发器,sql,sql-server-2008,triggers,Sql,Sql Server 2008,Triggers,我们在web应用程序上使用触发器实现了审计跟踪。这些触发日志字段级别的更新。因此,在一个表中,如果您更改了5个列的值,我们在审计跟踪中有5条记录,每个列有一条旧值和一条新值 最近,我们已升级到SQL Server 2008。我一直在考虑使用新的变更数据捕获功能,因为它提供了一个非常简洁的行级更新,而且非常容易实现。只是想从那些一直在使用变更跟踪的人那里得到一些意见,以获取任何警告或任何其他关于此的实际有用信息 任何建议都会有帮助 编辑:-我在WPF应用程序中使用CDC。效果很好,但我发现了三个问
编辑:-我在WPF应用程序中使用CDC。效果很好,但我发现了三个问题:
- 您需要经常备份变更表(我使用
语句向历史表添加记录)。因为我发现记录在变更表中只保留了2-3天。不要忘记备份cdc.lsn\u time\u映射表MERGE
- 启用CDC时无法截断表
- 禁用cdc和重新启用存在问题(正如MS所说,应该在新的service pack中解决)。这个问题我只遇到过一次,所以没那么烦人。
无论如何,CDC是一种非常有用的机制,它可以帮助我跟踪数据库上的所有更改。SQL Server中总共有四种解决方案,以下是详细信息:
- SQL Server更改跟踪[CTC]
- SQL Server更改数据捕获[CDC]
- 带触发器的SQL Server审核跟踪[通用-手动]
- SQL Server审计
- 适用于所有SQL Server版本
- DML触发器和附加表不是必需的,因为是单临时的 表由名为CHANGETABLE的CTC创建
- 最低磁盘空间成本
- 可用于查询数据的打包函数
- 可配置的保留策略和CHANGETABLE的自动清理 需要时可关闭自动清理功能
- 无需访问该特定数据库的LDF文件
- 启用CTC时,可以进行清除/截断
- 需要在数据库和每个必需表上启用
- 同步跟踪机构
- 所有表的跟踪数据都存储在名为 可变的
- 无法获取历史数据,也无法提供以前的详细信息 以及跟踪列中的新数据
- 复合密钥支持问题
- 需要主键
- 仅维护数据的当前状态w.r.t操作I=插入, U=更新,D=删除
- SQL Server用户组“sysadmin”只能启用CTC
- 启用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引擎提供解决方案