你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

启用和禁用数据保留策略

重要

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 = -1data_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;