ALTER DATABASE (Transact-SQL)

修改数据库的某些配置选项。

本文提供所选任何 SQL 产品的语法、参数、注解、权限和示例。

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

选择一个产品

在下面的行中,选择你感兴趣的产品名称,系统将只显示该产品的信息。

* SQL Server *  

 

概述:SQL Server

在 SQL Server 中,此语句修改一个数据库或与该数据库关联的文件和文件组。 在数据库中添加或删除文件和文件组、更改数据库的属性或其文件和文件组、更改数据库排序规则和设置数据库选项。 不能修改数据库快照。 若要修改与复制相关的数据库选项,请使用 sp_replicationdboption

由于 ALTER DATABASE 语法的篇幅较长,因此分为多篇文章。

ALTER DATABASE
本文介绍的是用于更改数据库的名称和排序规则的语法和相关信息。

ALTER DATABASE 文件和文件组选项
介绍了用于从数据库中添加和删除文件和文件组以及更改文件和文件组的属性的语法和相关信息。

ALTER DATABASE SET 选项
介绍了使用 ALTER DATABASE 的 SET 选项来更改数据库属性的语法和相关信息。

ALTER DATABASE 数据库镜像
介绍了 ALTER DATABASE 与数据库镜像相关的 SET 选项的语法和相关信息。

ALTER DATABASE SET HADR
提供 ALTER DATABASE 的 Always On 可用性组 选项的语法和相关信息,该语法用来在 AlwaysOn 可用性组的辅助副本上配置辅助数据库。

ALTER DATABASE 兼容级别
介绍了 ALTER DATABASE 与数据库兼容级别相关的 SET 选项的语法和相关信息。

ALTER DATABASE SCOPED CONFIGURATION
提供与用于单个数据库级别设置(例如查询优化和查询执行相关行为)的数据库范围配置相关的语法。

语法

-- SQL Server Syntax
ALTER DATABASE { database_name | CURRENT }
{
    MODIFY NAME = new_database_name
  | COLLATE collation_name
  | <file_and_filegroup_options>
  | SET <option_spec> [ ,...n ] [ WITH <termination> ]
}
[;]

<file_and_filegroup_options>::=
  <add_or_modify_files>::=
  <filespec>::=
  <add_or_modify_filegroups>::=
  <filegroup_updatability_option>::=

<option_spec>::=
{
  | <auto_option>
  | <change_tracking_option>
  | <cursor_option>
  | <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_options>
  | <HADR_options>
  | <parameterization_option>
  | <query_store_options>
  | <recovery_option>
  | <service_broker_option>
  | <snapshot_option>
  | <sql_option>
  | <termination>
  | <temporal_history_retention>
  | <data_retention_policy>
  | <compatibility_level>
      { 150 | 140 | 130 | 120 | 110 | 100 | 90 }
}

参数

database_name 要修改的数据库的名称。

注意

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

CURRENT
适用于:SQL Server 2012 (11.x) 及更高版本。

指定应更改当前使用的数据库。

MODIFY NAME = new_database_name
使用指定的名称 new_database_name 重命名数据库

COLLATE collation_name
指定数据库的排序规则。 collation_name 既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。 如果不指定排序规则,则将 SQL Server 实例的排序规则指定为数据库的排序规则。

注意

在 Azure SQL 数据库 上创建数据库后,不能更改排序规则。

在创建使用非默认排序规则的数据库时,数据库中的数据将始终遵循指定的排序规则。 对于 SQL Server,创建包含的数据库时,使用 SQL Server 默认排序规则 Latin1_General_100_CI_AS_WS_KS_SC 来维护内部目录信息。

有关 Windows 和 SQL 排序规则名称的详细信息,请参阅 COLLATE

<delayed_durability_option> ::=
适用于:SQL Server 2014 (12.x) 及更高版本。

有关详细信息,请参阅 ALTER DATABASE SET 选项控制事务持续性

<file_and_filegroup_options>::=
有关详细信息,请参阅 ALTER DATABASE 文件和文件组选项

备注

若要删除数据库,请使用 DROP DATABASE

若要减小数据库的大小,请使用 DBCC SHRINKDATABASE

ALTER DATABASE 语句必须在自动提交模式(默认事务管理模式)下运行,且不允许用于显式或隐式事务中。

对数据库文件状态(例如,联机或脱机)的维护是独立于数据库状态的。 有关详细信息,请参阅文件状态。 文件组中文件的状态决定整个文件组的可用性。 文件组中的所有文件都必须联机,文件组才可用。 如果文件组脱机,则使用 SQL 语句访问文件组的所有尝试都会失败并报告错误。 在为 SELECT 语句生成查询计划时,查询优化器会避免驻留在脱机文件组中的非聚集索引和索引视图。 这样,这些语句就会成功。 但是,如果脱机文件组包含目标表的堆或聚集索引,SELECT 语句将失败。 此外,如果 INSERTUPDATEDELETE 语句修改的表的索引包含在脱机文件组中,这些语句将失败。

当数据库处于 RESTORING 状态时,多数 ALTER DATABASE 语句都将失败。 设置数据库镜像选项除外。 在活动还原操作期间,或者当数据库还原操作或日志文件还原操作由于备份文件损坏而失败时,数据库可以处于 RESTORING 状态。

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

  • COLLATE
  • MODIFY FILEGROUP DEFAULT
  • MODIFY FILEGROUP READ_ONLY
  • MODIFY FILEGROUP READ_WRITE
  • MODIFY_NAME
  • OFFLINE
  • ONLINE
  • PAGE_VERIFY
  • READ_ONLY
  • READ_WRITE

清除计划缓存将导致对所有后续执行计划进行重新编译,并可能导致查询性能暂时性地突然降低。 对于计划缓存中每个已清除的缓存存储区,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 数据库选项设置为 ON。 在没有用户连接引用或使用该数据库时,后台任务将尝试关闭并自动关闭数据库。
  • 针对具有默认选项的数据库运行多个查询。 然后,删除数据库。
  • 删除源数据库的数据库快照。
  • 您已成功重新生成数据库的事务日志。
  • 还原数据库备份。
  • 分离数据库。

更改数据库排序规则

在对数据库应用不同排序规则之前,请确保已满足下列条件:

  • 您是当前数据库的唯一用户。
  • 没有依赖数据库排序规则的架构绑定对象。

如果数据库中存在下列依赖于数据库排序规则的对象,则 ALTER DATABASE database_name COLLATE 语句将失败。 SQL Server 将对每个阻塞 ALTER 操作的对象返回一条错误消息:

  • 通过 SCHEMABINDING 创建的用户定义函数和视图
  • 计算列
  • CHECK 约束
  • 表值函数返回包含字符列的表,这些列继承了默认的数据库排序规则

数据库排序规则更改时,非绑定到架构的实体的依赖关系信息将自动更新。

改变数据库的排序规则不会在任何数据对象的系统名称中产生重复名称。 如果改变排序规则后出现重复的名称,则下列命名空间可能导致改变数据库排序规则的操作失败:

  • 对象名,如过程、表、触发器或视图
  • 架构名称
  • 主体,例如组、角色或用户
  • 标量类型名,如系统和用户定义类型
  • 全文目录名称
  • 对象内的列名或参数名
  • 表范围内的索引名

由新的排序规则产生的重复名称将导致更改操作失败,SQL Server 将返回错误消息,指出重复名称所在的命名空间。

查看数据库信息

可以使用目录视图、系统函数和系统存储过程返回有关数据库、文件和文件组的信息。

权限

需要对数据库拥有 ALTER 权限。

示例

A. 更改数据库的名称

以下示例将 AdventureWorks2012 数据库的名称更改为 Northwind

USE master;
GO
ALTER DATABASE AdventureWorks2012
Modify Name = Northwind ;
GO

B. 更改数据库的排序规则

以下示例创建了一个名为 testdb、排序规则为 SQL_Latin1_General_CP1_CI_AS 的数据库,然后将 testdb 数据库的排序规则更改为 COLLATE French_CI_AI

适用于:SQL Server 2008 及更高版本。

USE master;
GO

CREATE DATABASE testdb
COLLATE SQL_Latin1_General_CP1_CI_AS ;
GO

ALTER DATABASE testDB
COLLATE French_CI_AI ;
GO

另请参阅

* SQL 数据库 *  

 

概述:SQL 数据库

在 Azure SQL 数据库中,使用此语句来修改数据库。 使用此语句更改数据库的名称、更改数据库的版本和服务目标、将数据库加入到弹性池或将其从弹性池中删除、设置数据库选项、添加或删除数据库作为异地复制关系中的辅助,以及设置数据库兼容级别。

由于 ALTER DATABASE 语法的篇幅较长,因此分为多篇文章。

ALTER DATABASE
本文介绍的是用于更改数据库的名称和排序规则的语法和相关信息。

ALTER DATABASE SET 选项
介绍了使用 ALTER DATABASE 的 SET 选项来更改数据库属性的语法和相关信息。

ALTER DATABASE 兼容级别
介绍了 ALTER DATABASE 与数据库兼容级别相关的 SET 选项的语法和相关信息。

语法

-- Azure SQL Database Syntax
ALTER DATABASE { database_name | CURRENT }
{
    MODIFY NAME = new_database_name
  | MODIFY ( <edition_options> [, ... n] )
  | MODIFY BACKUP_STORAGE_REDUNDANCY = { 'LOCAL' | 'ZONE' | 'GEO' }
  | SET { <option_spec> [ ,... n ] WITH <termination>}
  | ADD SECONDARY ON SERVER <partner_server_name>
    [WITH ( <add-secondary-option>::=[, ... n] ) ]
  | REMOVE SECONDARY ON SERVER <partner_server_name>
  | FAILOVER
  | FORCE_FAILOVER_ALLOW_DATA_LOSS
}
[;]

<edition_options> ::=
{

  MAXSIZE = { 100 MB | 250 MB | 500 MB | 1 ... 1024 ... 4096 GB }
  | EDITION = { 'Basic' | 'Standard' | 'Premium' | 'GeneralPurpose' | 'BusinessCritical' | 'Hyperscale'}
  | SERVICE_OBJECTIVE =
       { <service-objective>
       | { ELASTIC_POOL (name = <elastic_pool_name>) }
       }
}

<add-secondary-option> ::=
   {
      ALLOW_CONNECTIONS = { ALL | NO }
     | SERVICE_OBJECTIVE =
       { <service-objective>
       | { ELASTIC_POOL ( name = <elastic_pool_name>) }
       | DATABASE_NAME = <target_database_name>
       | SECONDARY_TYPE = { GEO | NAMED }
       }
   }

<service-objective> ::={ 'Basic' |'S0' | 'S1' | 'S2' | 'S3'| 'S4'| 'S6'| 'S7'| 'S9'| 'S12'
       | 'P1' | 'P2' | 'P4'| 'P6' | 'P11' | 'P15'
      | 'GP_Gen4_1' | 'GP_Gen4_2' | 'GP_Gen4_3' | 'GP_Gen4_4' | 'GP_Gen4_5' | 'GP_Gen4_6'
      | 'GP_Gen4_7' | 'GP_Gen4_8' | 'GP_Gen4_9' | 'GP_Gen4_10' | 'GP_Gen4_16' | 'GP_Gen4_24'
      | 'GP_Gen5_2' | 'GP_Gen5_4' | 'GP_Gen5_6' | 'GP_Gen5_8' | 'GP_Gen5_10' | 'GP_Gen5_12' | 'GP_Gen5_14'
      | 'GP_Gen5_16' | 'GP_Gen5_18' | 'GP_Gen5_20' | 'GP_Gen5_24' | 'GP_Gen5_32' | 'GP_Gen5_40' | 'GP_Gen5_80'
      | 'GP_Fsv2_8' | 'GP_Fsv2_10' | 'GP_Fsv2_12' | 'GP_Fsv2_14' | 'GP_Fsv2_16' | 'GP_Fsv2_18'
      | 'GP_Fsv2_20' | 'GP_Fsv2_24' | 'GP_Fsv2_32' | 'GP_Fsv2_36' | 'GP_Fsv2_72'
      | 'GP_S_Gen5_1' | 'GP_S_Gen5_2' | 'GP_S_Gen5_4' | 'GP_S_Gen5_6' | 'GP_S_Gen5_8'
      | 'GP_S_Gen5_10' | 'GP_S_Gen5_12' | 'GP_S_Gen5_14' | 'GP_S_Gen5_16'
      | 'GP_S_Gen5_18' | 'GP_S_Gen5_20' | 'GP_S_Gen5_24' | 'GP_S_Gen5_32' | 'GP_S_Gen5_40'
      | 'BC_Gen4_1' | 'BC_Gen4_2' | 'BC_Gen4_3' | 'BC_Gen4_4' | 'BC_Gen4_5' | 'BC_Gen4_6'
      | 'BC_Gen4_7' | 'BC_Gen4_8' | 'BC_Gen4_9' | 'BC_Gen4_10' | 'BC_Gen4_16' | 'BC_Gen4_24'
      | 'BC_Gen5_2' | 'BC_Gen5_4' | 'BC_Gen5_6' | 'BC_Gen5_8' | 'BC_Gen5_10' | 'BC_Gen5_12' | 'BC_Gen5_14'
      | 'BC_Gen5_16' | 'BC_Gen5_18' | 'BC_Gen5_20' | 'BC_Gen5_24' | 'BC_Gen5_32' | 'BC_Gen5_40' | 'BC_Gen5_80'
      | 'BC_M_8' | 'BC_M_10' | 'BC_M_12' | 'BC_M_14' | 'BC_M_16' | 'BC_M_18'
      | 'BC_M_20' | 'BC_M_24' | 'BC_M_32' | 'BC_M_64' | 'BC_M_128'
      | 'HS_GEN4_1' | 'HS_GEN4_2' | 'HS_GEN4_4' | 'HS_GEN4_8' | 'HS_GEN4_16' | 'HS_GEN4_24'
      | 'HS_GEN5_2' | 'HS_GEN5_4' | 'HS_GEN5_8' | 'HS_GEN5_16' | 'HS_GEN5_24' | 'HS_GEN5_32' | 'HS_GEN5_48' | 'HS_GEN5_80'
      | { ELASTIC_POOL(name = <elastic_pool_name>) }
      }

<option_spec> ::=
{
    <auto_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>
  | <target_recovery_time_option>
  | <termination>
  | <temporal_history_retention>
  | <compatibility_level>
    { 150 | 140 | 130 | 120 | 110 | 100 | 90 }

}

参数

database_name
要修改的数据库的名称。

CURRENT
指定应更改当前使用的数据库。

MODIFY NAME = new_database_name
使用指定的名称 new_database_name 重命名数据库。 以下示例将 db1 数据库的名称更改为 db2

ALTER DATABASE db1
    MODIFY Name = db2 ;

MODIFY (EDITION = ['Basic' | 'Standard' | 'Premium' |'GeneralPurpose' | 'BusinessCritical' | 'Hyperscale'])
更改数据库的服务层。

以下示例将版本更改为 Premium

ALTER DATABASE current
    MODIFY (EDITION = 'Premium');

重要

如果数据库的 MAXSIZE 属性设置为该版本支持的有效范围之外的值,则 EDITION 更改会失败。

MODIFY (BACKUP_STORAGE_REDUNDANCY = ['LOCAL' | 'ZONE' | 'GEO'])
更改数据库的时间点还原备份和长期保留备份(若已配置)的存储冗余。 所做的更改将应用于将来进行的所有备份。 现有备份继续使用以前的设置。

重要

Azure SQL 数据库的 BACKUP_STORAGE_REDUNDANCY 选项已在巴西南部提供公共预览版,且仅在 Azure 东南亚地区正式发布。

MODIFY (MAXSIZE = [100 MB | 500 MB | 1 | 1024...4096] GB)
指定数据库的最大大小。 该最大大小必须符合针对数据库的 EDITION 属性的有效值集。 更改数据库的最大大小可能导致更改数据库 EDITION。

注意

MAXSIZE 参数不适用于超大规模服务层中的单一数据库。 超大规模服务层数据库根据需要而增长,最大 100 TB。 SQL 数据库服务会自动添加存储空间,而无需设置最大大小。

DTU 模型

MAXSIZE 基本 S0-S2 S3-S12 P1-P6 P11-P15
100 MB
250 MB
500 MB
1 GB
2 GB √ (D)
5 GB 空值
10 GB 空值
20 GB 空值
30 GB 空值
40 GB 空值
50 GB 空值
100 GB 空值
150 GB 空值
200 GB 空值
250 GB 空值 √ (D) √ (D)
300 GB 空值
400 GB 空值
500 GB 空值 √ (D)
750 GB 空值
1024 GB 空值 √ (D)
从 1024 GB 到最大 4096 GB,增量为 256 GB* 空值 空值 空值 空值

* P11 和 P15 允许 MAXSIZE 达到 4 TB,默认大小为 1024 GB。 P11 和 P15 可以使用最大 4 TB 的内含存储,且无需额外费用。 在高级层中,目前在以下区域提供大于 1 TB 的 MAXSIZE:美国东部 2、美国西部、US Gov 弗吉尼亚州、西欧、德国中部、东南亚、日本东部、澳大利亚东部、加拿大中部和加拿大东部。 有关 DTU 模型资源限制的更多详细信息,请参阅 DTU 资源限制

DTU 模型的 MAXSIZE 值(如果指定)必须为上表中所示的指定服务层的有效值。

vCore 模型

常规用途 - 预配的计算 - Gen4 (第 1 部分)

MAXSIZE GP_Gen4_1 GP_Gen4_2 GP_Gen4_3 GP_Gen4_4 GP_Gen4_5 GP_Gen4_6
最大数据大小 (GB) 1024 1024 1024 1536 1536 1536

常规用途 - 预配的计算 - Gen4(第 2 部分)

MAXSIZE GP_Gen4_7 GP_Gen4_8 GP_Gen4_9 GP_Gen4_10 GP_Gen4_16 GP_Gen4_24
最大数据大小 (GB) 1536 3072 3072 3072 4096 4096

常规用途 - 预配的计算 - Gen5(第 1 部分)

MAXSIZE GP_Gen5_2 GP_Gen5_4 GP_Gen5_6 GP_Gen5_8 GP_Gen5_10 GP_Gen5_12 GP_Gen5_14
最大数据大小 (GB) 1024 1024 1024 1536 1536 1536 1536

常规用途 - 预配的计算 - Gen5(第 2 部分)

MAXSIZE GP_Gen5_16 GP_Gen5_18 GP_Gen5_20 GP_Gen5_24 GP_Gen5_32 GP_Gen5_40 GP_Gen5_80
最大数据大小 (GB) 3072 3072 3072 4096 4096 4096 4096

常规用途 - 预配的计算 - Fsv2 系列(第 1 部分)

MAXSIZE GP_Fsv2_8 GP_Fsv2_10 GP_Fsv2_12 GP_Fsv2_14 GP_Fsv2_16 GP_Fsv2_18
最大数据大小 (GB) 1024 1024 1024 1024 1536 1536

常规用途 - 预配的计算 - Fsv2 系列(第 2 部分)

MAXSIZE GP_Fsv2_20 GP_Fsv2_24 GP_Fsv2_32 GP_Fsv2_36 GP_Fsv2_72
最大数据大小 (GB) 1536 1536 3072 3072 4096

常规用途 - 无服务器计算 - Gen5(第 1 部分)

MAXSIZE GP_S_Gen5_1 GP_S_Gen5_2 GP_S_Gen5_4 GP_S_Gen5_6 GP_S_Gen5_8
最大 vCore 数 1 2 4 6 8

常规用途 - 无服务器计算 - Gen5(第 2 部分)

MAXSIZE GP_S_Gen5_10 GP_S_Gen5_12 GP_S_Gen5_14 GP_S_Gen5_16
最大 vCore 数 10 12 14 16

常规用途 - 无服务器计算 - Gen5(第 3 部分)

MAXSIZE GP_S_Gen5_18 GP_S_Gen5_20 GP_S_Gen5_24 GP_S_Gen5_32 GP_S_Gen5_40
最大 vCore 数 18 20 24 32 40

业务关键 - 预配的计算 - Gen4(第 1 部分)

计算大小(服务目标) BC_Gen4_1 BC_Gen4_2 BC_Gen4_3 BC_Gen4_4 BC_Gen4_5 BC_Gen4_6
最大数据大小 (GB) 1024 1024 1024 1024 1024 1024

业务关键 - 预配的计算 - Gen4(第 2 部分)

计算大小(服务目标) BC_Gen4_7 BC_Gen4_8 BC_Gen4_9 BC_Gen4_10 BC_Gen4_16 BC_Gen4_24
最大数据大小 (GB) 1024 1024 1024 1024 1024 1024

业务关键 - 预配的计算 - Gen5(第 1 部分)

MAXSIZE BC_Gen5_2 BC_Gen5_4 BC_Gen5_6 BC_Gen5_8 BC_Gen5_10 BC_Gen5_12 BC_Gen5_14
最大数据大小 (GB) 1024 1024 1024 1536 1536 1536 1536

业务关键 - 预配的计算 - Gen5(第 2 部分)

MAXSIZE BC_Gen5_16 BC_Gen5_18 BC_Gen5_20 BC_Gen5_24 BC_Gen5_32 BC_Gen5_40 BC_Gen5_80
最大数据大小 (GB) 3072 3072 3072 4096 4096 4096 4096

业务关键 - 预配的计算 - M 系列(第 1 部分)

MAXSIZE BC_M_8 BC_M_10 BC_M_12 BC_M_14 BC_M_16 BC_M_18
最大数据大小 (GB) 512 640 768 896 1024 1152

业务关键 - 预配的计算 - M 系列(第 2 部分)

MAXSIZE BC_M_20 BC_M_24 BC_M_32 BC_M_64 BC_M_128
最大数据大小 (GB) 1280 1536 2048 4096 4096

如果使用 vCore 模型时未设置 MAXSIZE 值,则默认为 32 GB。 有关 vCore 模型资源限制的更多详细信息,请参阅 vCore 资源限制

以下规则适用于 MAXSIZE 和 EDITION 参数:

  • 如果指定了 EDITION 但未指定 MAXSIZE,则使用版本的默认值。 例如,如果 EDITION 设置为 Standard,且未指定 MAXSIZE,那么 MAXSIZE 自动设置为 250MB。
  • 如果 MAXSIZE 和 EDITION 均未指定,EDITION 设置为“常规用途”,MAXSIZE 设置为“32GB”。

MODIFY (SERVICE_OBJECTIVE = <service-objective>)
指定计算大小(服务目标)。 以下示例将高级数据库的服务目标更改为 P6

ALTER DATABASE current
    MODIFY (SERVICE_OBJECTIVE = 'P6');

SERVICE_OBJECTIVE

  • 针对单一数据库和入池数据库

    • 指定计算大小(服务目标)。 服务目标的可用值包括:S0S1S2S3S4S6S7S9S12P1P2P4P6P11P15GP_GEN4_1GP_GEN4_2GP_GEN4_3GP_GEN4_4GP_GEN4_5GP_GEN4_6GP_GEN4_7GP_GEN4_8GP_GEN4_7GP_GEN4_8GP_GEN4_9GP_GEN4_10GP_GEN4_16GP_GEN4_24BC_GEN4_1BC_GEN4_2BC_GEN4_3BC_GEN4_4BC_GEN4_5BC_GEN4_6BC_GEN4_7BC_GEN4_8BC_GEN4_9BC_GEN4_10BC_GEN4_16BC_GEN4_24GP_Gen5_2GP_Gen5_4GP_Gen5_6GP_Gen5_8GP_Gen5_10GP_Gen5_12GP_Gen5_14GP_Gen5_16GP_Gen5_18GP_Gen5_20GP_Gen5_24GP_Gen5_32GP_Gen5_40GP_Gen5_80GP_Fsv2_8GP_Fsv2_10GP_Fsv2_12GP_Fsv2_14GP_Fsv2_16GP_Fsv2_18GP_Fsv2_20GP_Fsv2_24GP_Fsv2_32GP_Fsv2_36GP_Fsv2_72BC_Gen5_2BC_Gen5_4BC_Gen5_6BC_Gen5_8BC_Gen5_10BC_Gen5_12BC_Gen5_14BC_Gen5_16BC_Gen5_18BC_Gen5_20BC_Gen5_24BC_Gen5_32BC_Gen5_40BC_Gen5_80BC_M_8BC_M_10BC_M_12BC_M_14BC_M_16BC_M_18BC_M_20BC_M_24BC_M_32BC_M_64BC_M_128
  • 对于无服务器计算层中的单个数据库

    • 指定计算大小(服务目标)。 服务目标的可用值包括:GP_S_Gen5_1GP_S_Gen5_2GP_S_Gen5_4GP_S_Gen5_6GP_S_Gen5_8GP_S_Gen5_10GP_S_Gen5_12GP_S_Gen5_14GP_S_Gen5_16GP_S_Gen5_18GP_S_Gen5_20GP_S_Gen5_24GP_S_Gen5_32GP_S_Gen5_40
  • 针对超大规模服务层中的单一数据库

    • 指定计算大小(服务目标)。 服务目标的可用值包括:HS_GEN4_1HS_GEN4_2HS_GEN4_4HS_GEN4_8HS_GEN4_16HS_GEN4_24HS_Gen5_2HS_Gen5_4HS_Gen5_8HS_Gen5_16HS_Gen5_24HS_Gen5_32HS_Gen5_48HS_Gen5_80

DATABASE_NAME 仅用于 Azure SQL 数据库超大规模。 将要创建的数据库名称。 仅在 SECONDARY_TYPE = NAMED 的情况下供命名的 Azure SQL 数据库超大规模副本使用。 有关详细信息,请参阅超大规模次要副本

SECONDARY_TYPE 仅用于 Azure SQL 数据库超大规模。 “GEO”指定异地副本,“NAMED”指定命名的副本。 默认值为“GEO”。 有关详细信息,请参阅超大规模次要副本

有关服务目标说明以及大小、版本和服务目标组合的详细信息,请参阅 Azure SQL 数据库服务层和性能级别DTU 资源限制vCore 资源限制。 删除了对 PRS 服务目标的支持。 如有问题,请使用此电子邮件别名:premium-rs@microsoft.com。

MODIFY (SERVICE_OBJECTIVE = ELASTIC_POOL (name = <elastic_pool_name>)
若要向弹性池中添加现有数据库,请将数据库的 SERVICE_OBJECTIVE 设置为 ELASTIC_POOL,并提供弹性池的名称。 还可以使用此选项将数据库更改为相同服务器中的不同弹性池。 有关详细信息,请参阅弹性池有助于管理和缩放多个 Azure SQL 数据库。 若要从弹性池中删除数据库,请使用 ALTER DATABASE 将 SERVICE_OBJECTIVE 设置为单个数据库计算大小(服务目标)。

注意

超大规模服务层中的数据库不能添加到弹性池。

ADD SECONDARY ON SERVER <partner_server_name>
在伙伴服务器上创建具有相同名称的异地复制辅助数据库(使本地数据库进入异地复制主数据库),并开始将数据从主数据库异步复制到新的辅助数据库。 如果辅助数据库上已存在同名的数据库,则命令会失败。 对托管成为主数据库的本地数据库的服务器上的 master 数据库执行此命令。

重要

默认使用与主数据库或源数据库相同的备份存储冗余创建辅助数据库。 不支持在通过 T-SQL 创建辅助数据库时更改备份存储冗余。

WITH ALLOW_CONNECTIONS { ALL | NO }
未指定 ALLOW_CONNECTIONS 时,它在默认情况下会设置为 ALL。 如果它设置为 ALL,则是允许拥有适当权限的所有登录名进行连接的只读数据库。

WITH SERVICE_OBJECTIVE { S0, S1, S2, S3, S4, S6, S7, S9, S12, P1, P2, P4, P6, P11, P15, GP_GEN4_1, GP_GEN4_2, GP_GEN4_3, GP_GEN4_4, GP_GEN4_5, GP_GEN4_6, GP_GEN4_7, GP_GEN4_8, GP_GEN4_7, GP_GEN4_8, GP_GEN4_9, GP_GEN4_10, GP_GEN4_16, GP_GEN4_24, BC_GEN4_1, BC_GEN4_2, BC_GEN4_3, BC_GEN4_4, BC_GEN4_5, BC_GEN4_6, BC_GEN4_7, BC_GEN4_8, BC_GEN4_9, BC_GEN4_10, BC_GEN4_16, BC_GEN4_24, GP_Gen5_2, GP_Gen5_4, GP_Gen5_6, GP_Gen5_8, GP_Gen5_10, GP_Gen5_12, GP_Gen5_14, GP_Gen5_16, GP_Gen5_18, GP_Gen5_20, GP_Gen5_24, GP_Gen5_32, GP_Gen5_40, GP_Gen5_80, GP_Fsv2_8, GP_Fsv2_10, GP_Fsv2_12, GP_Fsv2_14, GP_Fsv2_16, GP_Fsv2_18, GP_Fsv2_20, GP_Fsv2_24, GP_Fsv2_32, GP_Fsv2_36, GP_Fsv2_72, GP_S_Gen5_1, GP_S_Gen5_2, GP_S_Gen5_4, GP_S_Gen5_6, GP_S_Gen5_8, GP_S_Gen5_10, GP_S_Gen5_12, GP_S_Gen5_14, GP_S_Gen5_16, GP_S_Gen5_18, GP_S_Gen5_20, GP_S_Gen5_24, GP_S_Gen5_32, GP_S_Gen5_40, BC_Gen5_2, BC_Gen5_4, BC_Gen5_6, BC_Gen5_8, BC_Gen5_10, BC_Gen5_12, BC_Gen5_14, BC_Gen5_16, BC_Gen5_18, BC_Gen5_20, BC_Gen5_24, BC_Gen5_32,BC_Gen5_40, BC_Gen5_80, BC_M_8, BC_M_10, BC_M_12, BC_M_14, BC_M_16, BC_M_18, BC_M_20, BC_M_24, BC_M_32, BC_M_64, BC_M_128 }

未指定 SERVICE_OBJECTIVE 时,会在与主数据库相同的服务级别上创建辅助数据库。 指定了 SERVICE_OBJECTIVE 时,会在指定级别上创建辅助数据库。 此选项支持使用成本较低的服务级别创建异地复制辅助数据库。 指定的 SERVICE_OBJECTIVE 必须处于与源相同的版本中。 例如,如果版本是高级版本,则无法指定 S0。

ELASTIC_POOL (name = <elastic_pool_name>) When ELASTIC_POOL is not specified, the secondary database is not created in an elastic pool. 指定了 ELASTIC_POOL 时,会在指定池中创建辅助数据库。

重要

执行 ADD SECONDARY 命令的用户必须是主服务器上的 DBManager,在本地数据库中拥有 db_owner 成员身份,以及是辅助服务器上的 DBManager。 必须将客户端 IP 地址添加到主服务器和辅助服务器的防火墙规则下的允许列表中。 如果存在不同的客户端 IP 地址,则还必须将已在主服务器上添加的完全相同的客户端 IP 地址添加到辅助服务器。 这是在运行 ADD SECONDARY 命令以启动异地复制之前需要执行的步骤。

REMOVE SECONDARY ON SERVER <partner_server_name> Removes the specified geo-replicated secondary database on the specified server. 对托管主数据库的服务器上的 master 数据库执行此命令。

重要

执行 REMOVE SECONDARY 命令的用户必须是主服务器上的 DBManager。

FAILOVER 将异地复制合作关系中对其执行命令的辅助数据库提升为主数据库,并将当前主数据库降级为新的辅助数据库。 作为此过程的一部分,异地复制模式会暂时从异步模式切换为同步模式。 在故障转移过程中:

  1. 主数据库停止接收新事务。
  2. 所有未完成的事务都刷新到辅助数据库。
  3. 辅助数据库成为主数据库,并开始与旧的主数据库(即新的辅助数据库)进行异步异地复制。

此顺序可确保不会丢失任何数据。 切换角色期间两个数据库都不可用的时间段大约为 0-25 秒。 总操作所需时间不应超过大约一分钟。 如果在发出此命令时主数据库不可用,则此命令会失败并产生指示主数据库不可用的错误消息。 如果故障转移过程未完成,并且显示为停滞,则可以使用强制故障转移命令并接受数据丢失 — 随后,如果需要恢复丢失的数据,请调用 devops (CSS) 以恢复丢失的数据。

重要

执行 FAILOVER 命令的用户必须是主服务器和辅助服务器上的 DBManager。

FORCE_FAILOVER_ALLOW_DATA_LOSS 将异地复制合作关系中对其执行命令的辅助数据库提升为主数据库,并将当前主数据库降级为新的辅助数据库。 仅当当前主数据库不再可用时,才使用此命令。 它仅在还原可用性十分关键,并且可接受丢失一些数据时用于进行灾难恢复。

在强制故障转移过程中:

  1. 指定的辅助数据库立即成为主数据库,并开始接受新事务。
  2. 当原始的主数据库可以与新的主数据库重新连接时,在原始的主数据库上创建增量分布,并且原始的主数据库成为新的辅助数据库。
  3. 若要从旧的主数据库上的此增量备份恢复数据,用户可利用 devops/CSS。
  4. 如果存在其他辅助数据库,则它们会自动重新配置以成为新的主数据库的辅助数据库。 此过程是异步过程,在此过程完成之前可能会出现延迟。 在重新配置之前,辅助数据库会继续是旧的主数据库的辅助数据库。

重要

执行 FORCE_FAILOVER_ALLOW_DATA_LOSS 命令的用户必须属于主服务器和辅助服务器上的 dbmanager 角色。

备注

若要删除数据库,请使用 DROP DATABASE。 若要减小数据库的大小,请使用 DBCC SHRINKDATABASE

ALTER DATABASE 语句必须在自动提交模式(默认事务管理模式)下运行,且不允许用于显式或隐式事务中。

清除计划缓存将导致对所有后续执行计划进行重新编译,并可能导致查询性能暂时性地突然降低。 对于计划缓存中每个已清除的缓存存储区,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。 每隔五分钟,只要缓存在这段时间间隔内得到刷新,此消息就记录一次。

在下列情况下,也会刷新过程缓存:针对具有默认选项的数据库运行多个查询。 然后,删除数据库。

查看数据库信息

可以使用目录视图、系统函数和系统存储过程返回有关数据库、文件和文件组的信息。

权限

要更改数据库,登录名必须是服务器管理员登录名(预配 Azure SQL 数据库逻辑服务器时创建的)、服务器的 Azure AD 管理员、master 中 dbmanager 数据库角色的成员、当前数据库中的 db_owner 数据库角色的成员,或数据库的 dbo

要通过 T-SQL 缩放数据库,需要 ALTER DATABASE 权限。 若要通过 Azure 门户、PowerShell、Azure CLI 或 REST API 缩放数据库,需要 Azure RBAC 权限,特别是参与者、SQL DB 参与者角色或 SQL Server 参与者 Azure RBAC 角色。 有关详细信息,请参阅 Azure RBAC 内置角色

示例

A. 检查版本选项并更改它们

设置数据库 db1 的版本和最大大小:

SELECT Edition = DATABASEPROPERTYEX('db1', 'EDITION'),
        ServiceObjective = DATABASEPROPERTYEX('db1', 'ServiceObjective'),
        MaxSizeInBytes =  DATABASEPROPERTYEX('db1', 'MaxSizeInBytes');

ALTER DATABASE [db1] MODIFY (EDITION = 'Premium', MAXSIZE = 1024 GB, SERVICE_OBJECTIVE = 'P15');

B. 将数据库移动到不同的弹性池

将现有数据库移动到名为 pool1 的池中:

ALTER DATABASE db1
MODIFY ( SERVICE_OBJECTIVE = ELASTIC_POOL ( name = pool1 ) ) ;

C. 添加异地复制辅助数据库

在服务器 secondaryserver 上创建本地服务器上的 db1 的可读服务数据库 db1。

ALTER DATABASE db1
ADD SECONDARY ON SERVER secondaryserver
WITH ( ALLOW_CONNECTIONS = ALL )

D. 删除异地复制辅助数据库

删除服务器 secondaryserver 上的辅助数据库 db1。

ALTER DATABASE db1
REMOVE SECONDARY ON SERVER testsecondaryserver

E. 故障转移到异地复制辅助数据库

在服务器 secondaryserver 上执行时,将服务器 secondaryserver 上的辅助数据库 db1 提升为新的主数据库。

ALTER DATABASE db1 FAILOVER

E. 强制故障转移到异地复制辅助数据库会造成丢失数据

当主服务器不可用时,强制使服务器 secondaryserver 上的辅助数据库 db1 在服务器 secondaryserver 上被执行时成为新的主数据库。 此选项可能会导致数据丢失。

ALTER DATABASE db1 FORCE_FAILOVER_ALLOW_DATA_LOSS

G. 将单一数据库更新为服务层 S0(标准版、性能级别为 0)

将单个数据库更新为标准版(服务层),其计算大小(服务目标)为 S0,最大大小为 250 GB。

ALTER DATABASE [db1] MODIFY (EDITION = 'Standard', MAXSIZE = 250 GB, SERVICE_OBJECTIVE = 'S0');

H. 更新数据库的备份存储冗余

将数据库的备份存储冗余更新为区域冗余。 此数据库将来的所有备份都将使用新设置。 包括时间点还原备份和长期保留备份(如果已配置)。

ALTER DATABASE db1 MODIFY BACKUP_STORAGE_REDUNDANCY = 'ZONE'

另请参阅

* SQL 托管实例 *  

 

概述:Azure SQL 托管实例

在 Azure SQL 托管实例 中,使用此语句设置数据库选项。

由于 ALTER DATABASE 语法的篇幅较长,因此分为多篇文章。

ALTER DATABASE
本文提供有关设置文件和文件组选项、设置数据库选项和设置数据库兼容级别的语法和相关信息。

ALTER DATABASE 文件和文件组选项
介绍了用于从数据库中添加和删除文件和文件组以及更改文件和文件组的属性的语法和相关信息。

ALTER DATABASE SET 选项
介绍了使用 ALTER DATABASE 的 SET 选项来更改数据库属性的语法和相关信息。

ALTER DATABASE 兼容级别
介绍了 ALTER DATABASE 与数据库兼容级别相关的 SET 选项的语法和相关信息。

语法

-- Azure SQL Database Syntax  
ALTER DATABASE { database_name | CURRENT }  
{
    MODIFY NAME = new_database_name
  | COLLATE collation_name
  | <file_and_filegroup_options>  
  | SET <option_spec> [ ,...n ]  
}  
[;]

<file_and_filegroup_options>::=  
  <add_or_modify_files>::=  
  <filespec>::=
  <add_or_modify_filegroups>::=  
  <filegroup_updatability_option>::=  

<option_spec> ::=
{
    <auto_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>
  | <target_recovery_time_option>
  | <temporal_history_retention>
  | <compatibility_level>
      { 150 | 140 | 130 | 120 | 110 | 100 | 90 }

}  

参数

database_name
要修改的数据库的名称。

CURRENT
指定应更改当前使用的数据库。

备注

  • 若要删除数据库,请使用 DROP DATABASE

  • 若要减小数据库的大小,请使用 DBCC SHRINKDATABASE

  • ALTER DATABASE 语句必须在自动提交模式(默认事务管理模式)下运行,且不允许用于显式或隐式事务中。

  • 通过设置以下选项之一来清除托管实例的计划缓存。

    • COLLATE
    • MODIFY FILEGROUP DEFAULT
    • MODIFY FILEGROUP READ_ONLY
    • MODIFY FILEGROUP READ_WRITE
    • MODIFY NAME

    清除计划缓存将导致对所有后续执行计划进行重新编译,并可能导致查询性能暂时性地突然降低。 对于计划缓存中每个已清除的缓存存储区,SQL Server 错误日志包含以下信息性消息:“由于某些数据库维护或重新配置操作,SQL Server 经历了 '%s' 缓存存储区(计划缓存的一部分)的 %d 次刷新”。 每隔五分钟,只要缓存在这段时间间隔内得到刷新,此消息就记录一次。 针对具有默认选项的数据库执行多个查询时,也会刷新计划缓存。 然后,删除数据库。

  • 某些 ALTER DATABASE 语句需要对要执行的数据库使用排他锁。 这就是当另一个活动进程锁定数据库时,它们可能会失败的原因。 这种情况下报告的错误为 Msg 5061, Level 16, State 1, Line 38,并显示消息 ALTER DATABASE failed because a lock could not be placed on database '<database name>'. Try again later。 这通常是暂时性故障,若要解决该问题,请在释放数据库上的所有锁后,重试失败的 ALTER DATABASE 语句。 系统视图 sys.dm_tran_locks 保存有关活动锁的信息。 若要检查数据库中是否存在共享或排他锁,请使用以下查询。

    SELECT
        resource_type, resource_database_id, request_mode, request_type, request_status, request_session_id 
    FROM 
        sys.dm_tran_locks
    WHERE
        resource_database_id = DB_ID('testdb')
    

查看数据库信息

可以使用目录视图、系统函数和系统存储过程返回有关数据库、文件和文件组的信息。

权限

只有服务器级主体登录名(由设置过程创建)或 dbcreator 数据库角色的成员可以更改数据库。

重要

数据库的所有者不能更改数据库,除非他们是 dbcreator 角色的成员。

示例

以下示例显示如何设置自动优化以及如何在托管实例中添加文件。

ALTER DATABASE WideWorldImporters
  SET AUTOMATIC_TUNING ( FORCE_LAST_GOOD_PLAN = ON);

ALTER DATABASE WideWorldImporters
  ADD FILE (NAME = 'data_17');

另请参阅

* Azure Synapse
Analytics *  

 

概述:Azure Synapse Analytics

在 Azure Synapse 中,ALTER DATABASE 会修改专用 SQL 池的某些配置选项。

由于 ALTER DATABASE 语法的篇幅较长,因此分为多篇文章。

ALTER DATABASE SET 选项提供使用 ALTER DATABASE 的 SET 选项更改数据库属性的语法和相关信息。

语法

ALTER DATABASE { database_name | CURRENT }
{
  MODIFY NAME = new_database_name
| MODIFY ( <edition_option> [, ... n] )
| SET <option_spec> [ ,...n ] [ WITH <termination> ]
}
[;]

<edition_option> ::=
      MAXSIZE = {
            250 | 500 | 750 | 1024 | 5120 | 10240 | 20480
          | 30720 | 40960 | 51200 | 61440 | 71680 | 81920
          | 92160 | 102400 | 153600 | 204800 | 245760
      } GB
      | SERVICE_OBJECTIVE = {
            'DW100' | 'DW200' | 'DW300' | 'DW400' | 'DW500'
          | 'DW600' | 'DW1000' | 'DW1200' | 'DW1500' | 'DW2000'
          | 'DW3000' | 'DW6000' | 'DW500c' | 'DW1000c' | 'DW1500c'
          | 'DW2000c' | 'DW2500c' | 'DW3000c' | 'DW5000c' | 'DW6000c'
          | 'DW7500c' | 'DW10000c' | 'DW15000c' | 'DW30000c'
      }

参数

database_name

指定要修改的数据库的名称。

MODIFY NAME = new_database_name

使用指定的名称 new_database_name 重命名数据库

“MODIFY NAME”选项在 Azure Synapse 中存在一些支持限制:

  • 不受 Azure Synapse 无服务器池支持
  • 不受 Azure Synapse 工作区中创建的专用 SQL 池支持
  • 受通过 Azure 门户创建的专用 SQL 池(以前称为 SQL DW)支持(包括具有已连接工作区的专用 SQL 池)

MAXSIZE

默认为 245,760 GB (240 TB)。

适用于: 已针对计算代系 1 进行优化

允许的最大数据库大小。 数据库大小不能超出 MAXSIZE。

适用于: 已针对计算代系 2 进行优化

数据库中允许的最大行存储数据大小。 存储在行存储表中的数据、列存储索引的增量存储或非聚集索引(聚集在列存储索引上)都不可超过 MAXSIZE。 压缩到列存储格式的数据没有大小限制,不受 MAXSIZE 约束。

SERVICE_OBJECTIVE

指定计算大小(服务目标)。 有关 Azure Synapse 服务目标的详细信息,请参阅数据仓库单位 (DWU)

权限

需要以下权限:

  • 服务器级别主体登录名(由预配进程创建),或者
  • dbmanager 数据库角色的成员。

数据库的所有者不能更改数据库,除非该所有者是 dbmanager 角色的成员。

一般备注

当前数据库必须不同于你正在更改的数据库,因此连接到 master 数据库之后必须运行 ALTER。

默认情况下,SQL Analytics 中 COMPATIBILITY_LEVEL 设置为 130,且无法更改。 有关详细信息,请参阅在 Azure SQL 数据库中通过兼容性级别 130 优化查询性能

注意

COMPATIBILITY_LEVEL 仅适用于预配的资源(池)。

限制和局限

若要运行 ALTER DATABASE,数据库必须处于联机且非暂停状态。

必须在自动提交模式(默认事务管理模式)下运行 ALTER DATABASE 语句。 此操作在连接设置中进行设置。

ALTER DATABASE 语句不能是用户定义的事务的一部分。

不可更改数据库排序规则。

示例

在运行这些示例之前,请确保所更改的数据库不是当前数据库。 当前数据库必须不同于你正在更改的数据库,因此连接到 master 数据库之后必须运行 ALTER。

A. 更改数据库的名称

ALTER DATABASE AdventureWorks2012
MODIFY NAME = Northwind;

B. 更改数据库的最大大小

ALTER DATABASE dw1 MODIFY ( MAXSIZE=10240 GB );

C. 更改计算大小(服务目标)

ALTER DATABASE dw1 MODIFY ( SERVICE_OBJECTIVE= 'DW1200' );

D. 更改最大大小和计算大小(服务目标)

ALTER DATABASE dw1 MODIFY ( MAXSIZE=10240 GB, SERVICE_OBJECTIVE= 'DW1200' );

另请参阅

* Analytics
Platform System (PDW) *
 

 

概述:分析平台系统

修改 PDW 中复制表、分布式表和事务日志的最大数据库大小选项。 使用此语句可在数据库大小增长或收缩时管理数据库的磁盘空间分配。 本文还介绍与 PDW 中设置数据库选项相关的语法。

语法

-- Analytics Platform System
ALTER DATABASE database_name
    SET ( <set_database_options> | <db_encryption_option> )
[;]

<set_database_options> ::=
{
    AUTOGROW = { ON | OFF }
    | REPLICATED_SIZE = size [GB]
    | DISTRIBUTED_SIZE = size [GB]
    | LOG_SIZE = size [GB]
    | SET AUTO_CREATE_STATISTICS { ON | OFF }
    | SET AUTO_UPDATE_STATISTICS { ON | OFF }
    | SET AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }
}

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

参数

database_name
要修改的数据库的名称。 要在设备上显示数据库列表,请使用 sys.databases

AUTOGROW = { ON | OFF }
更新 AUTOGROW 选项。 当 AUTOGROW 为 ON 时,Analytics Platform System (PDW) 根据需要自动为复制表、分布式表和事务日志增大分配空间,以适应存储需求的增长。 当 AUTOGROW 为 OFF 时,如果复制表、分布式表或事务日志超出最大大小设置,Analytics Platform System (PDW) 会返回一个错误。

REPLICATED_SIZE = size [GB]
指定每个计算节点的新最大 GB 数,以便存储要更改的数据库中的所有复制表。 如果正在计划设备存储空间,需要用 REPLICATED_SIZE 乘以设备中的计算节点数。

DISTRIBUTED_SIZE = size [GB]
指定每个数据库的新的最大 GB 数,以便存储要更改的数据库中的所有分布式表。 该大小分布到设备的所有计算节点中。

LOG_SIZE = size [GB]
指定每个数据库的新的最大 GB 数,以便存储要更改的数据库中的所有事务日志。 该大小分布到设备的所有计算节点中。

ENCRYPTION { ON | OFF }
将数据库设置为加密的 (ON) 或未加密的 (OFF)。 只能在 sp_pdw_database_encryption 已设置为 1 时为 Analytics Platform System (PDW) 配置加密。 必须先创建数据库加密密钥,然后才能配置透明数据加密。 有关数据库加密的详细信息,请参阅透明数据加密 (TDE)

SET AUTO_CREATE_STATISTICS { ON | OFF }
在自动创建统计信息选项 AUTO_CREATE_STATISTICS 为 ON 时,查询优化器将根据需要在查询谓词中的单独列上创建统计信息,以便改进查询计划的基数估计。 这些单列统计信息在现有统计信息对象中尚未具有直方图的列上创建。

升级到 AU7 后创建的新数据库的默认值为 ON。 升级前创建的数据库的默认值为 OFF。

有关统计信息的详细信息,请参阅统计信息

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

升级到 AU7 后创建的新数据库的默认值为 ON。 升级前创建的数据库的默认值为 OFF。

有关统计信息的详细信息,请参阅统计信息

SET AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }
异步统计信息更新选项 AUTO_UPDATE_STATISTICS_ASYNC 将确定查询优化器是使用同步统计信息更新还是异步统计信息更新。 AUTO_UPDATE_STATISTICS_ASYNC 选项适用于为索引创建的统计信息对象、查询谓词中的单列以及使用 CREATE STATISTICS 语句创建的统计信息。

升级到 AU7 后创建的新数据库的默认值为 ON。 升级前创建的数据库的默认值为 OFF。

有关统计信息的详细信息,请参阅统计信息

权限

需要对数据库具有 ALTER 权限。

错误消息

如果“自动统计信息”功能被禁用,而你尝试更改统计信息设置,则 PDW 会输出错误This option is not supported in PDW。 系统管理员可通过启用功能开关 AutoStatsEnabled 来启用“自动统计信息”功能。

一般备注

REPLICATED_SIZEDISTRIBUTED_SIZELOG_SIZE 的值可以大于、等于或小于数据库的当前值。

限制和局限

增长和收缩操作是近似的。 所得到的实际大小可能因大小参数而异。

Analytics Platform System (PDW) 不会将 ALTER DATABASE 语句作为原子操作执行。 如果在执行期间中止该语句,将保持已发生的更改。

统计信息设置只有在管理员已启用“自动统计信息”功能时才可工作。管理员可使用功能开关 AutoStatsEnabled 启用或禁用“自动统计信息”功能。

锁定行为

在 DATABASE 对象上采用共享锁。 无法更改另个用户正在读取或写入的数据库。 这包括已在数据库上发出 USE 语句的会话。

性能

收缩数据库可能需要大量时间和系统资源,具体取决于数据库中的实际数据大小和磁盘上的碎片量。 例如,收缩数据库可能需要几个小时或更长时间。

确定加密进度

可使用以下查询来确定数据库透明数据加密进度的百分比:

WITH
database_dek AS (
    SELECT ISNULL(db_map.database_id, dek.database_id) AS database_id,
        dek.encryption_state, dek.percent_complete,
        dek.key_algorithm, dek.key_length, dek.encryptor_thumbprint,
        type
    FROM sys.dm_pdw_nodes_database_encryption_keys AS dek
    INNER JOIN sys.pdw_nodes_pdw_physical_databases AS node_db_map
        ON dek.database_id = node_db_map.database_id
        AND dek.pdw_node_id = node_db_map.pdw_node_id
    LEFT JOIN sys.pdw_database_mappings AS db_map
        ON node_db_map .physical_name = db_map.physical_name
    INNER JOIN sys.dm_pdw_nodes nodes
        ON nodes.pdw_node_id = dek.pdw_node_id
    WHERE dek.encryptor_thumbprint <> 0x
),
dek_percent_complete AS (
    SELECT database_dek.database_id, AVG(database_dek.percent_complete) AS percent_complete
    FROM database_dek
    WHERE type = 'COMPUTE'
    GROUP BY database_dek.database_id
)
SELECT DB_NAME( database_dek.database_id ) AS name,
    database_dek.database_id,
    ISNULL(
       (SELECT TOP 1 dek_encryption_state.encryption_state
        FROM database_dek AS dek_encryption_state
        WHERE dek_encryption_state.database_id = database_dek.database_id
        ORDER BY (CASE encryption_state
            WHEN 3 THEN -1
            ELSE encryption_state
            END) DESC), 0)
        AS encryption_state,
dek_percent_complete.percent_complete,
database_dek.key_algorithm, database_dek.key_length, database_dek.encryptor_thumbprint
FROM database_dek
INNER JOIN dek_percent_complete
    ON dek_percent_complete.database_id = database_dek.database_id
WHERE type = 'CONTROL';

有关演示实现 TDE 的所有步骤的完整示例,请参阅透明数据加密

示例:Analytics Platform System (PDW)

A. 更改 AUTOGROW 设置

将数据库 CustomerSales 的 AUTOGROW 设置为 ON。

ALTER DATABASE CustomerSales
    SET ( AUTOGROW = ON );

B. 更改复制表的最大存储

下面的示例将数据库 CustomerSales 的复制表存储限制设置为 1 GB。 这是每个计算节点的存储限制。

ALTER DATABASE CustomerSales
    SET ( REPLICATED_SIZE = 1 GB );

C. 更改分布式表的最大存储

下面的示例将数据库 CustomerSales 的分布式表存储限制设置为 1000 GB (1 TB)。 这是设备上所有计算节点的组合存储限制,而不是每个计算节点的存储限制。

ALTER DATABASE CustomerSales
    SET ( DISTRIBUTED_SIZE = 1000 GB );

D. 更改事务日志的最大存储

下面的示例更新数据库 CustomerSales使设备的最大 SQL Server 事务日志大小为 10 GB。

ALTER DATABASE CustomerSales
    SET ( LOG_SIZE = 10 GB );

E. 检查当前的统计信息值

以下查询返回所有数据库的当前统计信息值。 值 1 表示功能处于开启状态,而 0 表示功能处于关闭状态。

SELECT NAME,
    is_auto_create_stats_on,
    is_auto_update_stats_on,
    is_auto_update_stats_async_on
FROM sys.databases;

F. 为数据库实现自动创建和自动更新统计信息

使用以下语句可为数据库 CustomerSales 自动且异步地创建和更新统计信息。 这将根据需要创建和更新单列统计信息,从而创建高质量的查询计划。

ALTER DATABASE CustomerSales
    SET AUTO_CREATE_STATISTICS ON;
ALTER DATABASE CustomerSales
    SET AUTO_UPDATE_STATISTICS ON;
ALTER DATABASE
    SET AUTO_UPDATE_STATISTICS_ASYNC ON;

另请参阅