ALTER DATABASE (Transact-SQL)

修改一个数据库或与该数据库关联的文件和文件组。 在数据库中添加或删除文件和文件组、更改数据库的属性或其文件和文件组、更改数据库排序规则和设置数据库选项。 不能修改数据库快照。 若要修改与复制相关的数据库选项,请使用 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 的 AlwaysOn 可用性组 选项的语法,该语法用来在 AlwaysOn 可用性组的辅助副本上配置辅助数据库。

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

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

语法

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> ::=
  <external_access_option> ::=
  <FILESTREAM_options> ::=
  <HADR_options> ::=  
  <parameterization_option> ::=
  <recovery_option> ::= 
  <service_broker_option> ::=
  <snapshot_option> ::=
  <sql_option> ::= 
  <termination> ::=

参数

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

    注意注意

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

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

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

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

    有关 Windows 和 SQL 排序规则名称的详细信息,请参阅 COLLATE (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 Server 2005 或更高版本中,对数据库文件状态(例如,联机或脱机)的维护是独立于数据库状态的。 有关详细信息,请参阅文件状态。 文件组中文件的状态决定整个文件组的可用性。 文件组中的所有文件都必须联机,文件组才可用。 如果文件组脱机,则使用 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 将返回错误消息,指出重复名称所在的命名空间。

查看数据库信息

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

权限

需要对数据库具有 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。

USE master;
GO

CREATE DATABASE testdb
COLLATE SQL_Latin1_General_CP1_CI_AS ;
GO

ALTER DATABASE testDB
COLLATE French_CI_AI ;
GO

请参阅

参考

CREATE DATABASE (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)

概念

系统数据库