如何解决不按照HISTORY_RETENTION_PERIOD策略删除旧数据
环境:在Windows Server 2016 Standard上运行的sql Server 2017 Enterprise
测试用例
创建2个相同的时态表(仅名称不同),其中1个表的HISTORY_RETENTION_PERIOD
设置为1天。另一个表设置为INFINITE
。
代码:
CREATE TABLE dbo.TemporalPurgeTestNew
( TemporalPurgeTestNewId int IDENTITY(1,1),InsertedDate datetime2(0),ModifiedDate datetime2(0),UpdateNum int,CONSTRAINT pk_TemporalPurgeTestNew
PRIMARY KEY (TemporalPurgeTestNewId),SysstartTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL,SysEndTime datetime2 GENERATED ALWAYS AS ROW END NOT NULL,PERIOD FOR SYstem_TIME (SysstartTime,SysEndTime))
WITH (SYstem_VERSIONING = ON
( HISTORY_TABLE = dbo.TemporalPurgeTestNewHistory,DATA_CONSISTENCY_CHECK = ON,HISTORY_RETENTION_PERIOD = 1 DAY
));
GO
CREATE TABLE dbo.TemporalPurgeTestExistTbl
( TemporalPurgeTestNewId int IDENTITY(1,CONSTRAINT pk_TemporalPurgeTestExistTbl
PRIMARY KEY (TemporalPurgeTestNewId),SysEndTime))
WITH (SYstem_VERSIONING = ON
( HISTORY_TABLE = dbo.TemporalPurgeTestExistTblHistory
));
GO
在每个表中插入1条记录
创建一个sql Server代理作业以修改每个表中的记录,并使该作业运行3天。
在第三天,验证保留期为1天的表在关联的历史记录表中清除了第一天的数据,而第二历史记录表仍然包含第一天的数据。
第二张表将保留期限设置为1天
代码:
ALTER TABLE dbo.TemporalPurgeTestExistTbl
SET (SYstem_VERSIONING = ON
( HISTORY_TABLE = dbo.TemporalPurgeTestExistTblHistory,HISTORY_RETENTION_PERIOD = 1 DAY
));
已执行:将以与第一时态表相同的方式从第二历史表中清除数据。
实际:不会根据保留策略集删除第二历史表中的老化数据。
这是预期的行为还是我错过了清除第二个临时表中的数据的步骤。
解决方法
更新: 我对历史记录表清除有错误的假设。 我曾期望从表中删除最旧的数据,但是SQL Server不保证删除数据的顺序。 当我按记录计数检查时,可以看到数据已被删除。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。