gpt4 book ai didi

sql - 如何在不使用 CDC 功能的情况下在单个表中维护多个表的历史记录

转载 作者:行者123 更新时间:2023-12-04 19:21:34 27 4
gpt4 key购买 nike

是否可以将所有表的历史合并到一个表中?

我尝试使用 SQL server 2012 企业版 提供的 CDC 功能,但为此它创建了每个表的副本,这增加了数据库中表的数量。

是否也可以将发生DML的表名和列名跟踪并插入到历史表中?这会导致任何性能问题吗?

最佳答案

这是一个使用触发器的解决方案。

1 - 为您想要历史记录的每个表创建一个触发器。

2 - 在操作期间将修改后的数据(INS、UPD、DEL)从基表复制到审计表。

3 - 将所有数据以XML格式存储,以便多个表可以将数据存储在同一个审计表中。

我在我的一篇博客文章中确实介绍了这一点。这是审计少量数据的绝佳解决方案。每秒处理数千条记录更改时,可能会出现开销问题。

请在部署到生产环境之前进行测试!

这是跟踪表名和更改类型的审计表。

/*  
Create data level auditing - table.
*/

-- Remove table if it exists
IF EXISTS (SELECT * FROM sys.objects WHERE object_id =
OBJECT_ID(N'[ADT].[LOG_DML_CHANGES]') AND type in (N'U'))
DROP TABLE [ADT].[LOG_DML_CHANGES]
GO

CREATE TABLE [ADT].[LOG_DML_CHANGES]
(
[ChangeId]BIGINT IDENTITY(1,1) NOT NULL,
[ChangeDate] [datetime] NOT NULL,
[ChangeType] [varchar](20) NOT NULL,
[ChangeBy] [nvarchar](256) NOT NULL,
[AppName] [nvarchar](128) NOT NULL,
[HostName] [nvarchar](128) NOT NULL,
[SchemaName] [sysname] NOT NULL,
[ObjectName] [sysname] NOT NULL,
[XmlRecSet] [xml] NULL,
CONSTRAINT [pk_Ltc_ChangeId] PRIMARY KEY CLUSTERED ([ChangeId] ASC)
)
GO

这是文章。

http://craftydba.com/?p=2060

下图显示了具有多个 [TRG_TRACK_DML_CHGS_XXX] 触发器的单个 [LOG_DML_CHANGES] 表。

enter image description here

关于sql - 如何在不使用 CDC 功能的情况下在单个表中维护多个表的历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20972416/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com