sql-server - 不根据 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,1)
, InsertedDate datetime2(0)
, ModifiedDate datetime2(0)
, UpdateNum int
, CONSTRAINT pk_TemporalPurgeTestExistTbl
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.TemporalPurgeTestExistTblHistory
));
GO
在每个表中插入 1 条记录
创建一个 SQL Server Agent Job 来修改每个表中的记录,让 Job 运行 3 天。
在第 3 天,验证保留期为 1 天的表在关联的历史记录表中清除了第一天的数据,并且第二个历史记录表仍然包含第一天的数据。
更改第二张表以将保留期设置为 1 天
代码:
ALTER TABLE dbo.TemporalPurgeTestExistTbl
SET (SYSTEM_VERSIONING = ON
( HISTORY_TABLE = dbo.TemporalPurgeTestExistTblHistory
, DATA_CONSISTENCY_CHECK = ON
, HISTORY_RETENTION_PERIOD = 1 DAY
));
预期:数据将从第二个历史表中以与第一个时态表相同的方式清除。
实际:第二个历史表中的老化数据不会按保留策略集删除。
这是预期的行为,还是我错过了清除第二个时态表中数据的步骤。
解决方案
更新:我对历史表清除有错误的假设。我希望从表中删除最旧的数据,但 SQL Server 不保证删除数据的顺序。当我按记录计数检查时,我可以看到数据被删除。
推荐阅读
- javascript - 过滤数组中的两个对象并追加到组件中
- swift - 我可以在两个不同的 collectionView 之间有一个自定义视图吗?
- python - Django - 将字符串的一部分添加到新行无法正常工作
- python - 有没有办法在 python 中使用数据集中的变量计数以日期作为预测变量来运行线性回归?
- javascript - 如何在 react-native 中从子组件(带参数)调用父函数?
- ember.js - 如何在 ember-simple-auth 中替换授权方法
- machine-learning - 考虑多个变量的机器学习预测,这可能吗?
- excel - 如何跨多个条目标记修订的人员记录
- javascript - Javascript 镜像 html 对象
- ios - 如何在独立的 Apple Watch 应用中配置推送通知