不按照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
    ));

已执行:将以与第一时态表相同的方式从第二历史表中清除数据。

实际:不会根据保留策略集删除第二历史表中的老化数据。

这是预期的行为还是我错过了清除第二个临时表中的数据的步骤。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)