ALTER DATABASE (Transact-SQL)

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

适用范围:SQL Server(SQL Server 2008 至当前版本),Azure SQL Database。

由于 ALTER DATABASE 语法的篇幅较长,因此分为以下主题:

主题链接图标 Transact-SQL 语法约定

语法

-- SQL Server Syntax
ALTER DATABASE { database_name  | CURRENT }
{
    MODIFY NAME = new_database_name 
  | COLLATE collation_name
  | <file_and_filegroup_options>
  | <set_database_options>
}
[;]

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

<set_database_options>::=
  <optionspec>::= 
  <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> ::=
  <recovery_option> ::= 
  <service_broker_option> ::=
  <snapshot_option> ::=
  <sql_option> ::= 
  <termination> ::=

-- Azure SQL Database Syntax
ALTER DATABASE database_name 
{
    MODIFY NAME =new_database_name
  | MODIFY ( <edition_options> [, ... n] ) 
  | SET { <set_database_options> } 
}

<edition_options> ::= 
{
      MAXSIZE = { 100 MB | 500 MB |1 | 5 | 10 | 20 | 30 … 150 … 500 } GB  
    | EDITION = { 'web' | 'business' | 'basic' | 'standard' | 'Premium' } 
    | SERVICE_OBJECTIVE = { 'shared' | 'basic' | 'S0' | 'S1' | 'S2' | 'P1' | 'P2' | 'P3' } 
}

<set_database_options> ::= 
    <db_update_option>
<db_update_option> ::= 
    { READ_ONLY | READ_WRITE }
 [;]

参数

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

    备注

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

  • CURRENT

    适用范围:SQL Server 2012 至 SQL Server 2014。

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

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

  • COLLATE collation_name

    适用范围:SQL Server 2008 至 SQL Server 2014。

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

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

  • MODIFY (MAXSIZE = [100 MB | 500 MB | 1 | 5 | 10 | 20 | 30 … 150…500] GB)

    适用范围:Azure SQL Database

    指定数据库的最大大小。 该最大大小必须符合针对数据库的 EDITION 属性的有效值集。 更改数据库的最大大小可能导致更改数据库 EDITION。 下表列出 SQL Database 服务层支持的 MAXSIZE 值和默认值 (D)。

    MAXSIZE

    Web

    Business

    Basic

    Standard

    Premium

    100 MB

    500 MB

    1 GB

    √ (D)

    2 GB

    √ (D)

    5 GB

    10 GB

    √ (D)

    20 GB

    30 GB

    40 GB

    50 GB

    100 GB

    150 GB

    200 GB

    250 GB

    √ (D)

    300 GB

    400 GB

    500 GB

    √ (D)

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

    • MAXSIZE 值(如果指定)必须是上表中显示的有效值。

    • 如果 MAXSIZE 设置为小于 5 GB,并且未指定 EDITION,则数据库版本将自动设置为 Web。

    • 如果 MAXSIZE 设置为大于 5 GB,并且未指定 EDITION,则数据库版本将自动设置为 Business。

    • 如果指定了 EDITION,但未指定 MAXSIZE,则使用版本的默认值。 例如,如果 EDITION 设置为 Standard 并且未指定 MAXSIZE,则 MAXSIZE 将自动设置为 500 MB。

    • 如果 MAXSIZE 和 EDITION 均未指定,则 EDITION 设置为 Web,MAXSIZE 设置为 1 GB。

  • MODIFY (EDITION = [ 'web' | 'business' | 'basic' | 'standard' | 'premium' ] )

    适用范围:Azure SQL Database

    更改数据库的版本。 SQL Database 服务层可以使用 EDITION 参数进行设置或修改。 如果数据库的 MAXSIZE 属性设置为该版本支持的有效范围之外的值,则 EDITION 更改将失败。

    重要说明重要提示

    业务和 Web 服务层将于 2015 年 9 月停用。有关详细信息,请参阅 Web 和 Business 常见问题

  • SERVICE_OBJECTIVE

    适用范围:Azure SQL Database

    指定性能级别。 有关服务目标说明以及大小、版本和服务目标组合的详细信息,请参阅 Azure SQL 数据库服务层和性能级别。 如果 EDITION 不支持指定的 SERVICE_OBJECTIVE,你会收到一个错误。 若要将 SERVICE_OBJECTIVE 值从一层更改为另一层(例如从 S1 更改为 P1),还必须更改 EDITION 值。

  • <db_update_option> ::=

    适用范围:Azure SQL Database

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

    { READ_ONLY | READ_WRITE }

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

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

    备注

    在 SQL Database 联合数据库上,将禁用 SET { READ_ONLY | READ_WRITE }。

<delayed_durability_option> ::=

适用范围:SQL Server 2014 至 SQL Server 2014。

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

<file_and_filegroup_options >::=

有关详细信息,请参阅ALTER DATABASE 文件和文件组选项 (Transact-SQL)

<set_database_options >::=

有关详细信息,请参阅 ALTER DATABASE SET 选项 (Transact-SQL)ALTER DATABASE 数据库镜像 (Transact-SQL)ALTER DATABASE SET HADR (Transact-SQL)ALTER DATABASE 兼容性级别 (Transact-SQL)

注释

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

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

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

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

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

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

OFFLINE

READ_WRITE

ONLINE

MODIFY FILEGROUP DEFAULT

MODIFY_NAME

MODIFY FILEGROUP READ_WRITE

COLLATE

MODIFY FILEGROUP READ_ONLY

READ_ONLY

PAGE_VERIFY

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

在下列情况下,也会刷新过程缓存:

  • 数据库的 AUTO_CLOSE 数据库选项设置为 ON。 在没有用户连接引用或使用该数据库时,后台任务将尝试关闭并自动关闭数据库。

  • 针对具有默认选项的数据库运行多个查询。 然后,删除数据库。

  • 删除源数据库的数据库快照。

  • 您已成功重新生成数据库的事务日志。

  • 还原数据库备份。

  • 分离数据库。

更改数据库排序规则

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

  1. 您是当前数据库的唯一用户。

  2. 没有依赖数据库排序规则的架构绑定对象。

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

    • 通过 SCHEMABINDING 创建的用户定义函数和视图。

    • 计算列。

    • CHECK 约束。

    • 表值函数返回包含字符列的表,这些列继承了默认的数据库排序规则。

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

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

  • 对象名,如过程、表、触发器或视图。

  • 架构名称。

  • 主体,例如组、角色或用户。

  • 标量类型名,如系统和用户定义类型。

  • 全文目录名称。

  • 对象内的列名或参数名。

  • 表范围内的索引名。

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

查看数据库信息

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

权限

SQL Server

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

Azure SQL Database

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

安全说明安全说明

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

示例

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 至 SQL Server 2014。

USE master;
GO

CREATE DATABASE testdb
COLLATE SQL_Latin1_General_CP1_CI_AS ;
GO

ALTER DATABASE testDB
COLLATE French_CI_AI ;
GO

请参阅

参考

CREATE DATABASE (SQL Server Transact-SQL)

DATABASEPROPERTYEX (Transact-SQL)

DROP DATABASE (Transact-SQL)

SET TRANSACTION ISOLATION LEVEL (Transact-SQL)

EVENTDATA (Transact-SQL)

sp_configure (Transact-SQL)

sp_spaceused (Transact-SQL)

sys.databases (Transact-SQL)

sys.database_files (Transact-SQL)

sys.database_mirroring_witnesses (Transact-SQL)

sys.data_spaces (Transact-SQL)

sys.filegroups (Transact-SQL)

sys.master_files (Transact-SQL)

概念

系统数据库