启用和禁用数据保留策略
重要
Azure SQL Edge 将于 2025 年 9 月 30 日停用。 有关详细信息和迁移选项,请参阅停用通知。
注意
Azure SQL Edge 不再支持 ARM64 平台。
本文说明如何为数据库和表启用和禁用数据保留策略。
为数据库启用数据保留
下面的示例演示如何使用 ALTER DATABASE 来启用数据保留。
ALTER DATABASE [<DatabaseName>] SET DATA_RETENTION ON;
检查是否已为数据库启用了数据保留
以下命令可用于检查是否已为数据库启用了数据保留。
SELECT is_data_retention_enabled,
name
FROM sys.databases;
为表启用数据保留
必须为要自动清理其数据的每个表启用数据保留。 如果为数据库和表启用了数据保留,后台系统任务将定期扫描表,以识别并删除任何已过时的行。 可以在表创建过程中使用 CREATE TABLE,或者使用 ALTER TABLE 来对表启用数据保留。
下面的示例演示如何使用 CREATE TABLE 来为表启用数据保留。
CREATE TABLE [dbo].[data_retention_table] (
[dbdatetime2] DATETIME2(7),
[product_code] INT,
[value] CHAR(10),
CONSTRAINT [pk_current_data_retention_table] PRIMARY KEY CLUSTERED ([product_code])
)
WITH (
DATA_DELETION = ON (
FILTER_COLUMN = [dbdatetime2],
RETENTION_PERIOD = 1 day
)
);
CREATE TABLE 命令的 WITH (DATA_DELETION = ON (FILTER_COLUMN = [dbdatetime2], RETENTION_PERIOD = 1 day))
部分设置表的数据保留。 该命令使用以下必需的参数:
DATA_DELETION:指示数据保留是 ON 还是 OFF。
FILTER_COLUMN:表中列的名称,用于确定行是否已过时。 筛选列只能是具有以下数据类型的列:
- date
- smalldatetime
- datetime
- datetime2
- datetimeoffset
RETENTION_PERIOD:一个整数值,后跟一个单位描述符。 允许的单位为 DAY、DAYS、WEEK、WEEKS、MONTH、MONTHS、YEAR 和 YEARS。
下面的示例演示如何使用 ALTER TABLE 来为表启用数据保留。
ALTER TABLE [dbo].[data_retention_table]
SET (
DATA_DELETION = ON (
FILTER_COLUMN = [timestamp],
RETENTION_PERIOD = 1 day
)
)
检查是否已为表启用了数据保留
以下命令可用于检查已启用数据保留的表
SELECT name,
data_retention_period,
data_retention_period_unit
FROM sys.tables;
data_retention_period = -1
和 data_retention_period_unit
的值为 INFINITE,表示未在表上设置数据保留期。
以下查询可用于标识用作数据保留的 filter_column
的列。
SELECT name
FROM sys.columns
WHERE is_data_deletion_filter_column = 1
AND object_id = object_id(N'dbo.data_retention_table', N'U');
关联数据库和表数据保留设置
数据库和表中的数据保留设置结合使用,以确定是否在表上运行对过期行的自动清理。
数据库选项 | 表选项 | 行为 |
---|---|---|
OFF | OFF | 已禁用数据保留策略,且已禁用对过时记录的自动和手动清理。 |
OFF | ON | 已为表启用数据保留策略。 已禁用过时记录的自动清理,但手动清理方法可用于清理过时的记录。 |
ON | OFF | 已在数据库级别启用数据保留策略。 但是,由于在表级别禁用了该选项,因此不存在基于保留的过期行清理。 |
ON | ON | 已同时为数据库和表启用数据保留策略。 已启用过时记录的自动清理。 |
禁用表上的数据保留
可以使用 ALTER TABLE 来禁用表上的数据保留。 以下命令可用于禁用表上的数据保留。
ALTER TABLE [dbo].[data_retention_table]
SET (DATA_DELETION = OFF);
禁用数据库上的数据保留
可以使用 ALTER DATABASE 来禁用表上的数据保留。 以下命令可用于禁用数据库上的数据保留。
ALTER DATABASE [<DatabaseName>] SET DATA_RETENTION OFF;