ALTER DATABASE SET 选项(Transact-SQL)

在 SQL 数据库引擎中设置数据库选项。 其他 ALTER DATABASE 选项请参见 ALTER DATABASE (Transact-SQL)

Note

设置某些选项 ALTER DATABASE 可能需要独占数据库访问权限。 如果 ALTER DATABASE 语句未能及时完成,检查数据库中是否有其他会话阻塞该 ALTER DATABASE 会话。

有关语法约定的详细信息,请参阅 Transact-SQL 语法约定

选择一个产品

在下一行中,选择你感兴趣的产品名称。 这样做会在此网页上的此位置显示适合你所选择的任何产品的不同内容。

* SQL Server *  

 

SQL Server

数据库镜像、Always On 可用性组 和兼容性级别属于 SET 选项,考虑到这些选项的长度,将在单独的文章中介绍它们。 欲了解更多信息,请参见ALTER DATABASE数据库镜像ALTER DATABASE SET HADRALTER DATABASE和兼容性级别

数据库范围配置用于在单个数据库级别设置多个数据库配置。 有关详细信息,请参阅 ALTER DATABASE SCOPED CONFIGURATION

Note

许多数据库集选项可以通过语 SET 句 为当前会话配置,应用程序连接时通常会配置。 会话级 SET 选项将覆盖 ALTER DATABASE SET 值。 下面各节中所述的数据库选项是你可以为未明确提供其他 SET 选项值的会话设置的值。

Syntax

ALTER DATABASE { database_name | CURRENT }
SET
{
    <option_spec> [ ,...n ] [ WITH <termination> ]
}

{ [ FOR SECONDARY ] SET <set_options> }

<option_spec> ::=
{
    <accelerated_database_recovery>
  | <auto_option>
  | <automatic_tuning_option>
  | <change_tracking_option>
  | <containment_option>
  | <cursor_option>
  | <data_retention_policy>
  | <database_mirroring_option>
  | <date_correlation_optimization_option>
  | <db_encryption_option>
  | <db_state_option>
  | <db_update_option>
  | <db_user_access_option>
  | <delayed_durability_option>
  | <external_access_option>
  | FILESTREAM ( <FILESTREAM_option> )
  | <HADR_options>
  | <mixed_page_allocation_option>
  | <optimized_locking>
  | <parameterization_option>
  | <query_store_options>
  | <recovery_option>
  | <remote_data_archive_option>
  | <persistent_log_buffer_option>
  | <service_broker_option>
  | <snapshot_option>
  | <sql_option>
  | <suspend_for_snapshot_backup>
  | <target_recovery_time_option>
  | <termination>
  | <temporal_history_retention>
}
;

<accelerated_database_recovery> ::=
{
    ACCELERATED_DATABASE_RECOVERY = { ON | OFF }
     [ ( PERSISTENT_VERSION_STORE_FILEGROUP = { filegroup name } ) ]
}

<auto_option> ::=
{
    AUTO_CLOSE { ON | OFF }
  | AUTO_CREATE_STATISTICS { OFF | ON [ ( INCREMENTAL = { ON | OFF } ) ] }
  | AUTO_SHRINK { ON | OFF }
  | AUTO_UPDATE_STATISTICS { ON | OFF }
  | AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }
}

<automatic_tuning_option> ::=
{
    AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = { DEFAULT | ON | OFF } )
}

<change_tracking_option> ::=
{
    CHANGE_TRACKING
   {
       = OFF
     | = ON [ ( <change_tracking_option_list > [,...n] ) ]
     | ( <change_tracking_option_list> [,...n] )
   }
}

<change_tracking_option_list> ::=
{
   AUTO_CLEANUP = { ON | OFF }
 | CHANGE_RETENTION = retention_period { DAYS | HOURS | MINUTES }
}

<containment_option> ::=
   CONTAINMENT = { NONE | PARTIAL }

<cursor_option> ::=
{
    CURSOR_CLOSE_ON_COMMIT { ON | OFF }
  | CURSOR_DEFAULT { LOCAL | GLOBAL }
}

<database_mirroring_option>
  ALTER DATABASE Database Mirroring

<date_correlation_optimization_option> ::=
    DATE_CORRELATION_OPTIMIZATION { ON | OFF }

<db_encryption_option> ::=
    ENCRYPTION { ON | OFF | SUSPEND | RESUME }

<db_state_option> ::=
    { ONLINE | OFFLINE | EMERGENCY }

<db_update_option> ::=
    { READ_ONLY | READ_WRITE }

<db_user_access_option> ::=
    { SINGLE_USER | RESTRICTED_USER | MULTI_USER }

<delayed_durability_option> ::=
    DELAYED_DURABILITY = { DISABLED | ALLOWED | FORCED }

<external_access_option> ::=
{
    DB_CHAINING { ON | OFF }
  | TRUSTWORTHY { ON | OFF }
  | DEFAULT_FULLTEXT_LANGUAGE = { <lcid> | <language name> | <language alias> }
  | DEFAULT_LANGUAGE = { <lcid> | <language name> | <language alias> }
  | NESTED_TRIGGERS = { OFF | ON }
  | TRANSFORM_NOISE_WORDS = { OFF | ON }
  | TWO_DIGIT_YEAR_CUTOFF = { 1753, ..., 2049, ..., 9999 }
}

<FILESTREAM_option> ::=
{
    NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL
  | DIRECTORY_NAME = <directory_name>
}

<HADR_options> ::=
    ALTER DATABASE SET HADR

<mixed_page_allocation_option> ::=
    MIXED_PAGE_ALLOCATION { OFF | ON }

<parameterization_option> ::=
    PARAMETERIZATION { SIMPLE | FORCED }

<query_store_options> ::=
{
    QUERY_STORE
    {
          = OFF [ ( FORCED ) ]
        | = ON [ ( <query_store_option_list> [,...n] ) ]
        | ( < query_store_option_list> [,...n] )
        | CLEAR [ ALL ]
    }
}

<query_store_option_list> ::=
{
      OPERATION_MODE = { READ_WRITE | READ_ONLY }
    | CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = number )
    | DATA_FLUSH_INTERVAL_SECONDS = number
    | MAX_STORAGE_SIZE_MB = number
    | INTERVAL_LENGTH_MINUTES = number
    | SIZE_BASED_CLEANUP_MODE = { AUTO | OFF }
    | QUERY_CAPTURE_MODE = { ALL | AUTO | CUSTOM | NONE }
    | MAX_PLANS_PER_QUERY = number
    | WAIT_STATS_CAPTURE_MODE = { ON | OFF }
    | QUERY_CAPTURE_POLICY = ( <query_capture_policy_option_list> [,...n] )
}

<query_capture_policy_option_list> ::=
{
      STALE_CAPTURE_POLICY_THRESHOLD = number { DAYS | HOURS }
    | EXECUTION_COUNT = number
    | TOTAL_COMPILE_CPU_TIME_MS = number
    | TOTAL_EXECUTION_CPU_TIME_MS = number
}

<recovery_option> ::=
{
    RECOVERY { FULL | BULK_LOGGED | SIMPLE }
  | TORN_PAGE_DETECTION { ON | OFF }
  | PAGE_VERIFY { CHECKSUM | TORN_PAGE_DETECTION | NONE }
}

<remote_data_archive_option> ::=
{
    REMOTE_DATA_ARCHIVE =
    {
        ON ( SERVER = <server_name>,
             {
                  CREDENTIAL = <db_scoped_credential_name>
                  | FEDERATED_SERVICE_ACCOUNT = ON | OFF
             }
        )
        | OFF
    }
}

<persistent_log_buffer_option> ::=
{
    PERSISTENT_LOG_BUFFER
    {
          = ON (DIRECTORY_NAME= 'path-to-directory-on-a-DAX-volume')
        | = OFF
    }
}

<service_broker_option> ::=
{
    ENABLE_BROKER
  | DISABLE_BROKER
  | NEW_BROKER
  | ERROR_BROKER_CONVERSATIONS
  | HONOR_BROKER_PRIORITY { ON | OFF }
}

<snapshot_option> ::=
{
    ALLOW_SNAPSHOT_ISOLATION { ON | OFF }
  | READ_COMMITTED_SNAPSHOT { ON | OFF }
  | MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = { ON | OFF }
}

<sql_option> ::=
{
    ANSI_NULL_DEFAULT { ON | OFF }
  | ANSI_NULLS { ON | OFF }
  | ANSI_PADDING { ON | OFF }
  | ANSI_WARNINGS { ON | OFF }
  | ARITHABORT { ON | OFF }
  | COMPATIBILITY_LEVEL = { 170 | 160 | 150 | 140 | 130 | 120 | 110 | 100 }
  | CONCAT_NULL_YIELDS_NULL { ON | OFF }
  | NUMERIC_ROUNDABORT { ON | OFF }
  | QUOTED_IDENTIFIER { ON | OFF }
  | RECURSIVE_TRIGGERS { ON | OFF }
}

<suspend_for_snapshot_backup> ::=
    SET SUSPEND_FOR_SNAPSHOT_BACKUP = { ON | OFF } [ ( MODE = COPY_ONLY ) ]

<target_recovery_time_option> ::=
    TARGET_RECOVERY_TIME = target_recovery_time { SECONDS | MINUTES }

<termination>::=
{
    ROLLBACK AFTER number [ SECONDS ]
  | ROLLBACK IMMEDIATE
  | NO_WAIT
}

<temporal_history_retention> ::=
    TEMPORAL_HISTORY_RETENTION { ON | OFF }

<data_retention_policy> ::=
    DATA_RETENTION { ON | OFF }

<optimized_locking> ::=
{
    OPTIMIZED_LOCKING = { ON | OFF }
}

Arguments

database_name

要修改的数据库的名称。

CURRENT

适用于:SQL Server(从 SQL Server 2012(11.x)开始)

运行当前数据库中的操作。 并不是所有上下文中的所有选项都支持 CURRENT。 如果 CURRENT 失败,则提供数据库名称。

中学阶段

适用于:SQL Server 2022 (16.x) 及更高版本

指定次要副本的设置。 所有次要副本必须具有相同的值。 类似于 FOR SECONDARY(Transact-SQL) 的。ALTER DATABASE SCOPED CONFIGURATION

仅用于查询存储(QUERY_STORE)和自动优化(AUTOMATIC_TUNING)。

在 SQL Server Management Studio 版本 21 之前,语法有效, FOR SECONDARY 但 IntelliSense 无法识别。 对于 SQL Server 2022,SSMS IntelliSense 无法将语法识别 FOR SECONDARY 为有效语法,但它有效。

< > accelerated_database_recovery ::=

适用于:SQL Server(从 SQL Server 2019(15.x)开始)

启用 加速数据库恢复(ADR)。 ADR 默认在 SQL Server 2019(15.x)及更高版本中设置为 OFF 。 使用此语法,可以为持久版本存储(PVS)数据指定特定的文件组。 如果未指定文件组,PVS 将使用 PRIMARY 文件组。 有关详细信息,请参阅 管理加速数据库恢复

要设置ACCELERATED_DATABASE_RECOVERY开或关闭,数据库必须只有运行该 ALTER DATABASE 命令的连接。 但是,数据库不必一定要处于单用户模式下。 除非数据库为 ONLINE,否则无法更改此选项的状态。

< > auto_option ::=

控制自动选项。

AUTO_CLOSE { ON |OFF }

  • ON

    在最后一个用户退出后,数据库完全关闭,其资源得到释放。

    当用户尝试再次使用该数据库时,该数据库将自动重新打开。 例如,当用户发出 USE database_name 语句时,会发生此行为。 数据库可能会完全关闭,AUTO_CLOSE设置为 ON。 如果是这样,则在用户下次重启数据库引擎时尝试使用数据库之前,数据库不会重新打开。

    关闭数据库后,下次应用程序尝试使用该数据库时,必须先打开该数据库,然后将状态更改为联机。 这可能需要一些时间,并可能导致应用程序超时。

  • OFF

    在最后一个用户退出后,数据库仍然保持打开状态。

    AUTO_CLOSE 选项允许将数据库文件作为常规文件进行管理,因此,该选项对于桌面数据库很有用。 它们可以移动、复制以制作备份,甚至可以通过电子邮件发送给其他用户。 AUTO_CLOSE 进程为异步进程;反复打开和关闭数据库不会降低性能。

Note

AUTO_CLOSE 选项在包含的数据库或 SQL 数据库 中不可用。 您可以通过检查 is_auto_close_onsys.databases 目录视图中的列或 IsAutoCloseDATABASEPROPERTYEX 函数的属性来判断该选项的状态。

当AUTO_CLOSE设置为ON时, sys.databases 目录视图中的某些列和 DATABASEPROPERTYEX 函数返回NULL,因为数据库无法检索数据。 若要解决此问题,请运行 USE 语句打开数据库。

数据库镜像要求将 AUTO_CLOSE 设置为 OFF。

数据库设置为 AUTOCLOSE = ON 时,启动数据库自动关闭的操作将清除 SQL Server 实例的计划缓存。 清除计划缓存将导致对所有后续执行计划进行重新编译,并可能导致查询性能暂时性地突然降低。 从 SQL Server 2005 (9.x) Service Pack 2 开始,对于计划缓存中每个已清除的缓存存储区,SQL Server 错误日志包含以下信息性消息:SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to some database maintenance or reconfigure operations。 每隔五分钟,只要缓存在这段时间间隔内得到刷新,此消息就记录一次。

AUTO_CLOSE设置在一些罕见的情况下可能是一项有用的功能,例如,在 SQL Server 实例中,没有足够的内存来稳定运行大量数据库,或者对于具有大量数据库的旧版 32 位 SQL Server 实例。 在这种情况下,启用AUTO_CLOSE并节省在不使用数据库的应用程序时保持数据库打开所需的内存资源可能很有用。 当数据库打开时,需要一些默认内存分配(例如,用于表示各种数据库元数据对象和事务日志缓冲区的内部结构)。

AUTO_CREATE_STATISTICS { ON |OFF }

  • ON

    查询优化器根据需要在查询谓词中的单列上创建统计信息,以便改进查询计划和查询性能。 在查询优化器编译查询时创建这些单列统计信息。 这些单列统计信息只在尚不是现有统计信息对象的第一列的列上创建。

    默认设置为 ON。 建议您对于大多数数据库使用默认设置。

  • OFF

    查询优化器在编译查询时不在查询谓词中的单列上创建统计信息。 将此选项设置为 OFF 可能导致并非最佳的查询计划以及查询性能下降。

您可以通过查看is_auto_create_stats_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAutoCreateStatisticsDATABASEPROPERTYEX 函数的属性来确定状态。

更多信息请参见 统计学中的“使用全数据库统计选项”部分。

INCREMENTAL = ON |OFF

适用于:SQL Server(自SQL Server 2014(12.x)起)和Azure SQL 数据库

设置为 AUTO_CREATE_STATISTICS ,并设置为 ONINCREMENTALON 只要支持增量统计信息,就会将自动创建的统计信息设置为增量统计信息。 默认值为 OFF。 有关详细信息,请参阅 CREATE STATISTICS

AUTO_SHRINK { ON |OFF }

  • ON

    数据库文件是定期收缩的候选项。 除非有特定要求,否则不要将 AUTO_SHRINK 数据库选项设置为 ON。 有关详细信息,请参阅收缩数据库

    数据文件和日志文件都可以自动收缩。 AUTO_SHRINK 仅当将数据库设置为 SIMPLE 恢复模式或备份日志时,才减小事务日志的大小。 设置为 >时,数据库文件不会在定期检查未使用的空间时自动收缩。

    当超过 25% 的文件包含未使用的空间时,此选项 AUTO_SHRINK 会收缩文件。 它将文件缩小为两个大小之一(以较大者为准):

    • 其中 25% 的文件不包含任何内容时的大小
    • 文件创建时的大小

    不能收缩只读数据库。

  • OFF

    在定期检查未使用的空间期间,数据库文件不会自动收缩。

您可以通过查看is_auto_shrink_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAutoShrinkDATABASEPROPERTYEX 函数的属性来确定状态。

Note

AUTO_SHRINK 选项在包含数据库中不可用。

AUTO_UPDATE_STATISTICS { ON |OFF }

  • ON

    指定在统计信息由查询使用并且可能过期时,查询优化器更新统计信息。 统计信息将在插入、更新、删除或合并操作更改表或索引视图中的数据分布后过期。 查询优化器通过计算自最后统计信息更新后数据修改的次数并且将这一修改次数与某一阈值进行比较,确定统计信息何时可能过期。 该阈值基于表中或索引视图中的行数。

    查询优化器在编译查询和运行缓存查询计划前,检查是否存在过期的统计信息。 查询优化器使用查询谓词中的列、表和索引视图确定哪些统计信息可能过期。 查询优化器在编译查询之前确定此信息。 在运行缓存查询计划前,数据库引擎 确认该查询计划引用最新的统计信息。

    AUTO_UPDATE_STATISTICS选项适用于为索引创建的统计数据、查询谓词中的单列统计数据,以及使用该 CREATE STATISTICS 语句创建的统计数据。 此选项也适用于筛选的统计信息。

    默认值为 ON。 建议您对于大多数数据库使用默认设置。

    使用 AUTO_UPDATE_STATISTICS_ASYNC 选项可以指定统计信息是同步更新还是异步更新。

  • OFF

    指定在查询使用统计信息时,查询优化器不更新统计信息。 查询优化器在统计信息可能过期时,也不会更新统计信息。 将此选项设置为 OFF 可能导致并非最佳的查询计划以及查询性能下降。

您可以通过查看is_auto_update_stats_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAutoUpdateStatisticsDATABASEPROPERTYEX 函数的属性来确定状态。

更多信息请参见 统计学中的“使用全数据库统计选项”部分。

AUTO_UPDATE_STATISTICS_ASYNC { ON |OFF }

  • ON

    指定针对 AUTO_UPDATE_STATISTICS 选项的统计信息更新是异步的。 查询优化器不等待统计信息更新完成即编译查询。

    除非已将 AUTO_UPDATE_STATISTICS 设置为 ON,否则将此选项设置为 ON 不会产生任何影响。

    默认情况下,AUTO_UPDATE_STATISTICS_ASYNC 选项为 OFF,并且查询优化器以同步方式更新统计信息。

  • OFF

    指定针对 AUTO_UPDATE_STATISTICS 选项的统计信息更新是同步的。 查询优化器在编译查询前等待统计信息更新完成。

    Note

    除非已将 AUTO_UPDATE_STATISTICS 设置为 ON,否则将此选项设置为 OFF 不会产生任何影响。

您可以通过查看is_auto_update_stats_async_onsys.databases目录视图中的该列来确定该选项的状态。

如需了解更多关于何时使用同步或异步统计更新的信息,请参见 统计学中的“统计选项”部分。

< > automatic_tuning_option ::=

适用于:SQL Server(从 SQL Server 2017(14.x)开始)

启用或禁用 FORCE_LAST_GOOD_PLAN自动调谐 选项。 你可以在 sys.database_automatic_tuning_options 视图中查看此选项的状态。

FORCE_LAST_GOOD_PLAN = { DEFAULT |ON中 |不对 }

  • DEFAULT

    SQL Server 的默认值为 OFF。

  • ON

    数据库引擎在新查询计划导致性能回归的 Transact-SQL 查询中自动强制执行上一个已知完好的计划。 数据库引擎通过该强制计划持续监视 Transact-SQL 查询的查询性能。

    如果性能提升,数据库引擎会继续使用上一个已知的良好计划。 如果未检测到性能提升,数据库引擎将生成新的查询计划。 如果查询 存储 未启用或查询存储未处于 读写 模式,该语句将失败。

  • OFF

    数据库引擎报告了由查询计划变更引起的潜在查询性能回归 sys.dm_db_tuning_recommendations 。 但是,这些建议不会自动应用。 用户可以通过应用视图中显示的 Transact-SQL 脚本来监视正在应用的建议和修复已识别的问题。 默认值为 OFF。

< > change_tracking_option ::=

适用于:SQL Server 和 Azure SQL 数据库

控制更改跟踪选项。 可以启用更改跟踪、设置选项、更改选项以及禁用更改跟踪。 示例请参见本文后面的 示例 部分。

  • ON

    对数据库启用更改跟踪。 启用更改跟踪时,还可以设置 AUTO CLEANUP 和 CHANGE RETENTION 选项。

  • AUTO_CLEANUP = { ON |OFF }

    • ON

      在经过指定的保持期后会自动删除更改跟踪信息。

    • OFF

      不会从数据库中自动删除更改跟踪数据。

  • CHANGE_RETENTION = retention_period { 天 |营业时间 |会议记录}

    指定在数据库中保留更改跟踪信息的最短期限。 只有在 AUTO_CLEANUP 值为 ON 时,才会删除数据。

    retention_period 是一个整数,表示保留期的数值成分。

    默认的保留期限是 2天。 最短保持期为 1 分钟。 默认的保留类型是 天数

  • OFF

    对数据库禁用更改跟踪。 先对所有表禁用更改跟踪,然后才能对数据库禁用更改跟踪。

< > containment_option ::=

适用于:SQL Server(从 SQL Server 2012(11.x)开始)

控制数据库包含选项。

CONTAINMENT = { NONE |PARTIAL}

  • NONE

    该数据库不是包含数据库。

  • PARTIAL

    该数据库是包含数据库。 如果数据库启用了复制、更改数据捕获或更改跟踪,则将数据库包含设置为部分失败。 错误检查将在一次失败后停止。 有关包含的数据库的详细信息,请参阅 Contained Databases

< > cursor_option ::=

控制游标选项。

CURSOR_CLOSE_ON_COMMIT { 上 |不对 }

  • ON

    在提交或回滚事务时打开的所有游标都会关闭。

  • OFF

    提交事务时游标保持打开状态;回滚事务会关闭任何游标,但定义为 INSENSITIVE 或 STATIC 的游标除外。

使用 SET 语句设置的连接级别设置将替代默认 CURSOR_CLOSE_ON_COMMIT数据库设置。 ODBC 和 OLE DB 客户端默认会为会话发出连接级别 SET 的语句设置 CURSOR_CLOSE_ON_COMMIT 为 OFF。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET CURSOR_CLOSE_ON_COMMIT

您可以通过检查 is_cursor_close_on_commit_onsys.databases 目录视图中的列或 IsCloseCursorsOnCommitEnabledDATABASEPROPERTYEX 函数的属性来判断该选项的状态。

CURSOR_DEFAULT { LOCAL |GLOBAL }

适用于:SQL Server

控制游标作用域是使用 LOCAL 还是 GLOBAL。

  • LOCAL

    如果指定 LOCAL 并且在创建游标时未将游标定义为 GLOBAL,则游标的作用域是局部的。 具体而言,作用域对在其中创建游标的批处理、存储过程或触发器是局部的。 游标名仅在该作用域内有效。

    在批处理、存储过程、触发器或存储过程 OUTPUT 参数中,该游标可由局部游标变量引用。 当批处理、存储过程或触发器结束时,游标将被隐式释放。 游标会被释放,除非它在一个 OUTPUT 参数中传递回来。 游标可以在 OUTPUT 参数中传递回来。 如果采用此方式将游标传递回来,则游标将在引用它的最后一个变量释放或离开作用域时释放。

  • GLOBAL

    如果指定了 GLOBAL,而创建游标时没有将其定义为 LOCAL,那么游标的作用域将是相应连接的全局范围。 在由此连接执行的任何存储过程或批处理中,都可以引用该游标名称。

    该游标仅在断开连接时才被隐式释放。 更多信息请参见 “声明CURSOR”

您可以通过查看is_local_cursor_defaultsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsLocalCursorsDefaultDATABASEPROPERTYEX 函数的属性来确定状态。

< > temporal_history_retention ::=

TEMPORAL_HISTORY_RETENTION { ON |OFF }

ON 默认情况下,也可以自动设置为 OFF 时间点还原操作之后。 有关详细信息,包括如何启用此设置,请参阅如何配置保留策略

< > data_retention_policy ::=

适用于:仅 Azure SQL Edge。

DATA_RETENTION { ON |OFF }

  • ON

    对数据库启用基于数据保留策略的清理。

  • OFF

    对数据库禁用基于数据保留策略的清理。

<database_mirroring>

适用于:SQL Server

关于参数描述,请参见 ALTER DATABASE 数据库镜像

< > date_correlation_optimization_option ::=

适用于:SQL Server

控制 date_correlation_optimization 选项。

DATE_CORRELATION_OPTIMIZATION { ON |OFF }

  • ON

    SQL Server 维护关联统计数据,其中外键约束连接数据库中的任意两个表,且这些表具有 日期时间 列。

    启用 DATE_CORRELATION_OPTIMIZATION 会增加恢复 不可信备份 时的攻击面,因为优化器会以提升权限执行这些对象。

  • OFF

    不会维护相关统计信息。

若要设置为DATE_CORRELATION_OPTIMIZATIONON,除执行ALTER DATABASE语句的连接外,不得与数据库建立活动连接。 以后会支持多个连接。

该选项当前设置可通过检查 is_date_correlation_onsys.databases 目录视图中的列来确定。

< > db_encryption_option ::=

控制数据库加密状态。

ENCRYPTION { ON |OFF |SUSPEND |RESUME }

  • ON

    设置要加密的数据库。

  • OFF

    将数据库设置为不加密。

  • SUSPEND

    适用于:SQL Server(从 SQL Server 2019(15.x)开始)

    可用于在启用或禁用透明数据加密或更改加密密钥后暂停加密扫描。

  • RESUME

    适用于:SQL Server(从 SQL Server 2019(15.x)开始)

    可用于恢复先前暂停的加密扫描。

有关数据库加密的详细信息,请参阅 透明数据加密(TDE),以及 azure SQL 数据库、Azure SQL 托管实例和 Azure Synapse Analytics的 透明数据加密。

在数据库级别启用加密时,将对所有文件组进行加密。 任何新文件组都继承加密属性。 如果数据库中的任何文件组都设置为只读,则数据库加密操作将失败。

你可以通过 sys.dm_database_encryption_keys 动态管理视图查看数据库的加密状态和加密扫描的状态。

< > db_state_option ::=

适用于:SQL Server

控制数据库的状态。

  • OFFLINE

    数据库已关闭、完全关闭并标记为脱机。 数据库脱机时,不能进行修改。

  • ONLINE

    该数据库已打开且可用。

  • EMERGENCY

    数据库标记为 READ_ONLY,禁用日志记录,并且仅限 sysadmin 固定服务器角色的成员访问。 EMERGENCY 主要用于故障排除。 例如,可以将由于损坏了日志文件而标记为可疑的数据库设置为 EMERGENCY 状态。 此设置可以使系统管理员能够对数据库进行只读访问。 只有 sysadmin 固定服务器角色的成员才可以将数据库设置为 EMERGENCY 状态。

需要主题数据库的 ALTER DATABASE 权限将数据库更改为脱机或紧急状态,还需要服务器级别的 ALTER ANY DATABASE 权限将数据库从脱机移动到联机状态。

您可以通过查看 statestate_desc 目录视图中的 和 列来确定该选项的状态。 你也可以通过检查 StatusDATABASEPROPERTYEX 函数的属性来确定状态。 有关详细信息,请参阅 数据库状态

无法将标记为 RESTORING 的数据库设置为 OFFLINE、ONLINE 或 EMERGENCY。 在活动还原操作期间或数据库或日志文件的还原操作因备份文件损坏而失败时,数据库可能处于 RESTOREING 状态。

< > db_update_option ::=

控制是否允许更新数据库。

  • READ_ONLY

    用户可以从数据库读取数据,但不能修改数据库。

    Note

    若要提高查询性能,请先更新统计信息,然后再将数据库设置为 READ_ONLY。 如果数据库设置为 READ_ONLY后需要其他统计信息,数据库引擎会在 tempdb 系统数据库中创建统计信息。 有关只读数据库统计的更多信息,请参见统计。

  • READ_WRITE

    允许对数据库执行读写操作。

若要更改此状态,您必须对数据库有独占访问权限。 有关详细信息,请参阅 SINGLE_USER 子句。

Note

在 Azure SQL 数据库 联合数据库中,SET { READ_ONLY | READ_WRITE } 处于禁用状态。

< > db_user_access_option ::=

控制用户对数据库的访问。

SINGLE_USER

适用于:SQL Server

指定一次只能有一个用户可以访问数据库。 如果指定SINGLE_USER另一个用户连接到数据库,则会 ALTER DATABASE 阻止该语句,直到所有用户断开与指定数据库的连接。 若要重写此行为,请参阅子 WITH <termination> 句。

即使设置此选项的用户已注销,数据库仍保持 SINGLE_USER 模式。这时,其他用户(但只能是一个)可以连接到数据库。

在将数据库设置为 SINGLE_USER 之前,应验证 AUTO_UPDATE_STATISTICS_ASYNC 选项是否设置为 OFF。 设置为 ON 时,用于更新统计信息的后台线程会与数据库建立连接,并且无法在单用户模式下访问数据库。 要查看该选项的状态,请查询 is_auto_update_stats_async_on 目录视图中的该列。 如果此选项设置为 ON,请执行以下任务:

  1. 将 AUTO_UPDATE_STATISTICS_ASYNC 设置为 OFF。

  2. 通过查询 sys.dm_exec_background_job_queue 动态管理视图,检查是否有活跃的异步统计作业。

如果存在活动的作业,可以允许作业完成或通过使用 KILL STATS JOB 来手动终止这些作业。

RESTRICTED_USER

只允许 db_owner 固定数据库角色的成员以及 dbcreatorsysadmin 固定服务器角色的成员连接到数据库。 RESTRICTED_USER 不会限制其数量。 使用语句的终止子句指定的 ALTER DATABASE 时间范围断开与数据库的所有连接。 数据库转换到 RESTRICTED_USER 状态后,将拒绝未经限定的用户的连接尝试。

MULTI_USER

所有拥有连接到数据库的相应权限的用户,都允许进行连接。 您可以通过查看user_accesssys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 UserAccessDATABASEPROPERTYEX 函数的属性来确定状态。

< > delayed_durability_option ::=

适用于:SQL Server(从 SQL Server 2014(12.x)开始)

控制提交的事务是完全持久事务还是延迟持久事务。

  • DISABLED

    SET DISABLED 之后的所有事务都是完全持久事务。 将忽略在原子块或 commit 语句中设置的任何持续性选项。

  • ALLOWED

    SET ALLOWED 之后的所有事务都是完全持久事务或都是延迟持久事务,具体取决于在原子块或 commit 语句中设置的持续性选项。

  • FORCED

    SET FORCED 之后的所有事务都是延迟持久事务。 将忽略在原子块或 commit 语句中设置的任何持续性选项。

< > external_access_option ::=

适用于:SQL Server

控制是否允许外部资源(例如另一个数据库中的对象)访问数据库。

DB_CHAINING { ON |OFF }

  • ON

    数据库可以作为跨数据库所有权链的源或目标。

  • OFF

    数据库不能参与建立跨数据库所有权链。

Important

当跨数据库所有权链接服务器选项为 0(OFF)时,SQL Server 的实例将识别此设置。 如果 cross db ownership chaining 为 1 (ON),则不论此选项为何值,所有用户数据库都可以参与跨数据库所有权链。 此选项是使用 sp_configure 来设置的。

此选项需要 ALTER ANY DATABASE 权限。

不能针对 mastermodeltempdb 系统数据库设置 DB_CHAINING 选项。

您可以通过查看is_db_chaining_onsys.databases目录视图中的该列来确定该选项的状态。

TRUSTWORTHY { ON |OFF }

  • ON

    使用模拟上下文的数据库模块(例如,用户定义函数或存储过程)可以访问数据库外部的资源。

  • OFF

    模拟上下文中的数据库模块不能访问数据库外部的资源。

    每当附加数据库时,TRUSTWORTHY 将设置为 OFF

默认情况下,除 msdb 数据库之外的所有系统数据库都将 TRUSTWORTHY 设置为 OFF。 对于 modeltempdb 数据库,不能更改此值。 建议在任何情况下都不要将 master 数据库的 TRUSTWORTHY 选项设置为 ON。

要设置此选项,要求对数据库拥有 CONTROL SERVER 权限。

您可以通过查看is_trustworthy_onsys.databases目录视图中的该列来确定该选项的状态。

DEFAULT_FULLTEXT_LANGUAGE

适用于:SQL Server(从 SQL Server 2012(11.x)开始)

指定全文检索列的默认语言值。

Important

仅在将 CONTAINMENT 设置为 PARTIAL 之后,才允许使用此选项。 如果 CONTAINMENT 设置为 NONE,则会发生错误。

DEFAULT_LANGUAGE

适用于:SQL Server(从 SQL Server 2012(11.x)开始)

指定所有新建登录名的默认语言。 可以通过提供本地 ID (lcid)、语言名称或语言别名来指定语言。 有关可接受的语言名称和别名列表,请参见 sys.syslanguages。 仅在将 CONTAINMENT 设置为 PARTIAL 之后,才允许使用此选项。 如果 CONTAINMENT 设置为 NONE,则会发生错误。

NESTED_TRIGGERS

适用于:SQL Server(从 SQL Server 2012(11.x)开始)

指定 AFTER 触发器是否可级联;级联是指执行某项操作将启动另一个触发器,而该触发器又将启动另外一个,依此类推。 仅在将 CONTAINMENT 设置为 PARTIAL 之后,才允许使用此选项。 如果 CONTAINMENT 设置为 NONE,则会发生错误。

TRANSFORM_NOISE_WORDS

适用于:SQL Server(从 SQL Server 2012(11.x)开始)

用于取消干扰词(或非索引字)导致全文查询的布尔操作失败时所产生的错误消息。 仅在将 CONTAINMENT 设置为 PARTIAL 之后,才允许使用此选项。 如果 CONTAINMENT 设置为 NONE,则会发生错误。

TWO_DIGIT_YEAR_CUTOFF

适用于:SQL Server(从 SQL Server 2012(11.x)开始)

指定一个介于 1753 到 9999 之间的整数,表示用于将两位数年份解释为四位数年份的截止年份。 仅在将 CONTAINMENT 设置为 PARTIAL 之后,才允许使用此选项。 如果 CONTAINMENT 设置为 NONE,则会发生错误。

< > FILESTREAM_option ::=

适用于:SQL Server(从 SQL Server 2012(11.x)开始)

控制 FileTable 的设置。

NON_TRANSACTED_ACCESS = { 关闭 |READ_ONLY |已满 }

  • OFF

    禁用对 FileTable 数据的非事务性访问。

  • READ_ONLY

    可以通过非事务性进程读取此数据库的 FileTable 中的 FILESTREAM 数据。

  • FULL

    启用对 FileTable 中 FILESTREAM 数据的完全非事务性访问。

DIRECTORY_NAME = <directory_name>

与 Windows 兼容的目录名称。 此名称应在该 SQL Server 实例的所有数据库级目录名称中保持唯一。 无论排序规则如何设置,唯一性比较都不区分大小写。 在此数据库中创建 FileTable 之前,必须设置此选项。

< > HADR_options ::=

适用于:SQL Server

请参阅 ALTER DATABASE SET HADR

< > mixed_page_allocation_option ::=

适用于:SQL Server(从 SQL Server 2016(13.x)开始)

控制数据库能否使用混合区为表或索引的前 8 页创建初始页面。

MIXED_PAGE_ALLOCATION { OFF |ON }

  • OFF

    数据库始终使用统一区创建初始页面。 OFF 是默认值。

  • ON

    数据库可以使用混合区创建初始页面。

tempdb 始终为 OFF 的系统数据库外,此设置始终为 ON。 无法更改系统数据库的设置。

< > PARAMETERIZATION_option ::=

控制参数化选项。 有关详细信息,请参阅查询处理体系结构指南

PARAMETERIZATION { SIMPLE |FORCED }

  • SIMPLE

    查询的参数化是根据数据库的默认行为进行的。 有关详细信息,请参阅 简单参数化

  • FORCED

    SQL Server 对数据库中的所有查询进行参数化。 有关详细信息,请参阅 强制参数化

该选项当前设置可通过检查 is_parameterization_forcedsys.databases 目录视图中的列来确定。

< > query_store_options ::=

适用于:SQL Server(从 SQL Server 2016(13.x)开始)

ON |OFF [ ( 强制 ) ] |CLEAR [ ALL ]

控制查询存储是否在此数据库中启用,同时控制是否删除查询存储的内容。 有关详细信息,请参阅 查询存储使用方案

  • ON

    启用查询存储。

    SQL Server 2022 (16.x) 的许多新性能功能,例如查询存储提示、CE 反馈、并行度 (DOP) 反馈和内存授予反馈 (MGF) 持久性都需要启用查询存储。 对于已从其他 SQL Server 实例还原的数据库以及从就地升级到 SQL Server 2022(16.x)的数据库,这些数据库保留以前的查询存储设置。 如果担心查询存储可能会引入开销,管理员可以将 自定义捕获策略 与 配合使用 QUERY_CAPTURE_MODE = CUSTOM。 关于如何启用带有自定义捕获策略选项的查询商店示例,请参见本文后面的 示例 部分。

  • OFF [ ( 强制 ) ]

    禁用查询存储。 FORCED 是可选的。 FORCED 会中止所有正在运行的查询存储后台任务,并在查询存储关闭时跳过同步刷新。 使查询存储尽快关闭。 FORCED 适用于 SQL Server 2016 (13.x) SP2 CU14、SQL Server 2017 (14.x) CU21、SQL Server 2019 (15.x) CU6 和更高内部版本。

    Note

    无法在 Azure SQL 数据库中禁用查询存储。 执行 ALTER DATABASE [database] SET QUERY_STORE = OFF 返回警告 'QUERY_STORE=OFF' is not supported in this version of SQL Server.

  • 清除 [ 全部 ]

    从查询存储中删除与查询相关的数据。 ALL 是可选项。 ALL 将从查询存储中删除与查询相关的数据和元数据。

OPERATION_MODE { READ_ONLY |READ_WRITE }

描述查询存储的操作模式。

READ_WRITE

查询存储将收集并保留查询计划和运行时执行统计信息。

READ_ONLY

可以从查询存储读取信息,但不会添加新信息。 如果查询存储的最大空间已用尽,则查询存储将其操作模式更改为 READ_ONLY

CLEANUP_POLICY

描述查询存储的数据保留策略。 STALE_QUERY_THRESHOLD_DAYS 可确定查询信息在查询存储中保留的天数。 STALE_QUERY_THRESHOLD_DAYS是 双倍型。 默认值为 30。

DATA_FLUSH_INTERVAL_SECONDS

确定写入到查询存储的数据保留到磁盘的频率。 为了优化性能,由查询存储收集的数据应以异步方式写入到磁盘。 通过使用 DATA_FLUSH_INTERVAL_SECONDS 参数,配置此异步传输发生的频率。 DATA_FLUSH_INTERVAL_SECONDS是 Biint类型。 默认数值是 900 (15分钟)。

MAX_STORAGE_SIZE_MB

确定分配给查询存储的空间。 MAX_STORAGE_SIZE_MBbigint 类型。 SQL Server(SQL Server 2016(13.x)至SQL Server 2017(14.x))的默认值为 100 MB )。 从 SQL Server 2019(15.x)开始,默认值为 1000 MB

没有严格执行 MAX_STORAGE_SIZE_MB 限制。 仅当查询存储将数据写入磁盘时才检查存储大小。 此间隔由 DATA_FLUSH_INTERVAL_SECONDS 选项或 Management Studio 查询存储对话框选项“数据刷新间隔”设置。 间隔时间默认值为 900 秒(或 15 分钟)。

如果查询存储违反了存储大小检查之间的 MAX_STORAGE_SIZE_MB 限制,则会转换为只读模式。 如果启用了 SIZE_BASED_CLEANUP_MODE,则也会触发强制实施 MAX_STORAGE_SIZE_MB 限制的清理机制。

清除足够的空间后,查询存储模式会自动切换回读写。

Important

如果你认为工作负载捕获需要超过 10 GB 的磁盘空间,你可能需要重新考虑并优化工作负载,以重用查询计划(例如使用 强制参数化,或调整查询存储配置)。 从 SQL Server 2019 (15.x) 开始,在 Azure SQL 数据库 中,可以将 QUERY_CAPTURE_MODE 设置为“CUSTOM”,以进一步控制查询捕获策略。

INTERVAL_LENGTH_MINUTES

确定运行时执行统计数据聚合到查询存储中的时间间隔。 为了优化空间使用情况,将在固定时间窗口上聚合运行时统计信息存储中的运行时执行统计信息。 此固定时间窗口使用 INTERVAL_LENGTH_MINUTES 参数进行配置。 INTERVAL_LENGTH_MINUTES是 双型。 默认值是 60

SIZE_BASED_CLEANUP_MODE { AUTO |OFF }

控制当数据总量接近最大大小时是否自动激活清除。

  • AUTO

    当磁盘大小达到 MAX_STORAGE_SIZE_MB的90% 时,基于大小的清理会自动激活。 基于大小的清除首先会删除成本最低和最旧的查询。 它停在大约80% MAX_STORAGE_SIZE_MB。 此值是默认配置值。

  • OFF

    不会自动激活基于大小的清理。

SIZE_BASED_CLEANUP_MODE属于 恩瓦尔查尔类型。

QUERY_CAPTURE_MODE { ALL |AUTO |CUSTOM |NONE }

指定当前处于活动状态的查询捕获模式。 每个模式都定义了特定的查询捕获策略。 QUERY_CAPTURE_MODE是 Nvarchar类型。

Note

当查询捕获模式设置为“全部”、“自动”或“自定义”时,始终捕获游标、存储过程中的查询和本机编译的查询。

  • ALL

    捕获所有查询。 ALL 是 SQL Server(SQL Server 2016(13.x)至2017(14.x))的默认配置值。

  • AUTO

    根据执行计数和资源消耗捕获相关查询。 这是 SQL Server(以 SQL Server 2019 (15.x) 开头)和 Azure SQL 数据库 的默认配置值。

  • NONE

    停止捕获新查询。 查询存储继续收集已捕获的查询的编译和运行时统计信息。 请谨慎使用此配置,因为可能会错过捕获重要查询。

  • CUSTOM

    适用于:SQL Server(从 SQL Server 2019(15.x)开始)

    允许控制 QUERY_CAPTURE_POLICY选项。 自定义捕获策略可帮助查询存储捕获工作负载中最重要的查询。 有关可自定义选项,请参阅 <query_capture_policy_option_list>。

MAX_PLANS_PER_QUERY

定义为每个查询保留的最大计划数。 MAX_PLANS_PER_QUERY是输入 int。默认数值是 200

WAIT_STATS_CAPTURE_MODE { ON |OFF }

适用于:SQL Server(自SQL Server 2017(14.x)起)

控制是否按查询捕获等待统计信息。

  • ON

    捕获每个查询的等待统计信息。 此值是默认配置值。

  • OFF

    不会捕获每个查询的等待统计信息。

< > query_capture_policy_option_list ::=

适用于:SQL Server(从 SQL Server 2019(15.x)开始)

控制 查询存储 捕获策略选项。 除 STALE_CAPTURE_POLICY_THRESHOLD 外,这些选项定义 OR 条件,需要满足这些条件,才能在定义的“过时捕获策略阈值”中捕获查询。

从 SQL Server 2019 (15.x)开始,当QUERY_CAPTURE_MODE = AUTO达到以下任何阈值时,该设置将捕获查询存储详细信息:

  • EXECUTION_COUNT = 30 个执行 = 执行计数
  • TOTAL_COMPILE_CPU_TIME_MS = 1 秒 = 编译时间(以毫秒为单位)
  • TOTAL_EXECUTION_CPU_TIME_MS = 100 毫秒 = 执行 CPU 时间(以毫秒为单位)

例如:

EXECUTION_COUNT = 30,
TOTAL_COMPILE_CPU_TIME_MS = 1000,
TOTAL_EXECUTION_CPU_TIME_MS = 100

可以使用 QUERY_CAPTURE_MODE = CUSTOM 自定义这些选项:

  • STALE_CAPTURE_POLICY_THRESHOLD = 整数 { DAYS |时间 }

    定义评估间隔时段以确定是否应捕获查询。 默认值为 1 天,可以设置为 1 小时到 7 天。

  • EXECUTION_COUNT = 整数

    定义在评估期间执行查询的次数。 默认值为 30,这意味着对于默认的过时捕获策略阈值,查询必须在一天内至少执行 30 次才能在查询存储中保留。 EXECUTION_COUNT是类型 int

  • TOTAL_COMPILE_CPU_TIME_MS = 整数

    定义查询在评估期间使用的总编译 CPU 时间。 默认值为 1000,这意味着对于默认的过时捕获策略阈值,查询必须在一天内在查询编译期间总共花费至少一秒钟的 CPU 时间,才能持久存储在查询存储中。 TOTAL_COMPILE_CPU_TIME_MS是类型 int

  • TOTAL_EXECUTION_CPU_TIME_MS = 整数

    定义查询在评估期间使用的总执行 CPU 时间。 默认值为 100,这意味着对于默认的过时捕获策略阈值,查询必须在一天内在执行期间总共花费至少100 ms 的 CPU 时间,才能持久存储在查询存储中。 TOTAL_EXECUTION_CPU_TIME_MS是输入 int

< > recovery_option ::=

适用于:SQL Server

控制数据库恢复选项和磁盘 I/O 错误检查。

  • FULL

    通过使用事务日志备份,在介质发生故障后提供完整恢复。 如果数据文件损坏,介质恢复可以还原所有已提交的事务。 有关详细信息,请参阅 恢复模型(SQL Server)

  • BULK_LOGGED

    在发生媒体故障之后提供恢复。 对于某些大规模或批量操作,将最佳性能与最少日志空间使用量相结合。 有关可以最小记录的操作的信息,请参阅 事务日志。 在 BULK_LOGGED 恢复模式下,这些操作的日志记录最少。 有关详细信息,请参阅 恢复模型(SQL Server)

  • SIMPLE

    系统将提供占用日志空间最小的简单备份策略。 服务器故障恢复不再需要的日志空间可被自动重用。 有关详细信息,请参阅 恢复模型(SQL Server)

    Important

    简单恢复模式比其他两种模式更容易管理,但代价是数据文件损坏时丢失数据的风险也较大。 最近的数据库备份或差异数据库备份之后的所有更改都将丢失,必须手动重新输入。

默认恢复模式由 model 系统数据库的恢复模式决定。 有关选择适当的恢复模型的详细信息,请参阅恢复模型(SQL Server)。

您可以通过查看 recovery_modelrecovery_model_desc 目录视图中的 和 列来确定该选项的状态。 你也可以通过检查 RecoveryDATABASEPROPERTYEX 函数的属性来确定状态。

TORN_PAGE_DETECTION { ON |OFF }

  • ON

    数据库引擎可以检测不完整页。

  • OFF

    数据库引擎 不能检测不完整页。

Important

在 SQL Server 的未来版本中,将删除语法结构 TORN_PAGE_DETECTION ON | OFF。 请避免在新的开发工作中使用此语法结构,并计划修改当前使用此语法结构的应用程序。 请改用 PAGE_VERIFY 选项。

PAGE_VERIFY { CHECKSUM |TORN_PAGE_DETECTION |NONE }

发现磁盘 I/O 路径错误引起的损坏的数据库页面。 磁盘 I/O 路径错误可能是数据库损坏问题的原因。 这些错误通常由在将页写入磁盘时发生的电源故障或磁盘硬件故障所导致。

  • CHECKSUM

    在向磁盘中写入页面时,计算整个页面内容的校验并将该值存储在页眉中。 从磁盘中读取页时,将重新计算校验和,并与存储在页头中的校验和值进行比较。 如果两个值不匹配,将同时在 SQL Server 错误日志和 Windows 事件日志中报告错误消息 824(指示校验和失败)。 校验和失败指示存在 I/O 路径问题。 若要确定其根本原因,需要调查硬件、固件驱动程序、BIOS、筛选器驱动程序(如防病毒软件)和其他 I/O 路径组件。

  • TORN_PAGE_DETECTION

    将页面写入磁盘时,将每个 512 字节扇区的特定 2 位模式保存在 8 KB 数据库页面中并存储在数据库页头中。 从磁盘中读取页时,页头中存储的残缺位将与实际的页扇区信息进行比较。

    如果值不匹配,表明只有页面的一部分被写入磁盘。 在这种情况下,将同时在 SQL Server 错误日志和 Windows 事件日志中报告错误消息 824(指示页撕裂错误)。 如果页面写入确实不完整,则数据库恢复通常会检测到页撕裂。 不过,其他 I/O 路径故障可能随时导致页撕裂。

  • NONE

    数据库页写入不会生成 CHECKSUM 或TORN_PAGE_DETECTION值。 SQL Server 在读取期间不会验证校验和或撕裂页,即使页眉中存在 CHECKSUM 或TORN_PAGE_DETECTION值。

使用 PAGE_VERIFY 选项时,请考虑下列重要事项:

  • 默认是 校验和

  • 用户数据库或系统数据库升级到 SQL Server 2005 (9.x) 或更高版本后,PAGE_VERIFY 值(NONE 或 TORN_PAGE_DETECTION)不会更改。 建议更改为 CHECKSUM。

    Note

    在 SQL Server 的早期版本中,tempdb 数据库的 PAGE_VERIFY 数据库选项设置为 NONE 且不能修改。 从 SQL Server 2008 (10.0.x) 开始,对于新安装的 SQL Server,tempdb 数据库的默认值为 CHECKSUM。 如果是升级安装的 SQL Server,则默认值仍为 NONE。 可以修改该选项。 我们建议为 tempdb 数据库使用 CHECKSUM。

  • TORN_PAGE_DETECTION可能会使用较少的资源,但提供了校验和保护的最小子集。

  • 无需使数据库脱机、锁定数据库或以其他方式阻止对数据库的并发访问,即可设置 PAGE_VERIFY。

  • CHECKSUM 与 TORN_PAGE_DETECTION 互相排斥。 不能同时启用这两个选项。

检测到页撕裂或校验和失败时,如果失败仅限于索引页,则可通过还原数据进行恢复,可能还需要重建索引进行恢复。 如果要在校验和失败的情况下确定受影响的一个或多个数据库页面的类型,请运行 DBCC CHECKDB。 有关恢复选项的更多信息,请参见 RESTORE “语句 - 论元”。 尽管还原数据解决了数据损坏问题,但应尽快诊断和更正根本原因(例如磁盘硬件故障),以防止持续错误。

SQL Server 重试任何失败的读取,并出现校验和、撕裂页或其他 I/O 错误四次。 如果在任何一次重试中读取成功,则会向错误日志写入消息。 触发读取的命令继续。 如果重试尝试失败,该命令将失败并显示错误消息 824。

有关错误消息 823、824 和 825 的详细信息,请参阅:

该选项当前的设置可以通过检查 page_verify_optionsys.databases 目录视图中的列或 IsTornPageDetectionEnabledDATABASEPROPERTYEX 函数的属性来确定。

< > remote_data_archive_option ::=

适用于:SQL Server(从 SQL Server 2016(13.x)开始)

为数据库启用或禁用 Stretch Database。 有关详细信息,请参阅 Stretch Database

Important

SQL Server 2022 (16.x) 和 Azure SQL 数据库中已弃用 Stretch Database。 在数据库引擎的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

REMOTE_DATA_ARCHIVE = { ON ( SERVER = <server_name>, { CREDENTIAL = <db_scoped_credential_name> |FEDERATED_SERVICE_ACCOUNT = 开 |关闭 } ) |关掉

  • ON

    为数据库启用 Stretch Database。 有关详细信息,包括附加的先决条件,请参阅为数据库启用 Stretch Database

    若要为表启用 Stretch Database,需要 db_owner 权限。 若要为数据库启用 Stretch Database,需要 db_ownerCONTROL DATABASE 权限。

    • 服务器 = <server_name>

      指定 Azure 服务器的地址。 包括名称的 .database.windows.net 部分。 例如,MyStretchDatabaseServer.database.windows.net

    • CREDENTIAL = <db_scoped_credential_name>

      指定 SQL Server 实例用于连接到 Azure 服务器的数据库作用域凭据。 在运行此命令之前,确保存在凭据。 有关详细信息,请参阅 CREATE DATABASE SCOPED CREDENTIAL

    • FEDERATED_SERVICE_ACCOUNT = { ON |OFF }

      当下列条件全数成立时,可以使用联合服务帐户让本地 SQL Server 与远程 Azure 服务器通信。

      • 用来运行 SQL Server 实例的服务帐户为域帐户。
      • 域帐户属于 Active Directory 与 Microsoft Entra ID 联合的域。
      • 远程 Azure 服务器已配置为支持 Microsoft Entra 身份验证。
      • 用来运行 SQL Server 实例的服务帐户在远程 Azure 服务器上必须配置为 dbmanagersysadmin 帐户。

      如果你指定联邦服务账户是ON,你就不能同时指定参数。CREDENTIAL 如果你指定了OFF,请提供 CREDENTIAL 论证。

  • OFF

    为数据库禁用 Stretch Database。 有关详细信息,请参阅 禁用 Stretch Database 并恢复远程数据

    只有在数据库不再包含为 Stretch Database 启用的任何表后,才能为数据库禁用 Stretch Database。 禁用 Stretch Database 之后,数据迁移会停止。 此外,查询结果不再包括来自远程表的结果。

    禁用 Stretch Database 不会删除远程数据库。 若要删除远程数据库,请使用 Azure 门户将其删除。

PERSISTENT_LOG_BUFFER

适用于:SQL Server 2017 (14.x) 及更高版本。

指定此选项后,将在位于存储类内存(NVDIMM-N 非易失性存储)支持的磁盘设备上的卷上创建事务日志缓冲区,也称为永久性日志缓冲区。 有关详细信息,请参阅 使用存储类内存 事务提交延迟加速,向数据库添加永久性日志缓冲区

< > service_broker_option ::=

适用于:SQL Server

控制下列 Service Broker 选项:启用或禁用消息传递,设置新的 Service Broker 标识符,或者将会话优先级设置为 ON 或 OFF。

ENABLE_BROKER

指定对指定的数据库启用 Service Broker。 消息传递开始, is_broker_enabled 并在 sys.databases 目录视图中将标志设置为true。 数据库保留现有的 Service Broker 标识符。 当数据库是数据库镜像配置中的主体时,无法启用 Service broker。

Note

ENABLE_BROKER 要求排他数据库锁。 如果其他会话在数据库中锁定了资源,ENABLE_BROKER等待其他会话释放其锁。 若要在用户数据库中启用 Service Broker,请确保在运行 ALTER DATABASE SET ENABLE_BROKER 语句之前其他会话没有使用该数据库,例如,将该数据库置于单用户模式。 若要在 msdb 数据库中启用 Service Broker,请首先停止 SQL Server 代理,这样 Service Broker 便可获得必要的锁。

DISABLE_BROKER

指定对指定的数据库禁用 Service Broker。 消息传递被停止, is_broker_enabled 并在 sys.databases 的目录视图中将标志设置为false。 数据库保留现有的 Service Broker 标识符。

NEW_BROKER

指定数据库应接收新的 Broker 标识符。 数据库充当新 Service Broker。 因此,将立即删除数据库中的所有现有对话,而不生成结束对话框消息。 必须使用新标识符重新创建任何引用旧 Service Broker 标识符的路由。

ERROR_BROKER_CONVERSATIONS

指定启用 Service Broker 消息传递。 此设置会保留数据库的现有 Service Broker 标识符。 Service Broker 将结束数据库中的所有会话,并显示错误消息。 此设置使应用程序可以为现有对话运行定期清理。

HONOR_BROKER_PRIORITY { ON |OFF }

  • ON

    发送操作考虑到分配给会话的优先级别。 先发送来自优先级别高的对话的消息,再发送来自所分配优先级别低的对话的消息。

  • OFF

    发送操作就像在所有会话都具有默认优先级别的情况下一样运行。

对于新的对话框或没有等待发送的消息的对话框,对 HONOR_BROKER_PRIORITY 选项的更改会立即生效。 运行时要发送 ALTER DATABASE 的对话要发送的消息,只有在发送部分对话消息后才会启用新设置。 在所有对话框都开始使用新设置前等待的时间可能相差迥异。

该属性的当前设置在 is_broker_priority_honored 目录视图的列中报告

< > snapshot_option ::=

计算事务隔离级别。

ALLOW_SNAPSHOT_ISOLATION { ON |OFF }

  • ON

    在数据库级别启用快照选项。 启用该选项后,DML 语句将开始生成行版本,即使没有事务使用快照隔离也是如此。 一旦启用此选项,事务即可指定 SNAPSHOT 事务隔离级别。 当事务在 SNAPSHOT 隔离级别运行时,所有的语句都将数据快照视为位于事务的开头。 如果在 SNAPSHOT 隔离级别运行的事务要访问多个数据库中的数据,则必须将所有数据库中的 ALLOW_SNAPSHOT_ISOLATION 都设置为 ON,或者事务中的每个语句都必须对 FROM 子句中的所有引用(引用 ALLOW_SNAPSHOT_ISOLATION 设置为 OFF 的数据库中的表)使用锁提示。

  • OFF

    在数据库级别禁用快照选项。 事务不能指定 SNAPSHOT 事务隔离级别。

将ALLOW_SNAPSHOT_ISOLATION设置为新状态(从 ON 到 OFF 或从 OFF 设置为 ON), ALTER DATABASE 在提交数据库中的所有现有事务之前,不会向调用方返回控制权。 如果数据库已在语句中指定的 ALTER DATABASE 状态,则控件会立即返回到调用方。 ALTER DATABASE如果语句没有快速返回,请使用sys.dm_tran_active_snapshot_database_transactions来确定是否存在长时间运行的事务。 如果 ALTER DATABASE 语句被取消,数据库将保持启动时 ALTER DATABASE 的状态。 sys.databases 目录视图显示数据库中快照隔离事务的状态。 如果 snapshot_isolation_state_desc = IN_TRANSITION_TO_ON,则命令 ALTER DATABASE ... ALLOW_SNAPSHOT_ISOLATION OFF 暂停 6 秒并重试操作。

如果数据库处于 OFFLINE 状态,则不能更改 ALLOW_SNAPSHOT_ISOLATION 的状态。

如果在READ_ONLY数据库中设置ALLOW_SNAPSHOT_ISOLATION,则如果以后将数据库设置为READ_WRITE,则会保留该设置。

可以为 mastermodelmsdbtempdb 数据库更改 ALLOW_SNAPSHOT_ISOLATION 设置。 如果为 tempdb 更改该设置,则每次停止并重新启动数据库引擎实例时会保留该设置。 如果为 model 更改该设置,则该设置将成为除 tempdb 以外的所有新建数据库的默认设置。

对于 mastermsdb 数据库,默认情况下该选项设置为 ON。

该选项当前设置可通过检查 snapshot_isolation_statesys.databases 目录视图中的列来确定。

READ_COMMITTED_SNAPSHOT { ON |OFF }

  • ON

    在数据库级别启用已提交读快照选项。 启用该选项后,DML 语句将开始生成行版本,即使没有事务使用快照隔离也是如此。 一旦启用此选项,指定已提交读隔离级别的事务将使用行版本控制而不是锁定。 当事务在 READ COMMITTED 隔离级别运行时,所有的语句都将数据快照视为位于语句的开头。

  • OFF

    在数据库级别禁用已提交读快照选项。 指定 READ COMMITTED 隔离级别的事务使用锁定。

要设置READ_COMMITTED_SNAPSHOT开或关闭,数据库必须只有运行该 ALTER DATABASE 命令的连接。 但是,数据库不必一定要处于单用户模式下。 当数据库处于 OFFLINE 状态时,不能更改此选项的状态。

如果在READ_ONLY数据库中设置READ_COMMITTED_SNAPSHOT,则会在以后将数据库设置为READ_WRITE时保留该设置。

对于 mastertempdbmsdb 系统数据库,不能将 READ_COMMITTED_SNAPSHOT 设置为 ON。 如果为 model 更改该设置,则该设置将成为除 tempdb 以外的所有新建数据库的默认设置。

该选项当前设置可通过检查 is_read_committed_snapshot_onsys.databases 目录视图中的列来确定。

Warning

当创建的表中 DURABILITY = SCHEMA_ONLY,并且随后用 ALTER DATABASEREAD_COMMITTED_SNAPSHOT 进行更改时,表中的数据会丢失。

MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT { ON |OFF }

适用于:SQL Server(从 SQL Server 2014(12.x)开始)

  • ON

    当事务隔离级别设置为任何低于 SNAPSHOT 的隔离级别时,内存优化表中所有经过解释的 Transact-SQL 操作将在 SNAPSHOT 隔离下运行。 低于快照的隔离级别示例有 READ COMMITTED 或 READ UNCOMMITTED。 无论是在会话级别显式设置事务隔离级别还是隐式使用默认值,这些操作都会运行。

  • OFF

    不提升内存优化表中经过解释的 Transact-SQL 操作的事务隔离级别。

如果数据库处于 OFFLINE 状态,不能更改 MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT 的状态。

默认选项为 OFF。

该选项当前设置可通过检查 is_memory_optimized_elevate_to_snapshot_onsys.databases 目录视图中的列来确定。

< > sql_option ::=

在数据库级别控制 ANSI 遵从选项。

ANSI_NULL_DEFAULT { ON |OFF }

确定列或 NULL默认值(NOT NULL)在语句中CREATE TABLEALTER TABLE未显式定义可为 null 性的类型。 使用约束定义的列遵循约束规则,无论此设置是什么。

  • ON

    未定义的列的默认值为 NULL

  • OFF

    未定义的列的默认值为 NOT NULL

使用 SET 语句设置的连接级别设置将替代ANSI_NULL_DEFAULT的默认数据库级设置。 默认情况下,ODBC 和 OLE DB 客户端向会话发出连接级SET语句设置ANSI_NULL_DEFAULTON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_NULL_DFLT_ON

为了实现 ANSI 兼容性,将数据库选项 ANSI_NULL_DEFAULT 设置为 ON 将数据库默认值更改为 NULL。

您可以通过查看is_ansi_null_default_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiNullDefaultDATABASEPROPERTYEX 函数的属性来确定状态。

ANSI_NULLS { 上 |不对 }

  • ON

    与 null 值的所有比较结果为 UNKNOWN

  • OFF

    非 Unicode 值与 null 值的比较计算 TRUE 结果为两个 NULL值。

Important

在 SQL Server 的未来版本中, ANSI_NULLS 始终是 ON 显式设置选项 OFF 的任何应用程序都会生成错误。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

使用 SET 语句设置的连接级别设置将替代默认 ANSI_NULLS数据库设置。 默认情况下,ODBC 和 OLE DB 客户端向会话发出连接级SET语句设置ANSI_NULLSON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_NULLS

Important

SET ANSI_NULLS 在计算列或索引视图上创建或更改索引时,还必须设置为 ON 该设置。

您可以通过查看is_ansi_nulls_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiNullsEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

ANSI_PADDING { 上 |不对 }

  • ON

    在进行转换之前,将字符串填充到同一长度。 插入 varcharnvarchar 数据类型前,也填充至相同长度。

  • OFF

    varcharnvarchar 列中插入字符值的后尾空白。 还会在二进制值中留下尾随零,插入 变分 列中。 不将值填充到列的长度。

    如果指定了 OFF,该设置只影响新列的定义。

Important

在 SQL Server 的未来版本中,始终为 ON, ANSI_PADDING 显式将选项设置为 OFF 的任何应用程序都会生成错误。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 我们建议你始终设置为 ANSI_PADDING 开启。 ANSI_PADDING 在计算列或索引视图上创建或操作索引时,必须为 ON。

允许零值的char(n二进制(n 列,当设置为ON ANSI_PADDING 时,会填充到列长度。 尾部空白和零在关闭时 ANSI_PADDING 会被裁剪。 不允许零的char(n二进制(n 列总是填充到列的长度。

使用 SET 语句设置的连接级别设置将替代默认 ANSI_PADDING的数据库级设置。 ODBC 和 OLE DB 客户端默认会为会话发出连接级别 SET 的语句设置 ANSI_PADDING 为 ON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_PADDING

您可以通过查看is_ansi_padding_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiPaddingEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

ANSI_WARNINGS { 上 |不对 }

  • ON

    当出现被零除这类情况时,将发出错误或警告。 当聚合函数中出现 Null 值时,也会发出错误和警告。

  • OFF

    出现被零除等情况时不会引发警告,而是返回 Null 值。

Important

在计算列或索引视图上创建或更改索引时,必须设置为 < a0/>。

使用 SET 语句设置的连接级别设置将替代默认 ANSI_WARNINGS数据库设置。 默认情况下,ODBC 和 OLE DB 客户端向会话发出连接级SET语句设置ANSI_WARNINGSON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_WARNINGS

您可以通过查看is_ansi_warnings_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiWarningsEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

ARITHABORT { 上 |不对 }

  • ON

    在查询执行过程中出现溢出或被零除等错误时,结束查询。

  • OFF

    在出现其中一个错误时显示警告消息。 即使显示警告,查询、批处理或事务也会继续进行处理,就像没有发生错误一样。

Important

SET SET ARITHABORT 在创建或更改计算列或索引视图索引时,必须设置为 ON。

您可以通过查看is_arithabort_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsArithmeticAbortEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

COMPATIBILITY_LEVEL = { 170 | 160 | 150 | 140 | 130 | 120 | 110 | 100 }

有关详细信息,请参阅 ALTER DATABASE 兼容性级别

CONCAT_NULL_YIELDS_NULL { 上 |不对 }

  • ON

    串联操作的结果是 NULL 当任一操作数为 NULL时。 例如,将字符串“This is”和 NULL 串联将返回 NULL 值,而不是“This is”值。

  • OFF

    Null 值被视为空字符串进行处理。

Important

CONCAT_NULL_YIELDS_NULL 在创建或更改计算列或索引视图索引时,必须设置为 ON。

在即将到来的SQL Server版本中,会CONCAT_NULL_YIELDS_NULL一直保持开启状态,任何明确将该选项设置为关闭的应用程序都会触发错误。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

使用 SET 语句设置的连接级别设置将替代默认 CONCAT_NULL_YIELDS_NULL数据库设置。 默认情况下,ODBC 和 OLE DB 客户端在连接到 SQL Server 实例时会为会话发出连接级别SET的语句设置CONCAT_NULL_YIELDS_NULL为 ON。 有关详细信息,请参阅 SET CONCAT_NULL_YIELDS_NULL

您可以通过查看is_concat_null_yields_null_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsNullConcatDATABASEPROPERTYEX 函数的属性来确定状态。

NUMERIC_ROUNDABORT { 上 |不对 }

  • ON

    当表达式中发生精度损失时生成错误。

  • OFF

    精度的降低不会生成错误消息,会根据存储结果的列或变量的精度,将结果舍入。

    Important

    在计算列或索引视图上创建或更改索引时,必须设置为 < a0/>。

你可以在 is_numeric_roundabort_onsys.databases 目录视图的列中确定该选项的状态。 你也可以通过检查 IsNumericRoundAbortEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

QUOTED_IDENTIFIER { 上 |不对 }

  • ON

    可以将分隔标识符包含在双引号中。

    所有用双引号分隔的字符串都被解释为对象标识符。 加引号的标识符不必遵守 Transact-SQL 标识符规则。 它们可以是关键字,并且可以包含 Transact-SQL 标识符中不允许的字符。 如果双引号 (") 是标识符的一部分,则可以用两个双引号 ("") 来表示它。

  • OFF

    标识符不能包含在引号中,而且必须遵循所有 Transact-SQL 标识符规则。 文字可以由单引号或双引号分隔。

SQL Server 还允许使用方括号([])分隔标识符。 无论设置如何 QUOTED_IDENTIFIER ,括号标识符都可以使用。 有关详细信息,请参阅 数据库标识符

创建表时,该 QUOTED_IDENTIFIER 选项始终作为 ON 存储在表的元数据中。 即使选项设置为 OFF 创建表时,该选项也会存储。

使用 SET 语句设置的连接级别设置将替代默认 QUOTED_IDENTIFIER数据库设置。 默认情况下,ODBC 和 OLE DB 客户端向连接级别SET语句设置QUOTED_IDENTIFIERON发出设置。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET QUOTED_IDENTIFIER

您可以通过查看is_quoted_identifier_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsQuotedIdentifiersEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

RECURSIVE_TRIGGERS { ON |OFF }

  • ON

    允许递归激发 AFTER 触发器。

  • OFF

    您可以通过查看is_recursive_triggers_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsRecursiveTriggersEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

Note

仅当设置为 RECURSIVE_TRIGGERS..OFF 若要禁用间接递归触发,还必须将 nested triggers 服务器选项设置为 0。

您可以通过检查 is_recursive_triggers_onsys.databases 目录视图中的列或 IsRecursiveTriggersEnabledDATABASEPROPERTYEX 函数的属性来判断该选项的状态。

< > suspend_for_snapshot_backup ::=

适用于:SQL Server(SQL Server 2022 (16.x) 及更高版本)

暂停数据库以进行快照备份。 可以定义一个或多个数据库的组。 可以指定仅复制模式。

SET SUSPEND_FOR_SNAPSHOT_BACKUP = { ON |不对 }

暂停或取消暂停数据库。 默认值 OFF。

模数 = COPY_ONLY

Optional. 使用 COPY_ONLY 模式。

< > target_recovery_time_option ::=

适用于:SQL Server(从 SQL Server 2012(11.x)开始)

指定每个数据库上间接检查点的频率。 从 SQL Server 2016(13.x)开始,新数据库的默认值为 1 分钟,表示数据库使用间接检查点。 对于旧版本,默认值为 0,指示数据库使用自动检查点,其频率取决于服务器实例的恢复间隔设置。 对于大多数系统,Microsoft 建议设置为 1 分钟。

TARGET_RECOVERY_TIME = target_recovery_time { 秒 |会议记录}

  • target_recovery_time

    指定在发生崩溃的情况下恢复指定数据库的最大上限时间。 target_recovery_time是int类型

  • SECONDS

    表示 target_recovery_time 以秒数表示。

  • MINUTES

    表示 target_recovery_time 表示为分钟数。

有关间接检查点的详细信息,请参阅数据库检查点(SQL Server)。

OPTIMIZED_LOCKING { ON |OFF }

适用于:SQL Server(从SQL Server 2025(17.x)开始)

实现 优化锁定。 默认情况下,优化锁定设置为 OFF

若要设置 OPTIMIZED_LOCKINGONOFF,除了运行 ALTER DATABASE 命令的连接之外,不得与数据库建立活动连接。 但是,数据库不必一定要处于单用户模式下。 除非数据库为 ONLINE.,否则无法更改此选项的状态。

WITH <终止> ::=

指定当数据库从一种状态转换到另一种状态时,何时回滚未完成的事务。 如果省略终止子句,则如果数据库有任何锁,语句 ALTER DATABASE 将无限期等待。 只能指定一个终止子句,并遵循子 SET 句。

Note

并非所有数据库选项都使用子 WITH <termination> 句。 有关详细信息,请参阅 “设置”选项下的表。

  • ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE

    指定是在指定秒数之后回滚还是立即回滚。

  • NO_WAIT

    指定如果请求的数据库状态或选项更改无法立即完成,请求将失败。 立即完成意味着不会等待事务自己提交或回滚。

SET 选项

要获取数据库选项的当前设置,请使用 sys.databases 目录视图或 DATABASEPROPERTYEX

设置数据库选项后,新的设置将立即生效。

可以为所有新建数据库更改任意一个数据库选项的默认值。 为此,请更改 model 数据库中的相应数据库选项。

并非所有数据库选项都使用子 WITH <termination> 句,也可以与其他选项结合使用。 下表列出这些选项以及它们的选项和终止状态。

期权类别 可与其他选项一起指定 可以使用子 WITH <termination>
<db_state_option> Yes Yes
<db_user_access_option> Yes Yes
<db_update_option> Yes Yes
<delayed_durability_option> Yes Yes
<external_access_option> Yes No
<cursor_option> Yes No
<auto_option> Yes No
<sql_option> Yes No
<recovery_option> Yes No
<target_recovery_time_option> No Yes
<database_mirroring_option> No No
ALLOW_SNAPSHOT_ISOLATION No No
READ_COMMITTED_SNAPSHOT No Yes
MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT Yes Yes
<service_broker_option> Yes No
DATE_CORRELATION_OPTIMIZATION Yes Yes
<parameterization_option> Yes Yes
<change_tracking_option> Yes Yes
<db_encryption_option> Yes No
<accelerated_database_recovery> No Yes
<optimized_locking> No Yes

通过设置以下选项之一来清除 SQL Server 实例的计划缓存:

OFFLINE

ONLINE

MODIFY_NAME

COLLATE

READ_ONLY

READ_WRITE

修改文件组 DEFAULT

修改文件组为读写模式

修改文件组只读

在下列情况下,也会刷新计划缓存。

  • 数据库的 AUTO_CLOSE 数据库选项设置为 ON。 在没有用户连接引用或使用该数据库时,后台任务将尝试关闭并自动关闭数据库。
  • 针对具有默认选项的数据库运行多个查询。 然后,删除数据库。
  • 删除源数据库的数据库快照。
  • 您已成功重新生成数据库的事务日志。
  • 还原数据库备份。
  • 分离数据库。

清除计划缓存将导致对所有后续执行计划进行重新编译,并可能导致查询性能暂时性地突然降低。 对于计划缓存中每个已清除的缓存存储区,SQL Server 错误日志包含以下信息性消息:SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to some database maintenance or reconfigure operations。 每隔五分钟,只要缓存在这段时间间隔内得到刷新,此消息就记录一次。

Examples

A. 设置数据库选项

下面的示例设置 AdventureWorks2025 示例数据库的恢复模式和数据页面验证选项。

USE master;
GO
ALTER DATABASE [database_name]
SET RECOVERY FULL PAGE_VERIFY CHECKSUM;
GO

B. 将数据库设置为 READ_ONLY

将数据库或文件组 READ_ONLY 的状态更改为或 READ_WRITE 要求对数据库进行独占访问。 下面的示例将数据库设置为 SINGLE_USER 模式,以获得独占访问权。 然后,该示例将 AdventureWorks2025 数据库的状态设置为 READ_ONLY ,并将对数据库的访问权返回给所有用户。

Note

此示例在第一个 WITH ROLLBACK IMMEDIATE 语句中使用终止选项 ALTER DATABASE 。 所有不完整的事务都会回滚,与 AdventureWorks2025 数据库的任何其他连接都会立即断开连接。

USE master;
GO
ALTER DATABASE [database_name]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO
ALTER DATABASE [database_name]
SET READ_ONLY
GO
ALTER DATABASE [database_name]
SET MULTI_USER;
GO

C. 对数据库启用快照隔离

下面的示例为 AdventureWorks2025 数据库启用快照隔离框架选项。

USE [database_name];
USE master;
GO
ALTER DATABASE [database_name]
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
-- Check the state of the snapshot_isolation_framework
-- in the database.
SELECT name, snapshot_isolation_state,
    snapshot_isolation_state_desc AS description
FROM sys.databases
WHERE name = N'[database_name]';
GO

结果集显示快照隔离框架已启用。

name snapshot_isolation_state description
[database_name] 1 ON

D. 启用、修改或禁用更改跟踪

下面的示例对 AdventureWorks2025 数据库启用更改跟踪并将保持期设置为 2 天。

ALTER DATABASE [database_name]
SET CHANGE_TRACKING = ON
(AUTO_CLEANUP = ON, CHANGE_RETENTION = 2 DAYS);

下面的示例说明如何将保持期更改为 3 天。

ALTER DATABASE [database_name]
SET CHANGE_TRACKING (CHANGE_RETENTION = 3 DAYS);

下面的示例说明如何对 AdventureWorks2025 数据库禁用更改跟踪。

ALTER DATABASE [database_name]
SET CHANGE_TRACKING = OFF;

E. 启用查询存储

适用于:SQL Server(从 SQL Server 2016(13.x)开始)

下面的示例启用查询存储并配置其参数。

ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      QUERY_CAPTURE_MODE = AUTO,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60
    );

F. 使用等待统计信息启用查询存储

适用于:SQL Server(从 SQL Server 2017(14.x)开始)

下面的示例启用查询存储并配置其参数。

ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON,
    );

G. 使用自定义捕获策略选项启用查询存储

适用于:SQL Server(从 SQL Server 2019(15.x)开始)

下面的示例启用查询存储并配置其参数。

ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON,
      QUERY_CAPTURE_MODE = CUSTOM,
      QUERY_CAPTURE_POLICY = (
        STALE_CAPTURE_POLICY_THRESHOLD = 24 HOURS,
        EXECUTION_COUNT = 30,
        TOTAL_COMPILE_CPU_TIME_MS = 1000,
        TOTAL_EXECUTION_CPU_TIME_MS = 100
      )
    );

* Azure SQL 数据库 *  

 

SQL Database

兼容性等级是 SET 选项,但具体描述在 ALTER DATABASE 兼容性等级中。

Note

许多数据库集选项可以通过语 SET 句 为当前会话配置,应用程序连接时通常会配置。 会话级 SET 选项将覆盖 ALTER DATABASE SET 值。 下面各节中所述的数据库选项是你可以为未明确提供其他 SET 选项值的会话设置的值。

Syntax

ALTER DATABASE { database_name | CURRENT }
SET
{
    <option_spec> [ ,...n ] [ WITH <termination> ]
}
;

{ [ FOR SECONDARY ] SET <set_options> }

<option_spec> ::=
{
    <auto_option>
  | <automatic_tuning_option>
  | <change_tracking_option>
  | <cursor_option>
  | <db_encryption_option>
  | <db_update_option>
  | <db_user_access_option>
  | <delayed_durability_option>
  | <parameterization_option>
  | <query_store_options>
  | <snapshot_option>
  | <sql_option>
  | <termination>
  | <temporal_history_retention>
}
;

<auto_option> ::=
{
    AUTO_CREATE_STATISTICS { OFF | ON [ ( INCREMENTAL = { ON | OFF } ) ] }
  | AUTO_SHRINK { ON | OFF }
  | AUTO_UPDATE_STATISTICS { ON | OFF }
  | AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }
}

<automatic_tuning_option> ::=
{
    AUTOMATIC_TUNING = { AUTO | INHERIT | CUSTOM }
  | AUTOMATIC_TUNING ( CREATE_INDEX = { DEFAULT | ON | OFF } )
  | AUTOMATIC_TUNING ( DROP_INDEX = { DEFAULT | ON | OFF } )
  | AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = { DEFAULT | ON | OFF } )
}

<change_tracking_option> ::=
{
    CHANGE_TRACKING
    {
        = OFF
      | = ON [ ( <change_tracking_option_list > [,...n] ) ]
      | ( <change_tracking_option_list> [,...n] )
    }
}

<change_tracking_option_list> ::=
   {
       AUTO_CLEANUP = { ON | OFF }
     | CHANGE_RETENTION = retention_period { DAYS | HOURS | MINUTES }
   }

<cursor_option> ::=
{
    CURSOR_CLOSE_ON_COMMIT { ON | OFF }
}

<db_encryption_option> ::=
  ENCRYPTION { ON | OFF }

<db_update_option> ::=
  { READ_ONLY | READ_WRITE }

<db_user_access_option> ::=
  { RESTRICTED_USER | MULTI_USER }

<delayed_durability_option> ::= DELAYED_DURABILITY = { DISABLED | ALLOWED | FORCED }

<parameterization_option> ::=
  PARAMETERIZATION { SIMPLE | FORCED }

<query_store_options> ::=
{
  QUERY_STORE
  {
      = OFF
    | = ON [ ( <query_store_option_list> [,... n] ) ]
    | ( < query_store_option_list> [,... n] )
    | CLEAR [ ALL ]
  }
}

<query_store_option_list> ::=
{
  OPERATION_MODE = { READ_WRITE | READ_ONLY }
  | CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = number )
  | DATA_FLUSH_INTERVAL_SECONDS = number
  | MAX_STORAGE_SIZE_MB = number
  | INTERVAL_LENGTH_MINUTES = number
  | SIZE_BASED_CLEANUP_MODE = { AUTO | OFF }
  | QUERY_CAPTURE_MODE = { ALL | AUTO | CUSTOM | NONE }
  | MAX_PLANS_PER_QUERY = number
  | WAIT_STATS_CAPTURE_MODE = { ON | OFF }
  | QUERY_CAPTURE_POLICY = ( <query_capture_policy_option_list> [,...n] )
}

<query_capture_policy_option_list> ::=
{
    STALE_CAPTURE_POLICY_THRESHOLD = number { DAYS | HOURS }
    | EXECUTION_COUNT = number
    | TOTAL_COMPILE_CPU_TIME_MS = number
    | TOTAL_EXECUTION_CPU_TIME_MS = number
}

<snapshot_option> ::=
{
    ALLOW_SNAPSHOT_ISOLATION { ON | OFF }
  | READ_COMMITTED_SNAPSHOT { ON | OFF }
  | MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT { ON | OFF }
}
<sql_option> ::=
{
    ANSI_NULL_DEFAULT { ON | OFF }
  | ANSI_NULLS { ON | OFF }
  | ANSI_PADDING { ON | OFF }
  | ANSI_WARNINGS { ON | OFF }
  | ARITHABORT { ON | OFF }
  | COMPATIBILITY_LEVEL = { 170 | 160 | 150 | 140 | 130 | 120 | 110 | 100 }
  | CONCAT_NULL_YIELDS_NULL { ON | OFF }
  | NUMERIC_ROUNDABORT { ON | OFF }
  | QUOTED_IDENTIFIER { ON | OFF }
  | RECURSIVE_TRIGGERS { ON | OFF }
}

<termination>::=
{
    ROLLBACK AFTER integer [ SECONDS ]
  | ROLLBACK IMMEDIATE
  | NO_WAIT
}

<temporal_history_retention>::=TEMPORAL_HISTORY_RETENTION { ON | OFF }

Arguments

database_name

要修改的数据库的名称。

  • CURRENT

    CURRENT 运行当前数据库中的操作。 并不是所有上下文中的所有选项都支持 CURRENT。 如果 CURRENT 失败,则提供数据库名称。

< > auto_option ::=

控制自动选项。

中学阶段

指定次要副本的设置。 所有次要副本必须具有相同的值。 类似于 FOR SECONDARY(Transact-SQL) 的。ALTER DATABASE SCOPED CONFIGURATION

仅用于查询存储(QUERY_STORE)和自动优化(AUTOMATIC_TUNING)。

在 SQL Server Management Studio 版本 21 之前,语法有效, FOR SECONDARY 但 IntelliSense 无法识别。

AUTO_CREATE_STATISTICS { ON |OFF }

  • ON

    查询优化器根据需要在查询谓词中的单列上创建统计信息,以便改进查询计划和查询性能。 在查询优化器编译查询时创建这些单列统计信息。 这些单列统计信息只在尚不是现有统计信息对象的第一列的列上创建。

    默认值为 ON。 建议您对于大多数数据库使用默认设置。

  • OFF

    查询优化器在编译查询时不在查询谓词中的单列上创建统计信息。 将此选项设置为 OFF 可能导致并非最佳的查询计划以及查询性能下降。

您可以通过查看is_auto_create_stats_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAutoCreateStatisticsDATABASEPROPERTYEX 函数的属性来确定状态。

更多信息请参见 统计学中的“统计选项”部分。

INCREMENTAL = ON |OFF

将 AUTO_CREATE_STATISTICS 设置为 ON,并将 INCREMENTAL 设置为 ON。 只要支持增量统计信息,此设置便会自动创建增量统计信息。 默认值为 OFF。 有关详细信息,请参阅 CREATE STATISTICS

AUTO_SHRINK { ON |OFF }

  • ON

    数据库文件是定期收缩的候选项。 除非有特定要求,否则不要将AUTO_SHRINK数据库选项设置为 ON。 有关详细信息,请参阅收缩数据库

数据文件和日志文件都可以自动收缩。 只有在将数据库设置为 SIMPLE 恢复模式时,或备份事务日志时,AUTO_SHRINK 才可减小事务日志的大小。 当设置为 OFF 时,在定期检查未使用空间的过程中,数据库文件不自动收缩。

当文件中超过百分之二十五的部分包含未使用的空间时,AUTO_SHRINK 选项将导致收缩文件。 该选项会导致文件收缩为两种大小之一。 它会收缩为其中较大的大小:

  • 其中 25% 的文件不包含任何内容时的大小
  • 文件创建时的大小

不能收缩只读数据库。

  • OFF

    在定期检查未使用的空间期间,数据库文件不会自动收缩。

您可以通过查看is_auto_shrink_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAutoShrinkDATABASEPROPERTYEX 函数的属性来确定状态。

Note

AUTO_SHRINK 选项在包含的数据库中不可用。

AUTO_UPDATE_STATISTICS { ON |OFF }

  • ON

    指定在统计信息由查询使用并且可能过期时,查询优化器更新统计信息。 统计信息将在插入、更新、删除或合并操作更改表或索引视图中的数据分布后过期。 查询优化器通过计算自最后统计信息更新后数据修改的次数并且将这一修改次数与某一阈值进行比较,确定统计信息何时可能过期。 该阈值基于表中或索引视图中的行数。

    查询优化器在编译查询和运行缓存查询计划前,检查是否存在过期的统计信息。 查询优化器使用查询谓词中的列、表和索引视图确定哪些统计信息可能过期。 查询优化器在编译查询之前确定此信息。 在运行缓存查询计划前,数据库引擎 确认该查询计划引用最新的统计信息。

    AUTO_UPDATE_STATISTICS选项适用于为索引创建的统计数据、查询谓词中的单列统计数据,以及使用该 CREATE STATISTICS 语句创建的统计数据。 此选项也适用于筛选的统计信息。

    默认值为 ON。 建议您对于大多数数据库使用默认设置。

    使用 AUTO_UPDATE_STATISTICS_ASYNC 选项可以指定统计信息是同步更新还是异步更新。

  • OFF

    指定在查询使用统计信息时,查询优化器不更新统计信息。 查询优化器在统计信息可能过期时,也不会更新统计信息。 将此选项设置为 OFF 可能导致并非最佳的查询计划以及查询性能下降。

    您可以通过查看is_auto_update_stats_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAutoUpdateStatisticsDATABASEPROPERTYEX 函数的属性来确定状态。

    更多信息请参见 统计学中的“统计选项”部分。

AUTO_UPDATE_STATISTICS_ASYNC { ON |OFF }

  • ON

    指定针对 AUTO_UPDATE_STATISTICS 选项的统计信息更新是异步的。 查询优化器不等待统计信息更新完成即编译查询。

    除非已将 AUTO_UPDATE_STATISTICS 设置为 ON,否则将此选项设置为 ON 不会产生任何影响。

    默认情况下,AUTO_UPDATE_STATISTICS_ASYNC 选项设置为 OFF,并且查询优化器以同步方式更新统计信息。

  • OFF

    指定针对 AUTO_UPDATE_STATISTICS 选项的统计信息更新是同步的。 查询优化器在编译查询前等待统计信息更新完成。

    除非已将 AUTO_UPDATE_STATISTICS 设置为 ON,否则将此选项设置为 OFF 不会产生任何影响。

您可以通过查看is_auto_update_stats_async_onsys.databases目录视图中的该列来确定该选项的状态。

如需了解更多关于何时使用同步或异步统计更新的信息,请参见 统计学中的“统计选项”部分。

< > automatic_tuning_option ::=

控制 自动调校选项。 可以在 Azure 门户中或在 sys.database_automatic_tuning_options 视图中通过 T-SQL 查看以下设置的选项。

AUTOMATIC_TUNING = { AUTO |INHERIT |CUSTOM }

  • AUTO

    将自动优化值设置为 AUTO 会应用 Azure 配置默认值进行自动优化。 在 Azure 门户中,这显示为选项“继承自: Azure 默认值”。

  • INHERIT

    使用 INHERIT 值将从父服务器继承默认配置。 在 Azure 门户中,这显示为选项“继承自: 服务器”。 如果想要在父服务器上自定义自动优化配置,并让该服务器上的所有数据库继承这些自定义设置,则这特别有用。 为了让继承正常工作,数据库中需要将三个单独的调优选项FORCE_LAST_GOOD_PLAN、CREATE_INDEX和 DROP_INDEX设置为 。DEFAULT

  • CUSTOM

    使用 CUSTOM 值时,需要自定义配置数据库上可用的每个自动优化选项。 在 Azure 门户中,这显示为选项“继承自: 不继承”。

CREATE_INDEX = { DEFAULT |ON中 |不对 }

启用或禁用自动索引管理 CREATE_INDEX 选项,如 自动调优。 可以在 Azure 门户中或在 sys.database_automatic_tuning_options 视图中通过 T-SQL 查看此选项的状态。

  • DEFAULT

    从服务器继承默认设置。 本例中,在服务器级别定义了启用或禁用单个“自动优化”功能的选项。

  • ON

    启用时,将自动生成数据库上缺失的索引。 在索引创建之后,已验证工作负荷的性能提升。 此类创建的索引不再能够提升工作负荷性能时,会自动将其还原。 自动创建的索引将标记为系统生成的索引。

  • OFF

    不自动生成数据库上缺失的索引。

DROP_INDEX = { DEFAULT |ON中 |不对 }

启用或禁用自动索引管理 DROP_INDEX 选项,如 自动调优。 可以在 Azure 门户中或在 sys.database_automatic_tuning_options 视图中通过 T-SQL 查看此选项的状态。

  • DEFAULT

    从服务器继承默认设置。 本例中,在服务器级别定义了启用或禁用单个“自动优化”功能的选项。

  • ON

    自动删除重复或对性能工作负荷而言不再有用的索引。

  • OFF

    不自动删除数据库上缺失的索引。

FORCE_LAST_GOOD_PLAN = { DEFAULT |ON中 |不对 }

启用或禁用自动调整 FORCE_LAST_GOOD_PLAN 计划选项或 自动调优。 可以在 Azure 门户中或在 sys.database_automatic_tuning_options 视图中通过 T-SQL 查看此选项的状态。

  • DEFAULT

    从服务器继承默认设置。 本例中,在服务器级别定义了启用或禁用单个“自动优化”功能的选项。 这是默认值。 新 Azure SQL 服务器的默认值为 ON,这意味着默认情况下,新数据库继承 ON 的设置。

  • ON

    数据库引擎在新查询计划导致性能回归的 Transact-SQL 查询中自动强制执行上一个已知完好的计划。 数据库引擎通过该强制计划持续监视 Transact-SQL 查询的查询性能。 如果性能提升,数据库引擎会继续使用上一个已知的良好计划。 如果未检测到性能提升,数据库引擎将生成新的查询计划。 如果查询存储未启用或未处于 读写 模式,则该语句失败。

  • OFF

    数据库引擎报告了由查询计划变更引起的潜在查询性能回归 sys.dm_db_tuning_recommendations 。 但是,这些建议不会自动应用。 用户可以通过应用视图中显示的 Transact-SQL 脚本来监视正在应用的建议和修复已识别的问题。

< > change_tracking_option ::=

控制更改跟踪选项。 可以启用更改跟踪、设置选项、更改选项以及禁用更改跟踪。 示例请参见本文后面的 示例 部分。

  • ON

    对数据库启用更改跟踪。 启用更改跟踪时,还可以设置 AUTO CLEANUP 和 CHANGE RETENTION 选项。

    • AUTO_CLEANUP = { ON |OFF }

      • ON

        在经过指定的保持期后会自动删除更改跟踪信息。

      • OFF

        不会从数据库中删除更改跟踪数据。

    • CHANGE_RETENTION = retention_period { 天 |营业时间 |会议记录}

      指定在数据库中保留更改跟踪信息的最短期限。 只有在 AUTO_CLEANUP 值为 ON 时,才会删除数据。

      retention_period 是一个整数,表示保留期的数值成分。

      默认的保留期限是 2天。 最短保持期为 1 分钟。 默认的保留类型是 天数

  • OFF

    对数据库禁用更改跟踪。 先对所有表禁用更改跟踪,然后才能对数据库禁用更改跟踪。

< > cursor_option ::=

控制游标选项。

CURSOR_CLOSE_ON_COMMIT { 上 |不对 }

  • ON

    在提交或回滚事务时打开的所有游标都会关闭。

  • OFF

    提交事务时游标保持打开状态;回滚事务会关闭除定义为 INSENSITIVE 或 STATIC 的游标以外的任何游标。

使用 SET 语句设置的连接级别设置将替代默认 CURSOR_CLOSE_ON_COMMIT数据库设置。 ODBC 和 OLE DB 客户端默认会为会话发出连接级别 SET 的语句设置 CURSOR_CLOSE_ON_COMMIT 为 OFF。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET CURSOR_CLOSE_ON_COMMIT

您可以通过检查 is_cursor_close_on_commit_onsys.databases 目录视图中的列或 IsCloseCursorsOnCommitEnabledDATABASEPROPERTYEX 函数的属性来判断该选项的状态。 该游标仅在断开连接时才被隐式释放。 更多信息请参见 “声明CURSOR”

< > db_encryption_option ::=

控制数据库加密状态。

ENCRYPTION { ON |OFF }

将数据库设置为加密的 (ON) 或未加密的 (OFF)。 有关数据库加密的详细信息,请参阅 透明数据加密(TDE),以及 azure SQL 数据库、Azure SQL 托管实例和 Azure Synapse Analytics的 透明数据加密。

在数据库级别启用加密时,将对所有文件组进行加密。 任何新文件组都继承加密属性。 如果数据库中的任何文件组都设置为只读,则数据库加密操作将失败。

你可以通过 sys.dm_database_encryption_keys 动态管理视图查看数据库的加密状态。

< > db_update_option ::=

控制是否允许更新数据库。

  • READ_ONLY

    用户可以从数据库读取数据,但不能修改数据库。

    Note

    若要提高查询性能,请先更新统计信息,然后再将数据库设置为 READ_ONLY。 如果数据库设置为 READ_ONLY后需要其他统计信息,数据库引擎会在其中 tempdb创建统计信息。 有关只读数据库统计的更多信息,请参见统计。

  • READ_WRITE

    允许对数据库执行读写操作。

若要更改此状态,您必须对数据库有独占访问权限。 有关详细信息,请参阅 SINGLE_USER 子句。

Note

在 Azure SQL 数据库 联合数据库中,SET { READ_ONLY | READ_WRITE } 处于禁用状态。

< > db_user_access_option ::=

控制用户对数据库的访问。

  • RESTRICTED_USER

    仅允许 db_owner 固定数据库角色的成员以及 dbcreatorsysadmin 固定服务器角色的成员连接到数据库,不过对连接数没有限制。 与数据库的所有连接在语句的 ALTER DATABASE 终止子句指定的时间范围内断开连接。 数据库转换到 RESTRICTED_USER 状态后,将拒绝未经限定的用户的连接尝试。 在 Azure SQL 数据库中,应从用户数据库中执行。 在 master 数据库中,可能会遇到错误消息 Msg 42008, Level 16, State 3, Line 1 ODBC error: State: 28000: Error: 18456 Message:'[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user '##MS_InstanceCertificate##'.'.

  • MULTI_USER

    所有拥有连接到数据库的相应权限的用户,都允许进行连接。 您可以通过检查 user_accesssys.databases 目录视图中的列或 UserAccessDATABASEPROPERTYEX 函数的属性来判断该选项的状态。 在 Azure SQL 数据库中,应从用户数据库中执行。 在 master 数据库中,可能会遇到错误消息 Msg 42008, Level 16, State 3, Line 1 ODBC error: State: 28000: Error: 18456 Message:'[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user '##MS_InstanceCertificate##'.'.

< > delayed_durability_option ::=

控制提交的事务是完全持久事务还是延迟持久事务。

  • DISABLED

    SET DISABLED 之后的所有事务都是完全持久事务。 将忽略在原子块或 commit 语句中设置的任何持续性选项。

  • ALLOWED

    SET ALLOWED 之后的所有事务都是完全持久事务或都是延迟持久事务,具体取决于在原子块或 commit 语句中设置的持续性选项。

  • FORCED

    SET FORCED 之后的所有事务都是延迟持久事务。 将忽略在原子块或 commit 语句中设置的任何持续性选项。

< > PARAMETERIZATION_option ::=

控制参数化选项。

PARAMETERIZATION { SIMPLE |FORCED }

  • SIMPLE

    查询的参数化是根据数据库的默认行为进行的。

  • FORCED

    SQL Server 对数据库中的所有查询进行参数化。

该选项当前设置可通过检查 is_parameterization_forcedsys.databases 目录视图中的列来确定。

< > query_store_options ::=

  • ON | OFF | CLEAR [ ALL ]

    控制查询存储是否在此数据库中启用,同时控制是否删除查询存储的内容。

    • ON

      启用查询存储。 ON 是默认值。

    • OFF

      禁用查询存储。

      Note

      无法在 Azure SQL 数据库的单一数据库和弹性池中禁用查询存储。 执行 ALTER DATABASE [database] SET QUERY_STORE = OFF 返回警告 'QUERY_STORE=OFF' is not supported in this version of SQL Server.

    • CLEAR

      删除查询存储的内容。

OPERATION_MODE { READ_ONLY |READ_WRITE }

描述查询存储的操作模式。

READ_WRITE

查询存储将收集并保留查询计划和运行时执行统计信息。

READ_ONLY

可以从查询存储读取信息,但不会添加新信息。 如果查询存储的最大空间已用尽,则查询存储将其操作模式更改为 READ_ONLY

CLEANUP_POLICY

描述查询存储的数据保留策略。 STALE_QUERY_THRESHOLD_DAYS 可确定查询信息在查询存储中保留的天数。 STALE_QUERY_THRESHOLD_DAYS是 双倍型。 默认值为 30。 对于 SQL 数据库基础版,默认是 7 天。

DATA_FLUSH_INTERVAL_SECONDS

确定写入到查询存储的数据保留到磁盘的频率。 为了优化性能,由查询存储收集的数据应以异步方式写入到磁盘。 通过使用 DATA_FLUSH_INTERVAL_SECONDS 参数,配置此异步传输发生的频率。 DATA_FLUSH_INTERVAL_SECONDS是 Biint类型。 默认数值是 900 (15分钟)。

MAX_STORAGE_SIZE_MB

确定分配给查询存储的空间。 MAX_STORAGE_SIZE_MBbigint 类型。

Note

在 Azure SQL 数据库中,默认值 MAX_STORAGE_SIZE_MB 因服务层而异,如下所示:高级、业务关键和超大规模: 1,024 MB;标准和常规用途: 100 MB;基本: 10 MB。 允许的最大 MAX_STORAGE_SIZE_MB 值为 10,240 MB

Note

没有严格执行 MAX_STORAGE_SIZE_MB 限制。 仅当查询存储将数据写入磁盘时才检查存储大小。 此间隔由 DATA_FLUSH_INTERVAL_SECONDS 选项或 Management Studio 查询存储对话框选项“数据刷新间隔”设置。 间隔时间默认值为 900 秒(或 15 分钟)。 如果查询存储违反了存储大小检查之间的 MAX_STORAGE_SIZE_MB 限制,则会转换为只读模式。 如果启用了 SIZE_BASED_CLEANUP_MODE,则也会触发强制实施 MAX_STORAGE_SIZE_MB 限制的清理机制。 清除足够的空间后,查询存储模式会自动切换回读写。

Important

如果你认为工作负载捕获需要超过 10 GB 的磁盘空间,你可能需要重新考虑并优化工作负载,以重用查询计划(例如使用 强制参数化,或调整查询存储配置)。 从 SQL Server 2019 (15.x) 开始,在 Azure SQL 数据库 中,可以将 QUERY_CAPTURE_MODE 设置为“CUSTOM”,以进一步控制查询捕获策略。

INTERVAL_LENGTH_MINUTES

确定运行时执行统计数据聚合到查询存储中的时间间隔。 为了优化空间使用情况,将在固定时间窗口上聚合运行时统计信息存储中的运行时执行统计信息。 此固定时间窗口使用 INTERVAL_LENGTH_MINUTES 参数进行配置。 INTERVAL_LENGTH_MINUTES是 双型。 默认值是 60

SIZE_BASED_CLEANUP_MODE = { AUTO |OFF }

控制当数据总量接近最大大小时是否自动激活清理。

  • OFF

    不会自动激活基于大小的清理。

  • AUTO

    当磁盘大小达到 90 个% max_storage_size_mb时,基于大小的清理会自动激活。 基于大小的清除首先会删除成本最低和最旧的查询。 它停在大约80% max_storage_size_mb。 这是默认的配置值。

SIZE_BASED_CLEANUP_MODE属于 恩瓦尔查尔类型。

QUERY_CAPTURE_MODE { ALL |AUTO |CUSTOM |NONE }

指定当前处于活动状态的查询捕获模式。 每个模式都定义了特定的查询捕获策略。

Note

当查询捕获模式设置为“全部”、“自动”或“自定义”时,始终捕获游标、存储过程中的查询和本机编译的查询。

  • ALL

    捕获所有查询。

  • AUTO

    根据执行计数和资源消耗捕获相关查询。 这是 Azure SQL 数据库 的默认配置值。

  • NONE

    停止捕获新查询。 查询存储继续收集已捕获的查询的编译和运行时统计信息。 请谨慎使用此配置,因为可能会错过捕获重要查询。

  • CUSTOM

    可控制 QUERY_CAPTURE_POLICY 选项。

QUERY_CAPTURE_MODE是 Nvarchar类型。

MAX_PLANS_PER_QUERY

定义为每个查询保留的最大计划数。 MAX_PLANS_PER_QUERY是输入 int。默认数值是 200

WAIT_STATS_CAPTURE_MODE { ON |OFF }

控制是否按查询捕获等待统计信息。

  • ON

    捕获每个查询的等待统计信息。 此值是默认配置值。

  • OFF

    不会捕获每个查询的等待统计信息。

< > query_capture_policy_option_list ::=

控制查询存储捕获策略选项。 除 STALE_CAPTURE_POLICY_THRESHOLD 外,这些选项定义 OR 条件,需要满足这些条件,才能在定义的“过时捕获策略阈值”中捕获查询。

STALE_CAPTURE_POLICY_THRESHOLD = 整数 { DAYS |时间 }

定义评估间隔时段以确定是否应捕获查询。 默认值为 1 天,可以设置为 1 小时到 7 天。 数字 是类型 为int

EXECUTION_COUNT = 整数

定义在评估期间执行查询的次数。 默认值为 30,这意味着对于默认的过时捕获策略阈值,查询必须在一天内至少执行 30 次才能在查询存储中保留。 EXECUTION_COUNT是类型 int

TOTAL_COMPILE_CPU_TIME_MS = 整数

定义查询在评估期间使用的总编译 CPU 时间。 默认值为 1000,这意味着对于默认的过时捕获策略阈值,查询必须在一天内在查询编译期间总共花费至少一秒钟的 CPU 时间,才能持久存储在查询存储中。 TOTAL_COMPILE_CPU_TIME_MS是类型 int

TOTAL_EXECUTION_CPU_TIME_MS = 整数

定义查询在评估期间使用的总执行 CPU 时间。 默认值为 100,这意味着对于默认的过时捕获策略阈值,查询必须在一天内在执行期间总共花费至少100 ms 的 CPU 时间,才能持久存储在查询存储中。 TOTAL_EXECUTION_CPU_TIME_MS是输入 int

< > snapshot_option ::=

确定事务隔离级别。

ALLOW_SNAPSHOT_ISOLATION { ON |OFF }

  • ON

    在数据库级别启用快照选项。 启用该选项后,DML 语句将开始生成行版本,即使没有事务使用快照隔离也是如此。 一旦启用此选项,事务即可指定 SNAPSHOT 事务隔离级别。 当事务在 SNAPSHOT 隔离级别运行时,所有的语句都将数据快照视为位于事务的开头。 如果在 SNAPSHOT 隔离级别运行的事务访问多个数据库中的数据,则必须在所有数据库中将ALLOW_SNAPSHOT_ISOLATION设置为 ON,或者事务中的每个语句都必须对 FROM 子句中对数据库中表的任何ALLOW_SNAPSHOT_ISOLATIONOFF引用使用锁定提示。

  • OFF

    在数据库级别禁用快照选项。 事务不能指定 SNAPSHOT 事务隔离级别。

将ALLOW_SNAPSHOT_ISOLATION设置为新状态(从 ON 到 OFF 或从 OFF 设置为 ON), ALTER DATABASE 在提交数据库中的所有现有事务之前,不会向调用方返回控制权。 如果数据库已在语句中指定的 ALTER DATABASE 状态,则控件会立即返回到调用方。 ALTER DATABASE如果语句没有快速返回,请使用sys.dm_tran_active_snapshot_database_transactions来确定是否存在长时间运行的事务。 如果 ALTER DATABASE 语句被取消,数据库将保持启动时 ALTER DATABASE 的状态。 sys.databases 目录视图显示数据库中快照隔离事务的状态。 如果 snapshot_isolation_state_desc = IN_TRANSITION_TO_ON,则语句 ALTER DATABASE .... ALLOW_SNAPSHOT_ISOLATION OFF 暂停 6 秒并重试操作。

如果数据库处于 OFFLINE 状态,则不能更改 ALLOW_SNAPSHOT_ISOLATION 的状态。

如果在READ_ONLY数据库中设置ALLOW_SNAPSHOT_ISOLATION,则如果以后将数据库设置为READ_WRITE,则会保留该设置。

该选项当前设置可通过检查 snapshot_isolation_statesys.databases 目录视图中的列来确定。

READ_COMMITTED_SNAPSHOT { ON |OFF }

  • ON

    在数据库级别启用已提交读快照选项。 启用该选项后,DML 语句将开始生成行版本,即使没有事务使用快照隔离也是如此。 启用此选项后,指定 READ COMMITTED 隔离级别的事务将使用行版本控制而不是锁定。 当事务在 READ COMMITTED 隔离级别运行时,所有的语句都将数据快照视为位于语句的开头。

  • OFF

    在数据库级别禁用已提交读快照选项。 指定 READ COMMITTED 隔离级别的事务使用锁定。

要设置READ_COMMITTED_SNAPSHOT开或关闭,数据库必须只有运行该 ALTER DATABASE 命令的连接。 但是,数据库不必一定要处于单用户模式下。 当数据库处于 OFFLINE 状态时,不能更改此选项的状态。

如果在READ_ONLY数据库中设置READ_COMMITTED_SNAPSHOT,则会在以后将数据库设置为READ_WRITE时保留该设置。

对于 mastertempdbmsdb 系统数据库,不能将 READ_COMMITTED_SNAPSHOT 设置为 ON。 如果为 model 更改该设置,则该设置将成为除 tempdb 以外的所有新建数据库的默认设置。

该选项当前设置可通过检查 is_read_committed_snapshot_onsys.databases 目录视图中的列来确定。

Warning

当创建表时,DURABILITY = SCHEMA_ONLY随后用 ALTER DATABASE变更,表中的数据会丢失。

Tip

在 Azure SQL 数据库 中,必须在 ALTER DATABASE 数据库中执行为数据库设置 READ_COMMITTED_SNAPSHOT ON 或 OFF 的 master 命令。

MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT { ON |OFF }

  • ON

    当事务隔离级别设置为任何低于 SNAPSHOT 的隔离级别时,内存优化表中所有经过解释的 Transact-SQL 操作将在 SNAPSHOT 隔离下运行。 低于快照的隔离级别示例有 READ COMMITTED 或 READ UNCOMMITTED。 无论是在会话级别显式设置事务隔离级别还是隐式使用默认值,这些操作都会运行。

  • OFF

    不提升内存优化表中经过解释的 Transact-SQL 操作的事务隔离级别。

如果数据库处于 OFFLINE 状态,不能更改 MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT 的状态。

默认值为 OFF。

该选项当前设置可通过检查 is_memory_optimized_elevate_to_snapshot_onsys.databases 目录视图中的列来确定。

< > sql_option ::=

在数据库级别控制 ANSI 遵从选项。

ANSI_NULL_DEFAULT { ON |OFF }

确定列或 NULL默认值(NOT NULL)在语句中CREATE TABLE未显式定义可为 null 性的列或 ALTER TABLE CLR。 使用约束定义的列遵循约束规则,无论此设置是什么。

  • ON

    默认值为 NULL

  • OFF

    默认值为 NOT NULL

使用 SET 语句设置的连接级别设置将替代ANSI_NULL_DEFAULT的默认数据库级设置。 默认情况下,ODBC 和 OLE DB 客户端向会话发出连接级SET语句设置ANSI_NULL_DEFAULTON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_NULL_DFLT_ON

对于 ANSI 兼容性,将数据库选项 ANSI_NULL_DEFAULT 设置为 ON 将数据库默认设置更改为 NULL

您可以通过查看is_ansi_null_default_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiNullDefaultDATABASEPROPERTYEX 函数的属性来确定状态。

ANSI_NULLS { 上 |不对 }

  • ON

    与 null 值的所有比较结果为 UNKNOWN

  • OFF

    非 Unicode 值与 null 值的比较计算 TRUE 结果为两个 NULL值。

Important

在 SQL Server 的未来版本中, ANSI_NULLS 始终为 ON,任何显式设置选项 OFF 的应用程序都将生成错误。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

使用 SET 语句设置的连接级别设置将替代默认 ANSI_NULLS数据库设置。 默认情况下,ODBC 和 OLE DB 客户端向会话发出连接级SET语句设置ANSI_NULLSON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_NULLS

Note

SET ANSI_NULLS 在计算列或索引视图上创建或更改索引时,还必须设置为 ON 该设置。

您可以通过查看is_ansi_nulls_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiNullsEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

ANSI_PADDING { 上 |不对 }

  • ON

    在进行转换之前,将字符串填充到同一长度。 插入 varcharnvarchar 数据类型前,也填充至相同长度。

  • OFF

    varcharnvarchar 列中插入字符值的后尾空白。 还会在二进制值中留下尾随零,插入 变分 列中。 不将值填充到列的长度。

    如果指定了 OFF,该设置只影响新列的定义。

Important

在 SQL Server 的未来版本中, ANSI_PADDING 始终为 ON,任何显式设置选项 OFF 的应用程序都将生成错误。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 建议始终设置为 ANSI_PADDINGON. ANSI_PADDING 在计算列或索引视图上创建或操作索引时,必须为 ON。

允许零值的char(n二进制(n 列,当设置为ON ANSI_PADDING 时,会填充到列长度。 尾随空白和零的剪裁时间 ANSI_PADDINGOFF不允许零的char(n二进制(n 列总是填充到列的长度。

使用 SET 语句设置的连接级别设置将替代默认 ANSI_PADDING的数据库级设置。 默认情况下,ODBC 和 OLE DB 客户端向会话发出连接级SET语句设置ANSI_PADDINGON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_PADDING

您可以通过查看is_ansi_padding_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiPaddingEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

ANSI_WARNINGS { 上 |不对 }

  • ON

    当出现被零除这类情况时,将发出错误或警告。 当聚合函数中出现 Null 值时,也会发出错误和警告。

  • OFF

    出现被零除等情况时不会引发警告,而是返回 Null 值。

Note

在计算列或索引视图上创建或更改索引时,必须设置为 < a0/>。

使用 SET 语句设置的连接级别设置将替代默认 ANSI_WARNINGS数据库设置。 默认情况下,ODBC 和 OLE DB 客户端向会话发出连接级SET语句设置ANSI_WARNINGSON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_WARNINGS

您可以通过查看is_ansi_warnings_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiWarningsEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

ARITHABORT { 上 |不对 }

  • ON

    在查询执行过程中出现溢出或被零除等错误时,结束查询。

  • OFF

    在出现其中一个错误时显示警告消息。 即使显示警告,查询、批处理或事务也会继续进行处理,就像没有发生错误一样。

Note

SET SET ARITHABORT 在创建或更改计算列或索引视图索引时,必须设置为 ON。

您可以通过查看is_arithabort_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsArithmeticAbortEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

COMPATIBILITY_LEVEL = { 170 | 160 | 150 | 140 | 130 | 120 | 110 | 100 }

有关详细信息,请参阅 ALTER DATABASE 兼容性级别

CONCAT_NULL_YIELDS_NULL { 上 |不对 }

  • ON

    串联操作的结果是 NULL 当任一操作数为 NULL时。 例如,将字符串“This is”和 NULL 串联将得到 NULL 值,而不是值“This is”。

  • OFF

    Null 值被视为空字符串进行处理。

Note

CONCAT_NULL_YIELDS_NULL 在创建或更改计算列或索引视图索引时,必须设置为 ON。

在 SQL Server 的未来版本中,始终为 ON, CONCAT_NULL_YIELDS_NULL 显式将选项设置为 OFF 的任何应用程序都会生成错误。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

使用 SET 语句设置的连接级别设置将替代默认 CONCAT_NULL_YIELDS_NULL数据库设置。 默认情况下,ODBC 和 OLE DB 客户端在连接到 SQL Server 实例时会为会话发出连接级别SET的语句设置CONCAT_NULL_YIELDS_NULL为 ON。 有关详细信息,请参阅 SET CONCAT_NULL_YIELDS_NULL

您可以通过查看is_concat_null_yields_null_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsNullConcatDATABASEPROPERTYEX 函数的属性来确定状态。

NUMERIC_ROUNDABORT { 上 |不对 }

  • ON

    当表达式中发生精度损失时生成错误。

  • OFF

    精度的降低不会生成错误消息,会根据存储结果的列或变量的精度,将结果舍入。

Important

在计算列或索引视图上创建或更改索引时,必须设置为 < a0/>。

您可以在 is_numeric_roundabort_on 目录视图的列中确定该选项的状态。 你也可以通过检查 IsNumericRoundAbortEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

QUOTED_IDENTIFIER { 上 |不对 }

  • ON

    可以将分隔标识符包含在双引号中。

    所有用双引号分隔的字符串都被解释为对象标识符。 加引号的标识符不必遵守 Transact-SQL 标识符规则。 它们可以是关键字,并且可以包含 Transact-SQL 标识符中不允许的字符。 如果双引号 (") 是标识符的一部分,则可以用两个双引号 ("") 来表示它。

  • OFF

    标识符不能包含在引号中,而且必须遵循所有 Transact-SQL 标识符规则。 文字可以由单引号或双引号分隔。

SQL Server 还允许使用方括号([])分隔标识符。 无论设置如何 QUOTED_IDENTIFIER ,括号标识符都可以使用。 有关详细信息,请参阅 数据库标识符

创建表时,该 QUOTED_IDENTIFIER 选项始终作为 ON 存储在表的元数据中。 即使选项设置为 OFF 创建表时,该选项也会存储。

使用 SET 语句设置的连接级别设置将替代默认 QUOTED_IDENTIFIER数据库设置。 默认情况下,ODBC 和 OLE DB 客户端向连接级别SET语句设置QUOTED_IDENTIFIERON发出设置。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET QUOTED_IDENTIFIER

您可以通过查看is_quoted_identifier_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsQuotedIdentifiersEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

RECURSIVE_TRIGGERS { ON |OFF }

  • ON

    允许递归激发 AFTER 触发器。

  • OFF

    您可以通过查看is_recursive_triggers_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsRecursiveTriggersEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

Note

仅当设置为 RECURSIVE_TRIGGERS..OFF 若要禁用间接递归触发,还必须将 nested triggers 服务器选项设置为 0。

您可以通过检查 is_recursive_triggers_onsys.databases 目录视图中的列或 IsRecursiveTriggersEnabledDATABASEPROPERTYEX 函数的属性来判断该选项的状态。

WITH <终止> ::=

指定当数据库从一种状态转换到另一种状态时,何时回滚未完成的事务。 如果省略终止子句,则如果数据库有任何锁,语句 ALTER DATABASE 将无限期等待。 只能指定一个终止子句,并遵循子 SET 句。

Note

并非所有数据库选项都使用子 WITH <termination> 句。 有关详细信息,请参阅 “设置”选项下的表。

  • 数后回 滚 [秒] |立即回滚

    指定是在指定秒数之后回滚还是立即回滚。

  • NO_WAIT

    指定如果请求的数据库状态或选项更改无法立即完成,请求将失败。 立即完成意味着不会等待事务自己提交或回滚。

< > temporal_history_retention ::=

SET 选项

要获取数据库选项的当前设置,请使用 sys.databases 目录视图或 DATABASEPROPERTYEX

设置数据库选项后,新的设置将立即生效。

并非所有数据库选项都使用子 WITH <termination> 句,也可以与其他选项结合使用。 下表列出这些选项以及它们的选项和终止状态。

期权类别 可与其他选项一起指定 可以使用子 WITH <termination>
<auto_option> Yes No
<change_tracking_option> Yes Yes
<cursor_option> Yes No
<db_encryption_option> Yes No
<db_update_option> Yes Yes
<db_user_access_option> Yes Yes
<delayed_durability_option> Yes Yes
<parameterization_option> Yes Yes
ALLOW_SNAPSHOT_ISOLATION No No
READ_COMMITTED_SNAPSHOT No Yes
MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT Yes Yes
DATE_CORRELATION_OPTIMIZATION Yes Yes
<sql_option> Yes No

Examples

A. 将数据库设置为 READ_ONLY

将数据库或文件组 READ_ONLY 的状态更改为或 READ_WRITE 需要对数据库进行独占访问,可能需要几秒钟才能完成。 下面的示例将数据库设置为 RESTRICTED_USER 模式,以限制访问。 然后,该示例将 AdventureWorks2025 数据库的状态设置为 READ_ONLY ,并将对数据库的访问权返回给所有用户。

--Connect to [database_name];
GO
ALTER DATABASE [database_name]
SET RESTRICTED_USER;
GO
ALTER DATABASE [database_name]
SET READ_ONLY
--`SET READ_ONLY` command might take a few seconds to complete.
GO
ALTER DATABASE [database_name]
SET MULTI_USER;
GO

若要将数据库重新设置为读写模式,请执行以下操作:

--Connect to [database_name];
GO
ALTER DATABASE [database_name]
SET READ_WRITE
GO

要进行验证:

SELECT [name], user_access_desc, is_read_only FROM sys.databases
WHERE [name] = 'database_name'
GO

B. 对数据库启用快照隔离

下面的示例为 AdventureWorks2025 数据库启用快照隔离框架选项。

--Connect to [database_name]
GO
ALTER DATABASE [database_name]
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO

验证数据库中的 snapshot_isolation_framework 状态。

--Connect to [database_name]
SELECT name, snapshot_isolation_state,
    snapshot_isolation_state_desc AS description
FROM sys.databases
WHERE name = N'database_name';
GO

结果集显示快照隔离框架已启用。

name snapshot_isolation_state description
[database_name] 1 ON

C. 启用、修改或禁用更改跟踪

下面的示例对 AdventureWorks2025 数据库启用更改跟踪并将保持期设置为 2 天。

--Connect to [database_name]
ALTER DATABASE [database_name]
SET CHANGE_TRACKING = ON
(AUTO_CLEANUP = ON, CHANGE_RETENTION = 2 DAYS);

下面的示例说明如何将保持期更改为 3 天。

--Connect to [database_name]
ALTER DATABASE [database_name]
SET CHANGE_TRACKING (CHANGE_RETENTION = 3 DAYS);

下面的示例说明如何对 AdventureWorks2025 数据库禁用更改跟踪。

--Connect to [database_name]
ALTER DATABASE [database_name]
SET CHANGE_TRACKING = OFF;

D. 启用查询存储

下面的示例启用查询存储并配置查询存储参数。

--Connect to [database_name]
ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      QUERY_CAPTURE_MODE = AUTO,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60
    );

E. 使用等待统计信息启用查询存储

下面的示例启用查询存储并配置其参数。

--Connect to [database_name]
ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON
    );

F. 使用自定义捕获策略选项启用查询存储

下面的示例启用查询存储并配置其参数。

--Connect to [database_name]
ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON,
      QUERY_CAPTURE_MODE = CUSTOM,
      QUERY_CAPTURE_POLICY = (
        STALE_CAPTURE_POLICY_THRESHOLD = 24 HOURS,
        EXECUTION_COUNT = 30,
        TOTAL_COMPILE_CPU_TIME_MS = 1000,
        TOTAL_EXECUTION_CPU_TIME_MS = 100
      )
    );

* Fabric 中的 SQL 数据库*  

 

Microsoft Fabric 中的 SQL 数据库

此页面包含 ALTER DATABASE SETFabric 中 SQL 数据库的选项。

Note

在 Fabric 中的 SQL 数据库中,所有 ALTER DATABASE SET 选项当前都是预览功能。

兼容性等级是 SET 选项,但具体描述在 ALTER DATABASE 兼容性等级中。

Note

许多数据库集选项可以通过语 SET 句 为当前会话配置,应用程序连接时通常会配置。 会话级 SET 选项将覆盖 ALTER DATABASE SET 值。 下面各节中所述的数据库选项是你可以为未明确提供其他 SET 选项值的会话设置的值。

Syntax

ALTER DATABASE { database_name | CURRENT }
SET
{
    <option_spec> [ ,...n ] [ WITH <termination> ]
}
;

<option_spec> ::=
{
    <auto_option>
  | <automatic_tuning_option>
  | <change_tracking_option>
  | <cursor_option>
  | <db_update_option>
  | <db_user_access_option>
  | <delayed_durability_option>
  | <parameterization_option>
  | <query_store_options>
  | <snapshot_option>
  | <sql_option>
  | <termination>
  | <temporal_history_retention>
}
;

<auto_option> ::=
{
    AUTO_CREATE_STATISTICS { OFF | ON [ ( INCREMENTAL = { ON | OFF } ) ] }
  | AUTO_SHRINK { ON | OFF }
  | AUTO_UPDATE_STATISTICS { ON | OFF }
  | AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }
}

<automatic_tuning_option> ::=
{
    AUTOMATIC_TUNING = { AUTO | INHERIT | CUSTOM }
  | AUTOMATIC_TUNING ( CREATE_INDEX = { DEFAULT | ON | OFF } )
  | AUTOMATIC_TUNING ( DROP_INDEX = { DEFAULT | ON | OFF } )
  | AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = { DEFAULT | ON | OFF } )
}

<change_tracking_option> ::=
{
    CHANGE_TRACKING
    {
        ( <change_tracking_option_list> [,...n] )
    }
}

<change_tracking_option_list> ::=
   {
       CHANGE_RETENTION = retention_period { DAYS | HOURS | MINUTES }
   }

<cursor_option> ::=
{
    CURSOR_CLOSE_ON_COMMIT { ON | OFF }
}

<db_update_option> ::=
  { READ_ONLY | READ_WRITE }

<db_user_access_option> ::=
  { RESTRICTED_USER | MULTI_USER }

<delayed_durability_option> ::= DELAYED_DURABILITY = { DISABLED | ALLOWED | FORCED }

<parameterization_option> ::=
  PARAMETERIZATION { SIMPLE | FORCED }

<query_store_options> ::=
{
  QUERY_STORE
  {
      = OFF
    | = ON [ ( <query_store_option_list> [,... n] ) ]
    | ( < query_store_option_list> [,... n] )
    | CLEAR [ ALL ]
  }
}

<query_store_option_list> ::=
{
  OPERATION_MODE = { READ_WRITE | READ_ONLY }
  | CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = number )
  | DATA_FLUSH_INTERVAL_SECONDS = number
  | MAX_STORAGE_SIZE_MB = number
  | INTERVAL_LENGTH_MINUTES = number
  | SIZE_BASED_CLEANUP_MODE = { AUTO | OFF }
  | QUERY_CAPTURE_MODE = { ALL | AUTO | CUSTOM | NONE }
  | MAX_PLANS_PER_QUERY = number
  | WAIT_STATS_CAPTURE_MODE = { ON | OFF }
  | QUERY_CAPTURE_POLICY = ( <query_capture_policy_option_list> [,...n] )
}

<query_capture_policy_option_list> ::=
{
    STALE_CAPTURE_POLICY_THRESHOLD = number { DAYS | HOURS }
    | EXECUTION_COUNT = number
    | TOTAL_COMPILE_CPU_TIME_MS = number
    | TOTAL_EXECUTION_CPU_TIME_MS = number
}

<snapshot_option> ::=
{
    MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT { ON | OFF }
}
<sql_option> ::=
{
    ANSI_NULL_DEFAULT { ON | OFF }
  | ANSI_NULLS { ON | OFF }
  | ANSI_PADDING { ON | OFF }
  | ANSI_WARNINGS { ON | OFF }
  | ARITHABORT { ON | OFF }
  | COMPATIBILITY_LEVEL = { 170 | 160 | 150 | 140 | 130 | 120 | 110 | 100 }
  | CONCAT_NULL_YIELDS_NULL { ON | OFF }
  | NUMERIC_ROUNDABORT { ON | OFF }
  | QUOTED_IDENTIFIER { ON | OFF }
  | RECURSIVE_TRIGGERS { ON | OFF }
}

<termination>::=
{
    ROLLBACK AFTER integer [ SECONDS ]
  | ROLLBACK IMMEDIATE
  | NO_WAIT
}

<temporal_history_retention>::=TEMPORAL_HISTORY_RETENTION { ON | OFF }

Arguments

database_name

要修改的数据库的名称。

  • CURRENT

    CURRENT 运行当前数据库中的操作。 并不是所有上下文中的所有选项都支持 CURRENT。 如果 CURRENT 失败,则提供数据库名称。

< > auto_option ::=

控制自动选项。

AUTO_CREATE_STATISTICS { ON |OFF }

  • ON

    查询优化器根据需要在查询谓词中的单列上创建统计信息,以便改进查询计划和查询性能。 在查询优化器编译查询时创建这些单列统计信息。 这些单列统计信息只在尚不是现有统计信息对象的第一列的列上创建。

    默认值为 ON。 建议您对于大多数数据库使用默认设置。

  • OFF

    查询优化器在编译查询时不在查询谓词中的单列上创建统计信息。 将此选项设置为 OFF 可能导致并非最佳的查询计划以及查询性能下降。

您可以通过查看is_auto_create_stats_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAutoCreateStatisticsDATABASEPROPERTYEX 函数的属性来确定状态。

更多信息请参见 统计学中的“统计选项”部分。

INCREMENTAL = ON |OFF

设置为 AUTO_CREATE_STATISTICS ,并设置为 ONINCREMENTALON 只要支持增量统计信息,此设置便会自动创建增量统计信息。 默认值为 OFF。 有关详细信息,请参阅 CREATE STATISTICS

AUTO_SHRINK { ON |OFF }

  • ON

    数据库文件是定期收缩的候选项。 除非有特定的要求,否则不要将 AUTO_SHRINK 数据库选项设置为 ON

数据文件和日志文件都可以自动收缩。 AUTO_SHRINK 仅当将数据库设置为 SIMPLE 恢复模式或备份日志时,才减小事务日志的大小。 设置为 OFF“设置为”时,在定期检查未使用的空间时,数据库文件不会自动收缩。

当超过 25% 的文件包含未使用的空间时,此选项 AUTO_SHRINK 会导致文件收缩。 该选项会导致文件收缩为两种大小之一。 它会收缩为其中较大的大小:

  • 其中 25% 的文件不包含任何内容时的大小
  • 文件创建时的大小

不能收缩只读数据库。

  • OFF

    在定期检查未使用的空间期间,数据库文件不会自动收缩。

您可以通过查看is_auto_shrink_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAutoShrinkDATABASEPROPERTYEX 函数的属性来确定状态。

AUTO_UPDATE_STATISTICS { ON |OFF }

  • ON

    指定在统计信息由查询使用并且可能过期时,查询优化器更新统计信息。 统计信息将在插入、更新、删除或合并操作更改表或索引视图中的数据分布后过期。 查询优化器通过计算自最后统计信息更新后数据修改的次数并且将这一修改次数与某一阈值进行比较,确定统计信息何时可能过期。 该阈值基于表中或索引视图中的行数。

    查询优化器在编译查询和运行缓存查询计划前,检查是否存在过期的统计信息。 查询优化器使用查询谓词中的列、表和索引视图确定哪些统计信息可能过期。 查询优化器在编译查询之前确定此信息。 在运行缓存查询计划前,数据库引擎 确认该查询计划引用最新的统计信息。

    此选项 AUTO_UPDATE_STATISTICS 适用于使用 CREATE STATISTICS 语句创建的索引、查询谓词中的单列和统计信息创建的统计信息。 此选项也适用于筛选的统计信息。

    默认值为 ON。 建议您对于大多数数据库使用默认设置。

    使用 AUTO_UPDATE_STATISTICS_ASYNC 此选项可指定统计信息是同步更新还是异步更新。

  • OFF

    指定在查询使用统计信息时,查询优化器不更新统计信息。 查询优化器在统计信息可能过期时,也不会更新统计信息。 将此选项设置为 OFF 可能导致并非最佳的查询计划以及查询性能下降。

    您可以通过查看is_auto_update_stats_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAutoUpdateStatisticsDATABASEPROPERTYEX 函数的属性来确定状态。

    更多信息请参见 统计学中的“统计选项”部分。

AUTO_UPDATE_STATISTICS_ASYNC { ON |OFF }

  • ON

    指定选项的统计信息更新是异步的 AUTO_UPDATE_STATISTICS 。 查询优化器不等待统计信息更新完成即编译查询。

    除非ON设置为 AUTO_UPDATE_STATISTICS.,否则将此选项设置为ON无效。

    默认情况下,此选项 AUTO_UPDATE_STATISTICS_ASYNC 设置为 OFF,查询优化器同步更新统计信息。

  • OFF

    指定选项的统计信息更新是同步的 AUTO_UPDATE_STATISTICS 。 查询优化器在编译查询前等待统计信息更新完成。

    除非OFF设置为 AUTO_UPDATE_STATISTICS.,否则将此选项设置为ON无效。

您可以通过查看is_auto_update_stats_async_onsys.databases目录视图中的该列来确定该选项的状态。

如需了解更多关于何时使用同步或异步统计更新的信息,请参见 统计学中的“统计选项”部分。

< > automatic_tuning_option ::=

控制 自动调校选项。 可以在视图中 sys.database_automatic_tuning_options通过 T-SQL 查看以下设置的选项。

AUTOMATIC_TUNING = { AUTO |INHERIT |CUSTOM }

  • AUTO

    设置自动优化值以 AUTO 应用自动优化的默认值。 默认情况下,FORCE_LAST_GOOD_PLAN启用并CREATE_INDEXDROP_INDEX禁用。

  • INHERIT

    设置自动优化值以 INHERIT 应用自动优化的默认值。 默认情况下,FORCE_LAST_GOOD_PLAN启用并CREATE_INDEXDROP_INDEX禁用。

  • CUSTOM

    使用该值 CUSTOM ,可以配置三个单独的优化选项 FORCE_LAST_GOOD_PLANCREATE_INDEX以及 DROP_INDEX

CREATE_INDEX = { DEFAULT |ON中 |不对 }

启用或禁用自动索引管理 CREATE_INDEX 选项,如 自动调优。 可以在视图中 sys.database_automatic_tuning_options通过 T-SQL 查看此选项的状态。

  • DEFAULT

    继承默认设置。

  • ON

    启用时,将自动生成数据库上缺失的索引。 在索引创建之后,已验证工作负荷的性能提升。 此类创建的索引不再能够提升工作负荷性能时,会自动将其还原。 自动创建的索引将标记为系统生成的索引。

  • OFF

    不自动生成数据库上缺失的索引。

DROP_INDEX = { DEFAULT |ON中 |不对 }

启用或禁用自动索引管理 DROP_INDEX 选项,如 自动调优。 可以在视图中 sys.database_automatic_tuning_options通过 T-SQL 查看此选项的状态。

  • DEFAULT

    从服务器继承默认设置。 本例中,在服务器级别定义了启用或禁用单个“自动优化”功能的选项。

  • ON

    自动删除重复或对性能工作负荷而言不再有用的索引。

  • OFF

    不自动删除数据库上缺失的索引。

FORCE_LAST_GOOD_PLAN = { DEFAULT |ON中 |不对 }

启用或禁用自动调整 FORCE_LAST_GOOD_PLAN 计划选项或 自动调优。 可以在视图中 sys.database_automatic_tuning_options通过 T-SQL 查看此选项的状态。

  • DEFAULT

    从服务器继承默认设置。 本例中,在服务器级别定义了启用或禁用单个“自动优化”功能的选项。 这是默认值,即值 ON

  • ON

    数据库引擎在新查询计划导致性能回归的 Transact-SQL 查询中自动强制执行上一个已知完好的计划。 数据库引擎通过该强制计划持续监视 Transact-SQL 查询的查询性能。 如果性能提升,数据库引擎会继续使用上一个已知的良好计划。 如果未检测到性能提升,数据库引擎将生成新的查询计划。 如果查询存储未启用或未处于 读写 模式,则该语句失败。

  • OFF

    数据库引擎报告了由查询计划变更引起的潜在查询性能回归 sys.dm_db_tuning_recommendations 。 但是,这些建议不会自动应用。 用户可以通过应用视图中显示的 Transact-SQL 脚本来监视正在应用的建议和修复已识别的问题。

< > change_tracking_option ::=

控制更改跟踪选项。 可以启用更改跟踪、设置选项、更改选项以及禁用更改跟踪。 示例请参见本文后面的 示例 部分。

  • CHANGE_RETENTION = retention_period { DAYS | HOURS | MINUTES }

    指定在数据库中保留更改跟踪信息的最短期限。

    retention_period 是一个整数,表示保留期的数值成分。

    默认的保留期限是 2天。 最短保持期为 1 分钟。 默认的保留类型是 天数

< > cursor_option ::=

控制游标选项。

CURSOR_CLOSE_ON_COMMIT { 上 |不对 }

  • ON

    在提交或回滚事务时打开的所有游标都会关闭。

  • OFF

    提交事务时游标保持打开状态;回滚事务会关闭除定义为 INSENSITIVESTATIC定义的游标以外的任何游标。

使用 SET 语句设置的连接级别设置将替代默认 CURSOR_CLOSE_ON_COMMIT数据库设置。 ODBC 和 OLE DB 客户端默认会为会话发出连接级别 SET 的语句设置 CURSOR_CLOSE_ON_COMMIT 为 OFF。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET CURSOR_CLOSE_ON_COMMIT

您可以通过检查 is_cursor_close_on_commit_onsys.databases 目录视图中的列或 IsCloseCursorsOnCommitEnabledDATABASEPROPERTYEX 函数的属性来判断该选项的状态。 该游标仅在断开连接时才被隐式释放。 更多信息请参见 “声明CURSOR”

< > db_update_option ::=

控制是否允许更新数据库。

  • READ_ONLY

    用户可以从数据库读取数据,但不能修改数据库。

    Note

    若要提高查询性能,请先更新统计信息,然后再将数据库设置为 READ_ONLY。 如果数据库设置为 READ_ONLY后需要其他统计信息,数据库引擎会在其中 tempdb创建统计信息。 有关只读数据库统计的更多信息,请参见统计。

  • READ_WRITE

    允许对数据库执行读写操作。

若要更改此状态,您必须对数据库有独占访问权限。 有关详细信息,请参阅 SINGLE_USER 子句。

< > db_user_access_option ::=

控制用户对数据库的访问。

  • RESTRICTED_USER

    仅允许 db_owner 固定数据库角色的成员以及 dbcreatorsysadmin 固定服务器角色的成员连接到数据库,不过对连接数没有限制。 与数据库的所有连接在语句的 ALTER DATABASE 终止子句指定的时间范围内断开连接。 在数据库转换到 RESTRICTED_USER 状态后,不合格用户所做的连接尝试将被拒绝。

  • MULTI_USER

    所有拥有连接到数据库的相应权限的用户,都允许进行连接。 您可以通过检查 user_accesssys.databases 目录视图中的列或 UserAccessDATABASEPROPERTYEX 函数的属性来判断该选项的状态。

< > delayed_durability_option ::=

控制提交的事务是完全持久事务还是延迟持久事务。

  • DISABLED

    SET DISABLED 之后的所有事务都是完全持久事务。 将忽略在原子块或 commit 语句中设置的任何持续性选项。

  • ALLOWED

    SET ALLOWED 之后的所有事务都是完全持久事务或都是延迟持久事务,具体取决于在原子块或 commit 语句中设置的持续性选项。

  • FORCED

    SET FORCED 之后的所有事务都是延迟持久事务。 将忽略在原子块或 commit 语句中设置的任何持续性选项。

< > PARAMETERIZATION_option ::=

控制参数化选项。

PARAMETERIZATION { SIMPLE |FORCED }

  • SIMPLE

    查询的参数化是根据数据库的默认行为进行的。

  • FORCED

    SQL Server 对数据库中的所有查询进行参数化。

该选项当前设置可通过检查 is_parameterization_forcedsys.databases 目录视图中的列来确定。

< > query_store_options ::=

  • ON | OFF | CLEAR [ ALL ]

    控制查询存储是否在此数据库中启用,同时控制是否删除查询存储的内容。

    • ON

      启用查询存储。 ON 是默认值。

    • OFF

      禁用查询存储。

      Note

      无法在 Microsoft Fabric 的 SQL 数据库中禁用查询存储。 执行 ALTER DATABASE [database] SET QUERY_STORE = OFF 返回警告 'QUERY_STORE=OFF' is not supported in this version of SQL Server.

    • CLEAR

      删除查询存储的内容。

OPERATION_MODE { READ_ONLY |READ_WRITE }

描述查询存储的操作模式。

READ_WRITE

查询存储将收集并保留查询计划和运行时执行统计信息。

READ_ONLY

可以从查询存储读取信息,但不会添加新信息。 如果查询存储的最大空间已用尽,则查询存储将其操作模式更改为 READ_ONLY

CLEANUP_POLICY

描述查询存储的数据保留策略。 STALE_QUERY_THRESHOLD_DAYS 确定查询信息保存在查询存储中的天数。 STALE_QUERY_THRESHOLD_DAYSbigint 类型。 默认值为 30

DATA_FLUSH_INTERVAL_SECONDS

确定写入到查询存储的数据保留到磁盘的频率。 为了优化性能,由查询存储收集的数据应以异步方式写入到磁盘。 使用此 DATA_FLUSH_INTERVAL_SECONDS 参数配置此异步传输的频率。 DATA_FLUSH_INTERVAL_SECONDSbigint 类型。 默认数值是 900 (15分钟)。

MAX_STORAGE_SIZE_MB

确定分配给查询存储的空间。 MAX_STORAGE_SIZE_MBbigint 类型。 目前,在 Fabric 中的 SQL 数据库中,默认限制为 100 MB。 允许的最大 MAX_STORAGE_SIZE_MB 值为 10,240 MB。

Note

没有严格执行 MAX_STORAGE_SIZE_MB 限制。 仅当查询存储将数据写入磁盘时才检查存储大小。 此间隔由 DATA_FLUSH_INTERVAL_SECONDS 选项或 Management Studio 查询存储对话框选项“数据刷新间隔”设置。 间隔时间默认值为 900 秒(或 15 分钟)。 如果查询存储违反了存储大小检查之间的 MAX_STORAGE_SIZE_MB 限制,则会转换为只读模式。 如果启用了 SIZE_BASED_CLEANUP_MODE,则也会触发强制实施 MAX_STORAGE_SIZE_MB 限制的清理机制。 清除足够的空间后,查询存储模式会自动切换回读写。

Important

如果你认为工作负载捕获需要超过 10 GB 的磁盘空间,你可能需要重新考虑并优化工作负载,以重用查询计划(例如使用 强制参数化,或调整查询存储配置)。 可以设置为QUERY_CAPTURE_MODECUSTOM对查询捕获策略进行其他控制。

INTERVAL_LENGTH_MINUTES

确定运行时执行统计数据聚合到查询存储中的时间间隔。 为了优化空间使用情况,将在固定时间窗口上聚合运行时统计信息存储中的运行时执行统计信息。 此固定时间范围是使用 INTERVAL_LENGTH_MINUTES 参数配置的。 INTERVAL_LENGTH_MINUTESbigint 类型。 默认值是 60

SIZE_BASED_CLEANUP_MODE = { AUTO |OFF }

控制当数据总量接近最大大小时是否自动激活清理。

  • OFF

    不会自动激活基于大小的清理。

  • AUTO

    当磁盘大小达到 90 个% max_storage_size_mb时,基于大小的清理会自动激活。 基于大小的清除首先会删除成本最低和最旧的查询。 它停在大约80% max_storage_size_mb。 这是默认的配置值。

SIZE_BASED_CLEANUP_MODE属于 恩瓦尔查尔类型。

QUERY_CAPTURE_MODE { ALL |AUTO |CUSTOM |NONE }

指定当前处于活动状态的查询捕获模式。 每个模式都定义了特定的查询捕获策略。

Note

当查询捕获模式设置为 ALLAUTOCUSTOM时,始终捕获存储过程内的游标、查询和本机编译查询。

  • ALL

    捕获所有查询。

  • AUTO

    根据执行计数和资源消耗捕获相关查询。 这是默认值。

  • NONE

    停止捕获新查询。 查询存储继续收集已捕获的查询的编译和运行时统计信息。 请谨慎使用此配置,因为可能会错过捕获重要查询。

  • CUSTOM

    允许控制 QUERY_CAPTURE_POLICY 选项。

QUERY_CAPTURE_MODEnvarchar 类型。

MAX_PLANS_PER_QUERY

定义为每个查询保留的最大计划数。 MAX_PLANS_PER_QUERY是输入 int。默认数值是 200

WAIT_STATS_CAPTURE_MODE { ON |OFF }

控制是否按查询捕获等待统计信息。

  • ON

    捕获每个查询的等待统计信息。 此值是默认配置值。

  • OFF

    不会捕获每个查询的等待统计信息。

< > query_capture_policy_option_list ::=

控制查询存储捕获策略选项。 除 STALE_CAPTURE_POLICY_THRESHOLD 外,这些选项定义 OR 条件,需要满足这些条件,才能在定义的“过时捕获策略阈值”中捕获查询。

STALE_CAPTURE_POLICY_THRESHOLD = 整数 { DAYS |时间 }

定义评估间隔时段以确定是否应捕获查询。 默认值为 1 天,可以设置为 1 小时到 7 天。 数字 是类型 为int

EXECUTION_COUNT = 整数

定义在评估期间执行查询的次数。 默认值为 30,这意味着对于默认的过时捕获策略阈值,查询必须在一天内至少执行 30 次才能在查询存储中保留。 EXECUTION_COUNT是类型 int

TOTAL_COMPILE_CPU_TIME_MS = 整数

定义查询在评估期间使用的总编译 CPU 时间。 默认值为 1000,这意味着对于默认的过时捕获策略阈值,查询必须在一天内在查询编译期间总共花费至少一秒钟的 CPU 时间,才能持久存储在查询存储中。 TOTAL_COMPILE_CPU_TIME_MS是类型 int

TOTAL_EXECUTION_CPU_TIME_MS = 整数

定义查询在评估期间使用的总执行 CPU 时间。 默认值为 100,这意味着对于默认的过时捕获策略阈值,查询必须在一天内在执行期间总共花费至少100 ms 的 CPU 时间,才能持久存储在查询存储中。 TOTAL_EXECUTION_CPU_TIME_MS是输入 int

MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT { ON |OFF }

  • ON

    当事务隔离级别设置为任何低于 SNAPSHOT 的隔离级别时,内存优化表中所有经过解释的 Transact-SQL 操作将在 SNAPSHOT 隔离下运行。 低于快照的隔离级别示例有 READ COMMITTED 或 READ UNCOMMITTED。 无论是在会话级别显式设置事务隔离级别还是隐式使用默认值,这些操作都会运行。

  • OFF

    不提升内存优化表中经过解释的 Transact-SQL 操作的事务隔离级别。

如果数据库处于 OFFLINE 状态,不能更改 MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT 的状态。

默认值为 OFF。

该选项当前设置可通过检查 is_memory_optimized_elevate_to_snapshot_onsys.databases 目录视图中的列来确定。

< > sql_option ::=

在数据库级别控制 ANSI 遵从选项。

ANSI_NULL_DEFAULT { ON |OFF }

确定列或 NULL默认值(NOT NULL)在语句中CREATE TABLE未显式定义可为 null 性的列或 ALTER TABLE CLR。 使用约束定义的列遵循约束规则,无论此设置是什么。

  • ON

    默认值为 NULL

  • OFF

    默认值为 NOT NULL

使用 SET 语句设置的连接级别设置将替代默认 ANSI_NULL_DEFAULT的数据库级设置。 默认情况下,ODBC 和 OLE DB 客户端向会话发出连接级SET语句设置ANSI_NULL_DEFAULTON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_NULL_DFLT_ON

对于 ANSI 兼容性,将数据库选项 ANSI_NULL_DEFAULT 设置为 ON 将数据库默认设置更改为 NULL

您可以通过查看is_ansi_null_default_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiNullDefaultDATABASEPROPERTYEX 函数的属性来确定状态。

ANSI_NULLS { 上 |不对 }

  • ON

    与 null 值的所有比较结果为 UNKNOWN

  • OFF

    非 Unicode 值与 null 值的比较计算 TRUE 结果为两个 NULL值。

Important

在 SQL Server 的未来版本中,始终为 ON, ANSI_NULLS 显式将选项设置为 OFF 的任何应用程序都会生成错误。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

使用 SET 语句设置的连接级别设置将替代默认 ANSI_NULLS数据库设置。 ODBC 和 OLE DB 客户端默认会为会话发出连接级别 SET 的语句设置 ANSI_NULLS 为 ON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_NULLS

Note

SET ANSI_NULLS 创建或更改计算列或索引视图上的索引时,还必须设置为 ON。

您可以通过查看is_ansi_nulls_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiNullsEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

ANSI_PADDING { 上 |不对 }

  • ON

    在进行转换之前,将字符串填充到同一长度。 插入 varcharnvarchar 数据类型前,也填充至相同长度。

  • OFF

    varcharnvarchar 列中插入字符值的后尾空白。 还会在二进制值中留下尾随零,插入 变分 列中。 不将值填充到列的长度。

    如果指定了 OFF,该设置只影响新列的定义。

Important

在 SQL Server 的未来版本中,始终为 ON, ANSI_PADDING 显式将选项设置为 OFF 的任何应用程序都会生成错误。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 我们建议你始终设置为 ANSI_PADDING 开启。 ANSI_PADDING 在计算列或索引视图上创建或操作索引时,必须为 ON。

允许零值的char(n二进制(n 列,当设置为ON ANSI_PADDING 时,会填充到列长度。 尾部空白和零在关闭时 ANSI_PADDING 会被裁剪。 不允许零的char(n二进制(n 列总是填充到列的长度。

使用 SET 语句设置的连接级别设置将替代默认 ANSI_PADDING的数据库级设置。 ODBC 和 OLE DB 客户端默认会为会话发出连接级别 SET 的语句设置 ANSI_PADDING 为 ON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_PADDING

您可以通过查看is_ansi_padding_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiPaddingEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

ANSI_WARNINGS { 上 |不对 }

  • ON

    当出现被零除这类情况时,将发出错误或警告。 当聚合函数中出现 Null 值时,也会发出错误和警告。

  • OFF

    出现被零除等情况时不会引发警告,而是返回 Null 值。

Note

在计算列或索引视图上创建或更改索引时,必须设置为 < a0/>。

使用 SET 语句设置的连接级别设置将替代默认 ANSI_WARNINGS数据库设置。 默认情况下,ODBC 和 OLE DB 客户端向会话发出连接级SET语句设置ANSI_WARNINGSON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_WARNINGS

您可以通过查看is_ansi_warnings_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiWarningsEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

ARITHABORT { 上 |不对 }

  • ON

    在查询执行过程中出现溢出或被零除等错误时,结束查询。

  • OFF

    在出现其中一个错误时显示警告消息。 即使显示警告,查询、批处理或事务也会继续进行处理,就像没有发生错误一样。

Note

SET SET ARITHABORT 在创建或更改计算列或索引视图索引时,必须设置为 ON。

您可以通过查看is_arithabort_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsArithmeticAbortEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

COMPATIBILITY_LEVEL = { 170 | 160 | 150 | 140 | 130 | 120 | 110 | 100 }

有关详细信息,请参阅 ALTER DATABASE 兼容性级别

CONCAT_NULL_YIELDS_NULL { 上 |不对 }

  • ON

    串联操作的结果是 NULL 当任一操作数为 NULL时。 例如,将字符串“This is”和 NULL 串联将得到 NULL 值,而不是值“This is”。

  • OFF

    Null 值被视为空字符串进行处理。

Note

CONCAT_NULL_YIELDS_NULL 在创建或更改计算列或索引视图索引时,必须设置为 ON。

在 SQL Server 的未来版本中,始终为 ON, CONCAT_NULL_YIELDS_NULL 显式将选项设置为 OFF 的任何应用程序都会生成错误。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

使用 SET 语句设置的连接级别设置将替代默认 CONCAT_NULL_YIELDS_NULL数据库设置。 默认情况下,ODBC 和 OLE DB 客户端在连接到 SQL Server 实例时会为会话发出连接级别SET的语句设置CONCAT_NULL_YIELDS_NULL为 ON。 有关详细信息,请参阅 SET CONCAT_NULL_YIELDS_NULL

您可以通过查看is_concat_null_yields_null_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsNullConcatDATABASEPROPERTYEX 函数的属性来确定状态。

NUMERIC_ROUNDABORT { 上 |不对 }

  • ON

    当表达式中发生精度损失时生成错误。

  • OFF

    精度的降低不会生成错误消息,会根据存储结果的列或变量的精度,将结果舍入。

Important

在计算列或索引视图上创建或更改索引时,必须设置为 < a0/>。

您可以在 is_numeric_roundabort_on 目录视图的列中确定该选项的状态。 你也可以通过检查 IsNumericRoundAbortEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

QUOTED_IDENTIFIER { 上 |不对 }

  • ON

    可以将分隔标识符包含在双引号中。

    所有用双引号分隔的字符串都被解释为对象标识符。 加引号的标识符不必遵守 Transact-SQL 标识符规则。 它们可以是关键字,并且可以包含 Transact-SQL 标识符中不允许的字符。 如果双引号 (") 是标识符的一部分,则可以用两个双引号 ("") 来表示它。

  • OFF

    标识符不能包含在引号中,而且必须遵循所有 Transact-SQL 标识符规则。 文字可以由单引号或双引号分隔。

SQL Server 还允许使用方括号([])分隔标识符。 无论设置如何 QUOTED_IDENTIFIER ,括号标识符都可以使用。 有关详细信息,请参阅 数据库标识符

创建表时,该 QUOTED_IDENTIFIER 选项始终作为 ON 存储在表的元数据中。 即使选项设置为 OFF 创建表时,该选项也会存储。

使用 SET 语句设置的连接级别设置将替代默认 QUOTED_IDENTIFIER数据库设置。 ODBC 和 OLE DB 客户端默认会发出连接级 SET 语句设置 QUOTED_IDENTIFIER 为 ON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET QUOTED_IDENTIFIER

您可以通过查看is_quoted_identifier_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsQuotedIdentifiersEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

RECURSIVE_TRIGGERS { ON |OFF }

  • ON

    允许递归激发 AFTER 触发器。

  • OFF

    您可以通过查看is_recursive_triggers_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsRecursiveTriggersEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

Note

仅当设置为 RECURSIVE_TRIGGERS..OFF 若要禁用间接递归触发,还必须将 nested triggers 服务器选项设置为 0。

您可以通过检查 is_recursive_triggers_onsys.databases 目录视图中的列或 IsRecursiveTriggersEnabledDATABASEPROPERTYEX 函数的属性来判断该选项的状态。

WITH <终止> ::=

指定当数据库从一种状态转换到另一种状态时,何时回滚未完成的事务。 如果省略终止子句,则如果数据库有任何锁,语句 ALTER DATABASE 将无限期等待。 只能指定一个终止子句,并遵循子 SET 句。

Note

并非所有数据库选项都使用子 WITH <termination> 句。 有关详细信息,请参阅 “设置”选项下的表。

  • ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE

    指定是在指定秒数之后回滚还是立即回滚。

  • NO_WAIT

    指定如果请求的数据库状态或选项更改无法立即完成,请求将失败。 立即完成意味着不会等待事务自己提交或回滚。

< > temporal_history_retention ::=

SET 选项

要获取数据库选项的当前设置,请使用 sys.databases 目录视图或 DATABASEPROPERTYEX

设置数据库选项后,新的设置将立即生效。

并非所有数据库选项都使用子 WITH <termination> 句,也可以与其他选项结合使用。 下表列出这些选项以及它们的选项和终止状态。

期权类别 可与其他选项一起指定 可以使用子 WITH <termination>
<auto_option> Yes No
<change_tracking_option> Yes Yes
<cursor_option> Yes No
<db_update_option> Yes Yes
<db_user_access_option> Yes Yes
<delayed_durability_option> Yes Yes
<parameterization_option> Yes Yes
ALLOW_SNAPSHOT_ISOLATION No No
READ_COMMITTED_SNAPSHOT No Yes
MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT Yes Yes
DATE_CORRELATION_OPTIMIZATION Yes Yes
<sql_option> Yes No

Examples

A. 将数据库设置为 READ_ONLY

将数据库或文件组 READ_ONLY 的状态更改为或 READ_WRITE 需要对数据库进行独占访问,可能需要几秒钟才能完成。 下面的示例将数据库设置为 RESTRICTED_USER 模式,以限制访问。 然后,该示例将 AdventureWorks2025 数据库的状态设置为 READ_ONLY ,并将对数据库的访问权返回给所有用户。

--Connect to [database_name];
GO
ALTER DATABASE [database_name]
SET RESTRICTED_USER;
GO
ALTER DATABASE [database_name]
SET READ_ONLY
--`SET READ_ONLY` command might take a few seconds to complete.
GO
ALTER DATABASE [database_name]
SET MULTI_USER;
GO

若要将数据库重新设置为读写模式,请执行以下操作:

--Connect to [database_name];
GO
ALTER DATABASE [database_name]
SET READ_WRITE
GO

要进行验证:

SELECT [name], user_access_desc, is_read_only FROM sys.databases
WHERE [name] = 'database_name'
GO

B. 对数据库启用快照隔离

下面的示例为 AdventureWorks2025 数据库启用快照隔离框架选项。

--Connect to [database_name]
GO
ALTER DATABASE [database_name]
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO

验证数据库中的 snapshot_isolation_framework 状态。

--Connect to [database_name]
SELECT name, snapshot_isolation_state,
    snapshot_isolation_state_desc AS description
FROM sys.databases
WHERE name = N'database_name';
GO

结果集显示快照隔离框架已启用。

name snapshot_isolation_state description
[database_name] 1 ON

C. 修改更改跟踪

下面的示例说明如何将保持期更改为 3 天。

--Connect to [database_name]
ALTER DATABASE [database_name]
SET CHANGE_TRACKING (CHANGE_RETENTION = 3 DAYS);

D. 使用自定义捕获策略选项修改查询存储

下面的示例启用查询存储并配置其参数。

--Connect to [database_name]
ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON,
      QUERY_CAPTURE_MODE = CUSTOM,
      QUERY_CAPTURE_POLICY = (
        STALE_CAPTURE_POLICY_THRESHOLD = 24 HOURS,
        EXECUTION_COUNT = 30,
        TOTAL_COMPILE_CPU_TIME_MS = 1000,
        TOTAL_EXECUTION_CPU_TIME_MS = 100
      )
    );

* Azure SQL 托管实例 *  

 

Azure SQL 托管实例

兼容性等级是 SET 选项,但具体描述在 ALTER DATABASE 兼容性等级中。

Note

许多数据库集选项可以通过语 SET 句 为当前会话配置,应用程序连接时通常会配置。 会话级 SET 选项将覆盖 ALTER DATABASE SET 值。 下面各节中所述的数据库选项是你可以为未明确提供其他 SET 选项值的会话设置的值。

Syntax

ALTER DATABASE { database_name | CURRENT }
SET
{
    <optionspec> [ ,...n ]
}
;

{ [ FOR SECONDARY ] SET <set_options> }

<optionspec> ::=
{
    <auto_option>
  | <change_tracking_option>
  | <cursor_option>
  | <db_encryption_option>
  | <delayed_durability_option>
  | <parameterization_option>
  | <query_store_options>
  | <snapshot_option>
  | <sql_option>
  | <termination>
  | <temporal_history_retention>
}
;
<auto_option> ::=
{
    AUTO_CREATE_STATISTICS { OFF | ON [ ( INCREMENTAL = { ON | OFF } ) ] }
  | AUTO_SHRINK { ON | OFF }
  | AUTO_UPDATE_STATISTICS { ON | OFF }
  | AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }
}

<automatic_tuning_option> ::=
{
    AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = { DEFAULT | ON | OFF } )
}

<change_tracking_option> ::=
{
    CHANGE_TRACKING
    {
       = OFF
     | = ON [ ( <change_tracking_option_list > [,...n] ) ]
     | ( <change_tracking_option_list> [,...n] )
    }
}

<change_tracking_option_list> ::=
   {
       AUTO_CLEANUP = { ON | OFF }
     | CHANGE_RETENTION = retention_period { DAYS | HOURS | MINUTES }
   }

<cursor_option> ::=
{
    CURSOR_CLOSE_ON_COMMIT { ON | OFF }
}

<db_encryption_option> ::=
  ENCRYPTION { ON | OFF }

<delayed_durability_option> ::=DELAYED_DURABILITY = { DISABLED | ALLOWED | FORCED }

<parameterization_option> ::=
  PARAMETERIZATION { SIMPLE | FORCED }

<query_store_options> ::=
{
  QUERY_STORE
  {
    = OFF
    | = ON [ ( <query_store_option_list> [,... n] ) ]
    | ( < query_store_option_list> [,... n] )
    | CLEAR [ ALL ]
  }
}

<query_store_option_list> ::=
{
  OPERATION_MODE = { READ_WRITE | READ_ONLY }
  | CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = number )
  | DATA_FLUSH_INTERVAL_SECONDS = number
  | MAX_STORAGE_SIZE_MB = number
  | INTERVAL_LENGTH_MINUTES = number
  | SIZE_BASED_CLEANUP_MODE = { AUTO | OFF }
  | QUERY_CAPTURE_MODE = { ALL | AUTO | CUSTOM | NONE }
  | MAX_PLANS_PER_QUERY = number
  | WAIT_STATS_CAPTURE_MODE = { ON | OFF }
  | QUERY_CAPTURE_POLICY = ( <query_capture_policy_option_list> [,...n] )
}

<query_capture_policy_option_list> ::=
{
    STALE_CAPTURE_POLICY_THRESHOLD = number { DAYS | HOURS }
    | EXECUTION_COUNT = number
    | TOTAL_COMPILE_CPU_TIME_MS = number
    | TOTAL_EXECUTION_CPU_TIME_MS = number
}

<snapshot_option> ::=
{
    ALLOW_SNAPSHOT_ISOLATION { ON | OFF }
  | READ_COMMITTED_SNAPSHOT { ON | OFF }
  | MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT { ON | OFF }
}
<sql_option> ::=
{
    ANSI_NULL_DEFAULT { ON | OFF }
  | ANSI_NULLS { ON | OFF }
  | ANSI_PADDING { ON | OFF }
  | ANSI_WARNINGS { ON | OFF }
  | ARITHABORT { ON | OFF }
  | COMPATIBILITY_LEVEL = { 170 | 160 | 150 | 140 | 130 | 120 | 110 | 100 }
  | CONCAT_NULL_YIELDS_NULL { ON | OFF }
  | NUMERIC_ROUNDABORT { ON | OFF }
  | QUOTED_IDENTIFIER { ON | OFF }
  | RECURSIVE_TRIGGERS { ON | OFF }
}

<temporal_history_retention>::= TEMPORAL_HISTORY_RETENTION { ON | OFF }

Arguments

database_name

要修改的数据库的名称。

CURRENT

CURRENT 运行当前数据库中的操作。 并不是所有上下文中的所有选项都支持 CURRENT。 如果 CURRENT 失败,则提供数据库名称。

中学阶段

指定次要副本的设置。 所有次要副本必须具有相同的值。 类似于 FOR SECONDARY(Transact-SQL) 的。ALTER DATABASE SCOPED CONFIGURATION

仅用于查询存储(QUERY_STORE)和自动优化(AUTOMATIC_TUNING)。

在 SQL Server Management Studio 版本 21 之前,语法有效, FOR SECONDARY 但 IntelliSense 无法识别。

< > auto_option ::=

控制自动选项。

AUTO_CREATE_STATISTICS { ON |OFF }

  • ON

    查询优化器根据需要在查询谓词中的单列上创建统计信息,以便改进查询计划和查询性能。 在查询优化器编译查询时创建这些单列统计信息。 这些单列统计信息只在尚不是现有统计信息对象的第一列的列上创建。

    默认值为 ON。 建议您对于大多数数据库使用默认设置。

  • OFF

    查询优化器在编译查询时不在查询谓词中的单列上创建统计信息。 将此选项设置为 OFF 可能导致并非最佳的查询计划以及查询性能下降。

    您可以通过查看is_auto_create_stats_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAutoCreateStatisticsDATABASEPROPERTYEX 函数的属性来确定状态。

    更多信息请参见 统计学中的“统计选项”部分。

INCREMENTAL = ON |OFF

将 AUTO_CREATE_STATISTICS 设置为 ON,并将 INCREMENTAL 设置为 ON。 只要支持增量统计信息,此设置便会自动创建增量统计信息。 默认值为 OFF。 有关详细信息,请参阅 CREATE STATISTICS

AUTO_SHRINK { ON |OFF }

  • ON

    数据库文件是定期收缩的候选项。 除非有特定要求,否则不要将AUTO_SHRINK数据库选项设置为 ON。 有关详细信息,请参阅收缩数据库

    数据文件和日志文件都可以自动收缩。 只有在将数据库设置为 SIMPLE 恢复模式时,或备份事务日志时,AUTO_SHRINK 才可减小事务日志的大小。 当设置为 OFF 时,在定期检查未使用空间的过程中,数据库文件不自动收缩。

    当文件中超过百分之二十五的部分包含未使用的空间时,AUTO_SHRINK 选项将导致收缩文件。 该选项会导致文件收缩为两种大小之一。 它会收缩为其中较大的大小:

    • 其中 25% 的文件不包含任何内容时的大小
    • 文件创建时的大小

    不能收缩只读数据库。

  • OFF

    在定期检查未使用的空间期间,数据库文件不会自动收缩。

您可以通过查看is_auto_shrink_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAutoShrinkDATABASEPROPERTYEX 函数的属性来确定状态。

Note

AUTO_SHRINK 选项在包含数据库中不可用。

AUTO_UPDATE_STATISTICS { ON |OFF }

  • ON

    指定在统计信息由查询使用并且可能过期时,查询优化器更新统计信息。 统计信息将在插入、更新、删除或合并操作更改表或索引视图中的数据分布后过期。 查询优化器通过计算自最后统计信息更新后数据修改的次数并且将这一修改次数与某一阈值进行比较,确定统计信息何时可能过期。 该阈值基于表中或索引视图中的行数。

    查询优化器在编译查询和运行缓存查询计划前,检查是否存在过期的统计信息。 查询优化器使用查询谓词中的列、表和索引视图确定哪些统计信息可能过期。 查询优化器在编译查询之前确定此信息。 在运行缓存查询计划前,数据库引擎 确认该查询计划引用最新的统计信息。

    AUTO_UPDATE_STATISTICS选项适用于为索引创建的统计数据、查询谓词中的单列统计数据,以及使用该 CREATE STATISTICS 语句创建的统计数据。 此选项也适用于筛选的统计信息。

    默认值为 ON。 建议您对于大多数数据库使用默认设置。

    使用 AUTO_UPDATE_STATISTICS_ASYNC 选项可以指定统计信息是同步更新还是异步更新。

  • OFF

    指定在查询使用统计信息时,查询优化器不更新统计信息。 查询优化器在统计信息可能过期时,也不会更新统计信息。 将此选项设置为 OFF 可能导致并非最佳的查询计划以及查询性能下降。

您可以通过查看is_auto_update_stats_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAutoUpdateStatisticsDATABASEPROPERTYEX 函数的属性来确定状态。

更多信息请参见 统计学中的“使用数据库范围统计选项”部分。

AUTO_UPDATE_STATISTICS_ASYNC { ON |OFF }

  • ON

    指定针对 AUTO_UPDATE_STATISTICS 选项的统计信息更新是异步的。 查询优化器不等待统计信息更新完成即编译查询。

    除非已将 AUTO_UPDATE_STATISTICS 设置为 ON,否则将此选项设置为 ON 不会产生任何影响。

    默认情况下,AUTO_UPDATE_STATISTICS_ASYNC 选项设置为 OFF,并且查询优化器以同步方式更新统计信息。

  • OFF

    指定针对 AUTO_UPDATE_STATISTICS 选项的统计信息更新是同步的。 查询优化器在编译查询前等待统计信息更新完成。

    除非已将 AUTO_UPDATE_STATISTICS 设置为 ON,否则将此选项设置为 OFF 不会产生任何影响。

您可以通过查看is_auto_update_stats_async_onsys.databases目录视图中的该列来确定该选项的状态。

如需了解更多关于何时使用同步或异步统计更新的信息,请参见 统计学中的“使用数据库范围统计选项”部分。

< > automatic_tuning_option ::=

控制 自动调校选项。

FORCE_LAST_GOOD_PLAN = { DEFAULT |ON中 |不对 }

启用或禁用 FORCE_LAST_GOOD_PLAN自动调谐 选项。

  • DEFAULT

    Azure SQL 托管实例的默认值为 ON。

  • ON

    数据库引擎在新查询计划导致性能回归的 Transact-SQL 查询中自动强制执行上一个已知完好的计划。 数据库引擎通过该强制计划持续监视 Transact-SQL 查询的查询性能。 如果性能提升,数据库引擎会继续使用上一个已知的良好计划。 如果未检测到性能提升,数据库引擎将生成新的查询计划。 如果查询存储未启用或未处于 读写 模式,则该语句失败。 这是默认值。

  • OFF

    数据库引擎报告了由查询计划变更引起的潜在查询性能回归 sys.dm_db_tuning_recommendations 。 但是,这些建议不会自动应用。 用户可以通过应用视图中显示的 Transact-SQL 脚本来监视正在应用的建议和修复已识别的问题。

< > change_tracking_option ::=

控制更改跟踪选项。 可以启用更改跟踪、设置选项、更改选项以及禁用更改跟踪。 示例请参见本文后面的 示例 部分。

  • ON

    对数据库启用更改跟踪。 启用更改跟踪时,还可以设置 AUTO CLEANUP 和 CHANGE RETENTION 选项。

AUTO_CLEANUP = { ON |OFF }

  • ON

    在经过指定的保持期后会自动删除更改跟踪信息。

  • OFF

    不会从数据库中删除更改跟踪数据。

CHANGE_RETENTION = retention_period { 天 |营业时间 |会议记录}

指定在数据库中保留更改跟踪信息的最短期限。 只有在 AUTO_CLEANUP 值为 ON 时,才会删除数据。

retention_period 是一个整数,表示保留期的数值成分。

默认的保留期限是 2天。 最短保持期为 1 分钟。 默认的保留类型是 天数

  • OFF

    对数据库禁用更改跟踪。 先对所有表禁用更改跟踪,然后才能对数据库禁用更改跟踪。

< > cursor_option ::=

控制游标选项。

CURSOR_CLOSE_ON_COMMIT { 上 |不对 }

  • ON

    在提交或回滚事务时打开的所有游标都会关闭。

  • OFF

    在提交事务时游标保持打开状态;回滚事务则会关闭除了定义为 INSENSITIVE 或 STATIC 的游标以外的所有游标。

使用 SET 语句设置的连接级别设置将替代默认 CURSOR_CLOSE_ON_COMMIT数据库设置。 ODBC 和 OLE DB 客户端默认会为会话发出连接级别 SET 的语句设置 CURSOR_CLOSE_ON_COMMIT 为 OFF。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET CURSOR_CLOSE_ON_COMMIT

您可以通过查看 is_cursor_close_on_commit_onsys.databases 目录视图中的列或 DATABASEPROPERTYEX 函数中的 IsCloseCursorsOnCommitEnabled 属性来判断该选项的状态。 该游标仅在断开连接时才被隐式释放。 更多信息请参见 “声明CURSOR”

< > db_encryption_option ::=

控制数据库加密状态。

ENCRYPTION { ON |OFF }

将数据库设置为加密的 (ON) 或未加密的 (OFF)。 有关数据库加密的详细信息,请参阅 透明数据加密(TDE),以及 azure SQL 数据库、Azure SQL 托管实例和 Azure Synapse Analytics的 透明数据加密。

在数据库级别启用加密时,将对所有文件组进行加密。 任何新文件组都继承加密属性。 如果数据库中的任何文件组都设置为只读,则数据库加密操作将失败。

你可以通过 sys.dm_database_encryption_keys 动态管理视图查看数据库的加密状态。

< > delayed_durability_option ::=

控制提交的事务是完全持久事务还是延迟持久事务。

  • DISABLED

    SET DISABLED 之后的所有事务都是完全持久事务。 将忽略在原子块或 commit 语句中设置的任何持续性选项。

  • ALLOWED

    SET ALLOWED 之后的所有事务都是完全持久事务或都是延迟持久事务,具体取决于在原子块或 commit 语句中设置的持续性选项。

  • FORCED

    SET FORCED 之后的所有事务都是延迟持久事务。 将忽略在原子块或 commit 语句中设置的任何持续性选项。

< > PARAMETERIZATION_option ::=

控制参数化选项。

PARAMETERIZATION { SIMPLE |FORCED }

  • SIMPLE

    查询的参数化是根据数据库的默认行为进行的。

  • FORCED

SQL Server 对数据库中的所有查询进行参数化。

该选项当前设置可通过检查 is_parameterization_forcedsys.databases 目录视图中的列来确定。

< > query_store_options ::=

  • ON | OFF | CLEAR [ ALL ]

    控制查询存储是否在此数据库中启用,同时控制是否删除查询存储的内容。

    • ON

      启用查询存储。

    • OFF

      禁用查询存储。 这是默认值。

    • CLEAR

      删除查询存储的内容。

OPERATION_MODE { READ_ONLY |READ_WRITE }

描述查询存储的操作模式。

READ_WRITE

查询存储将收集并保留查询计划和运行时执行统计信息。

READ_ONLY

可以从查询存储读取信息,但不会添加新信息。 如果查询存储的最大空间已用尽,则查询存储将其操作模式更改为 READ_ONLY

CLEANUP_POLICY

描述查询存储的数据保留策略。 STALE_QUERY_THRESHOLD_DAYS 可确定查询信息在查询存储中保留的天数。 STALE_QUERY_THRESHOLD_DAYS是 双倍型。 默认值为 30。 对于 SQL 数据库基础版,默认是 7 天。

DATA_FLUSH_INTERVAL_SECONDS

确定写入到查询存储的数据保留到磁盘的频率。 为了优化性能,由查询存储收集的数据应以异步方式写入到磁盘。 通过使用 DATA_FLUSH_INTERVAL_SECONDS 参数,配置此异步传输发生的频率。 DATA_FLUSH_INTERVAL_SECONDS是 Biint类型。 默认数值是 900 (15分钟)。

MAX_STORAGE_SIZE_MB

确定分配给查询存储的空间。 MAX_STORAGE_SIZE_MBbigint 类型。 默认值是 100 MB

没有严格执行 MAX_STORAGE_SIZE_MB 限制。 仅当查询存储将数据写入磁盘时才检查存储大小。 此间隔由 DATA_FLUSH_INTERVAL_SECONDS 选项或 Management Studio 查询存储对话框选项“数据刷新间隔”设置。 间隔时间默认值为 900 秒(或 15 分钟)。

如果查询存储违反了存储大小检查之间的 MAX_STORAGE_SIZE_MB 限制,则会转换为只读模式。 如果启用了 SIZE_BASED_CLEANUP_MODE,则也会触发强制实施 MAX_STORAGE_SIZE_MB 限制的清理机制。

清除足够的空间后,查询存储模式会自动切换回读写。

Important

  • 如果你认为工作负载捕获需要超过 10 GB 的磁盘空间,你可能需要重新考虑并优化工作负载,以重用查询计划(例如使用 强制参数化,或调整查询存储配置)。
  • 从 SQL Server 2019 (15.x) 开始,在 Azure SQL 数据库 中,可以将 QUERY_CAPTURE_MODE 设置为“CUSTOM”,以进一步控制查询捕获策略。
  • Azure SQL 托管实例上的 MAX_STORAGE_SIZE_MB 设置限制为 10,240 MB。

INTERVAL_LENGTH_MINUTES

确定运行时执行统计数据聚合到查询存储中的时间间隔。 为了优化空间使用情况,将在固定时间窗口上聚合运行时统计信息存储中的运行时执行统计信息。 此固定时间窗口使用 INTERVAL_LENGTH_MINUTES 参数进行配置。 INTERVAL_LENGTH_MINUTES是 双型。 默认值是 60

SIZE_BASED_CLEANUP_MODE = { AUTO |OFF }

控制当数据总量接近最大大小时是否自动激活清理。

  • OFF

    不会自动激活基于大小的清理。

  • AUTO

    当磁盘大小达到 90 个% max_storage_size_mb时,基于大小的清理会自动激活。 基于大小的清除首先会删除成本最低和最旧的查询。 它停在大约80% max_storage_size_mb。 这是默认的配置值。

SIZE_BASED_CLEANUP_MODE属于 恩瓦尔查尔类型。

QUERY_CAPTURE_MODE { ALL |AUTO |CUSTOM |NONE }

指定当前处于活动状态的查询捕获模式。

  • ALL

    捕获所有查询。

  • AUTO

    根据执行计数和资源消耗捕获相关查询。 这是 Azure SQL 数据库 的默认配置值。

  • NONE

    停止捕获新查询。 查询存储继续收集已捕获的查询的编译和运行时统计信息。 请谨慎使用此配置,因为可能会错过捕获重要查询。

QUERY_CAPTURE_MODE是 Nvarchar类型。

MAX_PLANS_PER_QUERY

一个整数,表示为每个查询保留的最大计划数。 MAX_PLANS_PER_QUERY是输入 int。默认数值是 200

WAIT_STATS_CAPTURE_MODE { ON |OFF }

控制是否按查询捕获等待统计信息。

  • ON

    捕获每个查询的等待统计信息。 此值是默认配置值。

  • OFF

    不会捕获每个查询的等待统计信息。

< > query_capture_policy_option_list ::=

控制查询存储捕获策略选项。 除 STALE_CAPTURE_POLICY_THRESHOLD 外,这些选项定义 OR 条件,需要满足这些条件,才能在定义的“过时捕获策略阈值”中捕获查询。

STALE_CAPTURE_POLICY_THRESHOLD = 整数 { DAYS |时间 }

定义评估间隔时段以确定是否应捕获查询。 默认值为 1 天,可以设置为 1 小时到 7 天。

EXECUTION_COUNT = 整数

定义在评估期间执行查询的次数。 默认值为 30,这意味着对于默认的过时捕获策略阈值,查询必须在一天内至少执行 30 次才能在查询存储中保留。 EXECUTION_COUNT是类型 int

TOTAL_COMPILE_CPU_TIME_MS = 整数

定义查询在评估期间使用的总编译 CPU 时间。 默认值为 1000,这意味着对于默认的过时捕获策略阈值,查询必须在一天内在查询编译期间总共花费至少一秒钟的 CPU 时间,才能持久存储在查询存储中。 TOTAL_COMPILE_CPU_TIME_MS是类型 int

TOTAL_EXECUTION_CPU_TIME_MS = 整数

定义查询在评估期间使用的总执行 CPU 时间。 默认值为 100,这意味着对于默认的过时捕获策略阈值,查询必须在一天内在执行期间总共花费至少 100 ms 的 CPU 时间,才能持久存储在查询存储中。 TOTAL_EXECUTION_CPU_TIME_MS是输入 int

< > snapshot_option ::=

确定事务隔离级别。

ALLOW_SNAPSHOT_ISOLATION { ON |OFF }

  • ON

    在数据库级别启用快照选项。 启用该选项后,DML 语句将开始生成行版本,即使没有事务使用快照隔离也是如此。 启用此选项后,事务即可指定 SNAPSHOT 事务隔离级别。 当事务在 SNAPSHOT 隔离级别运行时,所有的语句都将数据快照视为位于事务的开头。 如果在 SNAPSHOT 隔离级别运行的事务要访问多个数据库中的数据,则必须将所有数据库中的 ALLOW_SNAPSHOT_ISOLATION 都设置为 ON,或者事务中的每个语句都必须对 FROM 子句中的所有引用(引用 ALLOW_SNAPSHOT_ISOLATION 设置为 OFF 的数据库中的表)使用锁提示。

  • OFF

    在数据库级别禁用快照选项。 事务不能指定 SNAPSHOT 事务隔离级别。

将ALLOW_SNAPSHOT_ISOLATION设置为新状态(从 ON 到 OFF 或从 OFF 设置为 ON), ALTER DATABASE 在提交数据库中的所有现有事务之前,不会向调用方返回控制权。 如果数据库已在语句中指定的 ALTER DATABASE 状态,则控件会立即返回到调用方。 ALTER DATABASE如果语句没有快速返回,请使用sys.dm_tran_active_snapshot_database_transactions来确定是否存在长时间运行的事务。 如果 ALTER DATABASE 语句被取消,数据库将保持启动时 ALTER DATABASE 的状态。 sys.databases 目录视图显示数据库中快照隔离事务的状态。 如果 snapshot_isolation_state_desc = IN_TRANSITION_TO_ON,则语句 ALTER DATABASE ... ALLOW_SNAPSHOT_ISOLATION OFF 暂停 6 秒并重试操作。

如果数据库处于 OFFLINE 状态,则不能更改 ALLOW_SNAPSHOT_ISOLATION 的状态。

可以为 mastermodelmsdbtempdb 数据库更改 ALLOW_SNAPSHOT_ISOLATION 设置。 如果为 tempdb 更改该设置,则每次停止并重新启动数据库引擎实例时会保留该设置。 如果为 model 系统数据库更改该设置,则该设置将成为除 tempdb 以外的所有新建数据库的默认设置。

对于 mastermsdb 数据库,默认情况下该选项设置为 ON。

该选项当前设置可通过检查 snapshot_isolation_statesys.databases 目录视图中的列来确定。

READ_COMMITTED_SNAPSHOT { ON |OFF }

  • ON

    在数据库级别启用 Read-Committed Snapshot 选项。 启用该选项后,DML 语句将开始生成行版本,即使没有事务使用快照隔离也是如此。 启用此选项后,指定 READ COMMITTED 隔离级别的事务将使用行版本控制而不是锁定。 当事务在 READ COMMITTED 隔离级别运行时,所有的语句都将数据快照视为位于语句的开头。

  • OFF

    在数据库级别禁用 Read-Committed Snapshot 选项。 指定 READ COMMITTED 隔离级别的事务使用锁定。

要将READ_COMMITTED_SNAPSHOT设置为开或关闭,必须只有运行该 ALTER DATABASE 命令的连接,数据库中没有任何活跃连接。 但是,数据库不必一定要处于单用户模式下。 当数据库处于 OFFLINE 状态时,不能更改此选项的状态。

对于 mastertempdbmsdb 系统数据库,不能将 READ_COMMITTED_SNAPSHOT 设置为 ON。 如果为 model 系统数据库更改该设置,则该设置将成为除 tempdb 以外的所有新建数据库的默认设置。

该选项当前设置可通过检查 is_read_committed_snapshot_onsys.databases 目录视图中的列来确定。

Warning

当创建的表中 DURABILITY = SCHEMA_ONLY,并且随后用 ALTER DATABASEREAD_COMMITTED_SNAPSHOT 进行更改时,表中的数据会丢失。

MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT { ON |OFF }

  • ON

    当事务隔离级别设置为任何低于 SNAPSHOT 的隔离级别时,内存优化表中所有经过解释的 Transact-SQL 操作将在 SNAPSHOT 隔离下运行。 低于快照的隔离级别示例有 READ COMMITTED 或 READ UNCOMMITTED。 无论是在会话级别显式设置事务隔离级别还是隐式使用默认值,这些操作都会运行。

  • OFF

    不提升内存优化表中经过解释的 Transact-SQL 操作的事务隔离级别。

如果数据库处于 OFFLINE 状态,不能更改 MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT 的状态。

默认值为 OFF。

该选项当前设置可通过检查 is_memory_optimized_elevate_to_snapshot_onsys.databases 目录视图中的列来确定。

< > sql_option ::=

在数据库级别控制 ANSI 遵从选项。

ANSI_NULL_DEFAULT { ON |OFF }

确定列或 NULL默认值(NOT NULL)在语句中CREATE TABLE未显式定义可为 null 性的列或 ALTER TABLE CLR。 使用约束定义的列遵循约束规则,无论此设置是什么。

  • ON

    默认值为 NULL

  • OFF

    默认值为 NOT NULL

使用 SET 语句设置的连接级别设置将替代默认 ANSI_NULL_DEFAULT的数据库级设置。 默认情况下,ODBC 和 OLE DB 客户端向会话发出连接级SET语句设置ANSI_NULL_DEFAULTON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_NULL_DFLT_ON

对于 ANSI 兼容性,将数据库选项 ANSI_NULL_DEFAULT 设置为 ON 将数据库默认设置更改为 NULL

您可以通过查看is_ansi_null_default_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiNullDefaultDATABASEPROPERTYEX 函数的属性来确定状态。

ANSI_NULLS { 上 |不对 }

  • ON

    与 null 值的所有比较结果为 UNKNOWN

  • OFF

    非 Unicode 值与 null 值的比较计算 TRUE 结果为两个 NULL值。

Important

在 SQL Server 的未来版本中, ANSI_NULLS 始终为 ON,任何显式设置选项 OFF 的应用程序都将生成错误。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

使用 SET 语句设置的连接级别设置将替代默认 ANSI_NULLS数据库设置。 默认情况下,ODBC 和 OLE DB 客户端向会话发出连接级SET语句设置ANSI_NULLSON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_NULLS

Important

SET ANSI_NULLS 在计算列或索引视图上创建或更改索引时,还必须设置为 ON 该设置。

您可以通过查看is_ansi_nulls_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiNullsEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

ANSI_PADDING { 上 |不对 }

  • ON

    在进行转换之前,将字符串填充到同一长度。 插入 varcharnvarchar 数据类型前,也填充至相同长度。

  • OFF

    varcharnvarchar 列中插入字符值的后尾空白。 还会在二进制值中留下尾随零,插入 变分 列中。 不将值填充到列的长度。

    如果指定了 OFF,该设置只影响新列的定义。

Important

在 SQL Server 的未来版本中,始终为 ON, ANSI_PADDING 显式将选项设置为 OFF 的任何应用程序都会生成错误。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 我们建议你始终设置为 ANSI_PADDING 开启。 ANSI_PADDING 在计算列或索引视图上创建或操作索引时,必须为 ON。

允许零值的char(n二进制(n 列,当设置为ON ANSI_PADDING 时,会填充到列长度。 尾部空白和零在关闭时 ANSI_PADDING 会被裁剪。 不允许零的char(n二进制(n 列总是填充到列的长度。

使用 SET 语句设置的连接级别设置将替代默认 ANSI_PADDING的数据库级设置。 ODBC 和 OLE DB 客户端默认会为会话发出连接级别 SET 的语句设置 ANSI_PADDING 为 ON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_PADDING

您可以通过查看is_ansi_padding_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiPaddingEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

ANSI_WARNINGS { 上 |不对 }

  • ON

    当出现被零除这类情况时,将发出错误或警告。 当聚合函数中出现 Null 值时,也会发出错误和警告。

  • OFF

    出现被零除等情况时不会引发警告,而是返回 Null 值。

Important

在计算列或索引视图上创建或更改索引时,必须设置为 < a0/>。

使用 SET 语句设置的连接级别设置将替代默认 ANSI_WARNINGS数据库设置。 默认情况下,ODBC 和 OLE DB 客户端向会话发出连接级SET语句设置ANSI_WARNINGSON。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET ANSI_WARNINGS

您可以通过查看is_ansi_warnings_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAnsiWarningsEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

ARITHABORT { 上 |不对 }

  • ON

    在查询执行过程中出现溢出或被零除等错误时,结束查询。

  • OFF

    在出现其中一个错误时显示警告消息。 即使显示警告,查询、批处理或事务也会继续进行处理,就像没有发生错误一样。

Important

SET ARITHABORT 在创建或更改计算列或索引视图上的索引时,必须启用 (ON)。

您可以通过查看is_arithabort_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsArithmeticAbortEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

COMPATIBILITY_LEVEL = { 170 | 160 | 150 | 140 | 130 | 120 | 110 | 100 }

有关详细信息,请参阅 ALTER DATABASE 兼容性级别

CONCAT_NULL_YIELDS_NULL { 上 |不对 }

  • ON

    串联操作的结果是 NULL 当任一操作数为 NULL时。 例如,将字符串“This is”和 NULL 串联将得到 NULL 值,而不是值“This is”。

  • OFF

    Null 值被视为空字符串进行处理。

Important

CONCAT_NULL_YIELDS_NULL 在创建或更改计算列或索引视图索引时,必须设置为 ON。

在 SQL Server 的未来版本中,始终为 ON, CONCAT_NULL_YIELDS_NULL 显式将选项设置为 OFF 的任何应用程序都会生成错误。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

使用 SET 语句设置的连接级别设置将替代默认 CONCAT_NULL_YIELDS_NULL数据库设置。 默认情况下,ODBC 和 OLE DB 客户端在连接到 SQL Server 实例时会为会话发出连接级别SET的语句设置CONCAT_NULL_YIELDS_NULL为 ON。 有关详细信息,请参阅 SET CONCAT_NULL_YIELDS_NULL

您可以通过查看is_concat_null_yields_null_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsNullConcatDATABASEPROPERTYEX 函数的属性来确定状态。

NUMERIC_ROUNDABORT { 上 |不对 }

  • ON

    当表达式中发生精度损失时生成错误。

  • OFF

    精度的降低不会生成错误消息,会根据存储结果的列或变量的精度,将结果舍入。

Important

在计算列或索引视图上创建或更改索引时,必须设置为 < a0/>。

你可以在 is_numeric_roundabort_onsys.databases 目录视图的列中确定该选项的状态。 你也可以通过检查 IsNumericRoundAbortEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

QUOTED_IDENTIFIER { 上 |不对 }

  • ON

    可以将分隔标识符包含在双引号中。

    所有用双引号分隔的字符串都被解释为对象标识符。 加引号的标识符不必遵守 Transact-SQL 标识符规则。 它们可以是关键字,并且可以包含 Transact-SQL 标识符中不允许的字符。 如果双引号 (") 是标识符的一部分,则可以用两个双引号 ("") 来表示它。

  • OFF

    标识符不能包含在引号中,而且必须遵循所有 Transact-SQL 标识符规则。 文字可以由单引号或双引号分隔。

SQL Server 还允许使用方括号([])分隔标识符。 无论设置如何 QUOTED_IDENTIFIER ,括号标识符都可以使用。 有关详细信息,请参阅 数据库标识符

创建表时,该 QUOTED_IDENTIFIER 选项始终作为 ON 存储在表的元数据中。 即使选项设置为 OFF 创建表时,该选项也会存储。

使用 SET 语句设置的连接级别设置将替代默认 QUOTED_IDENTIFIER数据库设置。 默认情况下,ODBC 和 OLE DB 客户端向连接级别SET语句设置QUOTED_IDENTIFIERON发出设置。 客户端在连接到 SQL Server 的实例时运行该语句。 有关详细信息,请参阅 SET QUOTED_IDENTIFIER

您可以通过查看is_quoted_identifier_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsQuotedIdentifiersEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

RECURSIVE_TRIGGERS { ON |OFF }

  • ON

    允许递归激发 AFTER 触发器。

  • OFF

    您可以通过查看is_recursive_triggers_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsRecursiveTriggersEnabledDATABASEPROPERTYEX 函数的属性来确定状态。

    Note

    仅当设置为 RECURSIVE_TRIGGERS..OFF 若要禁用间接递归触发,还必须将 nested triggers 服务器选项设置为 0。

您可以通过检查 is_recursive_triggers_onsys.databases 目录视图中的列或 IsRecursiveTriggersEnabledDATABASEPROPERTYEX 函数的属性来判断该选项的状态。

WITH <终止> ::=

指定当数据库从一种状态转换到另一种状态时,何时回滚未完成的事务。 如果省略终止子句,则如果数据库有任何锁,语句 ALTER DATABASE 将无限期等待。 只能指定一个终止子句,并遵循子 SET 句。

Note

并非所有数据库选项都使用子 WITH <termination> 句。

  • ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE

    指定是在指定秒数之后回滚还是立即回滚。

  • NO_WAIT

    指定如果请求的数据库状态或选项更改无法立即完成,请求将失败。 立即完成意味着不会等待事务自己提交或回滚。

< > temporal_history_retention ::=

SET 选项

要获取数据库选项的当前设置,请使用 sys.databases 目录视图或 DATABASEPROPERTYEX

设置数据库选项后,新的设置将立即生效。

可以为所有新建数据库更改任意一个数据库选项的默认值。 为此,请更改 model 系统数据库中的相应数据库选项。

Examples

A. 对数据库启用快照隔离

下面的示例为 AdventureWorks2025 数据库启用快照隔离框架选项。

USE master;
GO
ALTER DATABASE [database_name]
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
-- Check the state of the snapshot_isolation_framework
-- in the database.
SELECT name, snapshot_isolation_state,
    snapshot_isolation_state_desc AS description
FROM sys.databases
WHERE name = N'[database_name]';
GO

结果集显示快照隔离框架已启用。

name snapshot_isolation_state description
[database_name] 1 ON

B. 启用、修改或禁用更改跟踪

下面的示例对 AdventureWorks2025 数据库启用更改跟踪并将保持期设置为 2 天。

ALTER DATABASE [database_name]
SET CHANGE_TRACKING = ON
(AUTO_CLEANUP = ON, CHANGE_RETENTION = 2 DAYS);

下面的示例说明如何将保持期更改为 3 天。

ALTER DATABASE [database_name]
SET CHANGE_TRACKING (CHANGE_RETENTION = 3 DAYS);

下面的示例说明如何对 AdventureWorks2025 数据库禁用更改跟踪。

ALTER DATABASE [database_name]
SET CHANGE_TRACKING = OFF;

C. 启用查询存储

下面的示例启用查询存储并配置查询存储参数。

ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      QUERY_CAPTURE_MODE = AUTO,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60
    );

D. 使用等待统计信息启用查询存储

下面的示例启用查询存储并配置其参数。

ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON
    );

E. 使用自定义捕获策略选项启用查询存储

下面的示例启用查询存储并配置其参数。

ALTER DATABASE [database_name]
SET QUERY_STORE = ON
    (
      OPERATION_MODE = READ_WRITE,
      CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 90 ),
      DATA_FLUSH_INTERVAL_SECONDS = 900,
      MAX_STORAGE_SIZE_MB = 1024,
      INTERVAL_LENGTH_MINUTES = 60,
      SIZE_BASED_CLEANUP_MODE = AUTO,
      MAX_PLANS_PER_QUERY = 200,
      WAIT_STATS_CAPTURE_MODE = ON,
      QUERY_CAPTURE_MODE = CUSTOM,
      QUERY_CAPTURE_POLICY = (
        STALE_CAPTURE_POLICY_THRESHOLD = 24 HOURS,
        EXECUTION_COUNT = 30,
        TOTAL_COMPILE_CPU_TIME_MS = 1000,
        TOTAL_EXECUTION_CPU_TIME_MS = 100
      )
    );

* Azure Synapse
Analytics *  

 

Azure Synapse Analytics

Tip

Microsoft Fabric Data Warehouse是数据湖基础上的企业规模关系仓库,具有未来就绪的体系结构、内置 AI 和新功能。 如果不熟悉数据仓库,请从Fabric Data Warehouse开始。 现有的指定 SQL 池工作负荷可以升级到 Fabric,以跨数据科学、实时分析和报告访问新功能。

Syntax

ALTER DATABASE { database_name }
SET
{
    <optionspec> [ ,...n ]
}
;

<option_spec>::=
{
    <auto_option>
  | <db_encryption_option>
  | <query_store_options>
  | <result_set_caching>
  | <snapshot_option>
}
;

<auto_option> ::=
{
    AUTO_CREATE_STATISTICS { OFF | ON }
}

<db_encryption_option> ::=
{
    ENCRYPTION { ON | OFF }
}

<query_store_option> ::=
{
    QUERY_STORE { OFF | ON }
}

<result_set_caching_option> ::=
{
    RESULT_SET_CACHING { ON | OFF }
}

<snapshot_option> ::=
{
    READ_COMMITTED_SNAPSHOT { ON | OFF }
}

Arguments

database_name

要修改的数据库的名称。

< > auto_option ::=

控制自动选项。

AUTO_CREATE_STATISTICS { ON |OFF }

  • ON

    查询优化器根据需要在查询谓词中的单列上创建统计信息,以便改进查询计划和查询性能。 在查询优化器编译查询时创建这些单列统计信息。 这些单列统计信息只在尚不是现有统计信息对象的第一列的列上创建。

    默认值为 ON。 建议您对于大多数数据库使用默认设置。

  • OFF

    查询优化器在编译查询时不在查询谓词中的单列上创建统计信息。 将此选项设置为 OFF 可能导致并非最佳的查询计划以及查询性能下降。

连接到用户数据库时,必须运行此命令。

您可以通过查看is_auto_create_stats_onsys.databases目录视图中的该列来确定该选项的状态。 你也可以通过检查 IsAutoCreateStatisticsDATABASEPROPERTYEX 函数的属性来确定状态。

更多信息请参见 统计学中的“使用数据库范围统计选项”部分。

< > db_encryption_option ::=

控制数据库加密状态。

ENCRYPTION { ON |OFF }

  • ON

    设置要加密的数据库。

  • OFF

    将数据库设置为不加密。

有关数据库加密的详细信息,请参阅 透明数据加密(TDE),以及 azure SQL 数据库、Azure SQL 托管实例和 Azure Synapse Analytics的 透明数据加密。

在数据库级别启用加密时,将对所有文件组进行加密。 任何新文件组都继承加密属性。 如果数据库中的任何文件组都设置为只读,则数据库加密操作将失败。

可以通过使用 sys.dm_database_encryption_keys 动态管理视图来查看数据库的加密状态和加密扫描的状态。

< > query_store_option ::=

控制是否在此数据仓库中启用查询存储。

QUERY_STORE { ON |OFF }

  • ON

    启用查询存储。

  • OFF

    禁用查询存储。 OFF 是默认值。

Note

对于 Azure Synapse Analytics,必须在用户数据库中执行 ALTER DATABASE SET QUERY_STORE。 不支持从另一个数据仓库实例中执行该语句。

Note

对于 Azure Synapse Analytics,查询存储可以像在其他平台上一样启用,但不支持其他配置选项。

< > result_set_caching_option ::=

适用对象:Azure Synapse Analytics

控制查询结果是否缓存在数据库中。

RESULT_SET_CACHING { ON |OFF }

  • ON

    指定从此数据库返回的查询结果集缓存在数据库中。

  • OFF

    指定数据库中不缓存从此数据库返回的查询结果集。

连接到 master 数据库时,必须运行此命令。 对此数据库设置的更改立即生效。 缓存查询结果集会产生存储成本。 为数据库禁用结果缓存后,将立即从 Azure Synapse 存储中删除以前保留的结果缓存。

运行此命令以检查数据库的结果集缓存配置。 如果结果集缓存已打开,is_result_set_caching_on 返回 1。

SELECT name, is_result_set_caching_on FROM sys.databases
WHERE name = <'Your_Database_Name'>

运行此命令以检查是否已使用缓存结果执行查询。 result_cache_hit 列针对缓存命中返回 1,缓存未命中返回 0,由于未使用结果集缓存的原因,返回负值。 详情请查 阅sys.dm_pdw_exec_requests

SELECT request_id, command, result_cache_hit FROM sys.dm_pdw_exec_requests
WHERE request_id = <'Your_Query_Request_ID'>

Note

不应将结果集缓存与 DECRYPTBYKEY 结合使用。 如果必须使用此加密函数,请确保在执行时(在会话级别数据库级别)禁用结果集缓存。

Important

用于创建结果集缓存和从缓存中检索数据的操作发生在数据仓库实例的控制节点上。 当结果集缓存处于打开状态时,运行返回大型结果集(例如,>1 百万行)的查询可能会导致控制节点上 CPU 使用率较高,并降低实例上的整体查询响应速度。 这些查询通常在数据浏览或 ETL 操作过程中使用。 若要避免对控制节点造成压力并导致性能问题,用户应在运行此类查询之前关闭数据库的结果集缓存。

有关通过结果集缓存进行性能优化的详细信息,请参阅性能优化指南

Permissions

要设置 RESULT_SET_CACHING 选项,用户需要服务器级别主体登录名(在预配过程中创建的登录名)或者成为 dbmanager 数据库角色的成员。

< > snapshot_option ::=

适用对象:Azure Synapse Analytics

控制数据库的事务隔离级别。

READ_COMMITTED_SNAPSHOT { ON |OFF }

  • ON

    在数据库级别启用 READ_COMMITTED_SNAPSHOT 选项。

  • OFF

    在数据库级别关闭 READ_COMMITTED_SNAPSHOT 选项。

连接到 master 数据库时,必须运行此命令。 为用户数据库打开或关闭READ_COMMITTED_SNAPSHOT会终止与此数据库的所有打开连接。 你应该在数据库维护窗口内进行这个更改,或者等到数据库没有其他活跃连接,只有执行该 ALTER DATABASE 命令的连接。 数据库不必一定要处于单用户模式下。 不支持在会话级别更改 READ_COMMITTED_SNAPSHOT 设置。 若要验证数据库的此设置,请检查 is_read_committed_snapshot_on 中的 sys.databases 列。

在启用了READ_COMMITTED_SNAPSHOT的数据库中,如果存在多个数据版本,查询的性能可能会降低。 长时间打开的事务也会导致数据库的大小增加。 如果这些事务进行的数据更改会阻止版本清理,则会发生此问题。

Permissions

要设置 READ_COMMITTED_SNAPSHOT 选项,用户需要对数据库具有 ALTER 权限。

Examples

检查数据库的统计信息设置

SELECT name, is_auto_create_stats_on FROM sys.databases

为数据库启用查询存储

ALTER DATABASE [database_name]
SET QUERY_STORE = ON;

为数据库启用结果集缓存

-- Run this command when connecting to the MASTER database

ALTER DATABASE [database_name]
SET RESULT_SET_CACHING ON;

检查数据库的结果集缓存设置

SELECT name, is_result_set_caching_on
FROM sys.databases;

为数据库启用 Read_Committed_Snapshot 选项

连接到 master 数据库时运行此命令。

ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON;

Microsoft Fabric 数据仓库

 

Microsoft Fabric 数据仓库

用于 ALTER DATABASE ... SET 在 Microsoft Fabric 中管理 Microsoft Fabric 仓库。

Syntax

-- Microsoft Fabric Data Warehouse

ALTER DATABASE { warehouse_name | CURRENT }
SET
{
    <option_spec> [ ,...n ] 
}

<option_spec> ::=
{
    <data_lake_log_publishing>
  | <vorder>
  | <timestamp>
  | <result_set_caching>
  | <proactive_statistics_refresh>
  | <data_retention_period>
}
;

<data_lake_log_publishing> ::=
{
    DATA_LAKE_LOG_PUBLISHING { PAUSED | AUTO }
}

<vorder> ::=
{
    VORDER = OFF
}

<timestamp> ::=
{
    TIMESTAMP = {CURRENT_TIMESTAMP | 'YYYY-MM-DDTHH:MM:SS.SS' }  
}

<result_set_caching> ::=
{    
    RESULT_SET_CACHING { ON | OFF } 
}

<proactive_statistics_refresh> ::=
{    
    PROACTIVE_STATISTICS_REFRESH = { ON | OFF } 
}

<data_retention_period> ::=
{
    TIME_TRAVEL_RETENTION_PERIOD = { n } DAYS
}

Arguments

DATA_LAKE_LOG_PUBLISHING

暂停或恢复 Delta Lake 日志发布。 有关详细信息,请参阅 Delta Lake 日志发布

VORDER

可以禁用 V 顺序行为。 有关详细信息,请参阅在仓库中 禁用 V 订单行为

TIMESTAMP

更新 Fabric 数据仓库中现有仓库快照的时间戳。 时间戳必须在 UTC 时区中提供。 更多信息请参见 仓库快照

RESULT_SET_CACHING

启用或禁用目标项的结果集缓存。 此功能的默认设置为 ON。 有关详细信息,请参阅 结果集缓存

PROACTIVE_STATISTICS_REFRESH

适用于:Microsoft Fabric 中的 Microsoft Fabric 仓库。

启用或禁用目标项目的主动统计刷新。 默认值为 ON。 大多数物品应该使用默认设置。 有关详细信息,请参阅统计信息

TIME_TRAVEL_RETENTION_PERIOD = { n } 天数

适用于:Microsoft Fabric 中的 Microsoft Fabric 仓库。

指定仓库的保留期(以天为单位1)。120 默认值为 30

可以为 Microsoft Fabric 中的仓库配置 数据保留期。 此保留期确定可以执行 时间旅行 查询、创建 表克隆、使用 还原点和创建 仓库快照的时间。

time_travel_retention_period_days查看当前值。

Permissions

用户必须是 Fabric 工作区中的管理员、成员或参与者角色的成员。

Examples

A. 暂停 Delta Lake 日志的发布

以下 T-SQL 命令在当前仓库上下文中暂停 Delta Lake 日志发布。

ALTER DATABASE CURRENT SET DATA_LAKE_LOG_PUBLISHING = PAUSED;

要检查 Delta Lake 日志在你工作区所有仓库发布的当前状态,请使用以下 T-SQL 代码在新的查询窗口中查询 sys.database

SELECT [name], [DATA_LAKE_LOG_PUBLISHING_DESC] FROM sys.databases;

B. 设置和检查结果集缓存

以下 T-SQL 命令将使项 MyDataWarehouse 能够开始创建结果集缓存并将其应用到适用的 SELECT 查询。 有关详细信息,请参阅 结果集缓存

ALTER DATABASE [MyDataWarehouse] SET RESULT_SET_CACHING ON;

然后,可以检查 is_result_set_caching_on 中的列,以确认已启用结果集缓存。

SELECT [name], [is_result_set_caching_on] FROM sys.databases;