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 兼容级别
介绍了 ALTER DATABASE 与数据库兼容级别相关的 SET 选项的语法。
语法
ALTER DATABASE database_name
{
| 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> ::= <parameterization_option> ::= <recovery_option> ::= <service_broker_option> ::= <snapshot_option> ::= <sql_option> ::= <termination> ::=
参数
database_name
要修改的数据库的名称。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)。
注释
若要删除数据库,请使用 DROP DATABASE。
若要减小数据库的大小,请使用 DBCC SHRINKDATABASE。
ALTER DATABASE 语句必须在自动提交模式(默认事务管理模式)下运行,且不允许用于显式或隐式事务中。有关详细信息,请参阅自动提交事务。
在 SQL Server 2005 或更高版本中,对数据库文件状态(例如,联机或脱机)的维护是独立于数据库状态的。有关详细信息,请参阅文件状态。文件组中文件的状态决定整个文件组的可用性。文件组中的所有文件都必须联机,文件组才可用。如果文件组脱机,则使用 SQL 语句访问文件组的所有尝试都会失败并报告错误。在为 SELECT 语句生成查询计划时,查询优化器会避免驻留在脱机文件组中的非聚集索引和索引视图。这样,这些语句就会成功。但是,如果脱机文件组包含目标表的堆或聚集索引,SELECT 语句将失败。此外,如果 INSERT、UPDATE 或 DELETE 语句修改的表的索引包含在脱机文件组中,这些语句将失败。
当数据库处于 RESTORING 状态时,多数 ALTER DATABASE 语句都将失败。设置数据库镜像选项除外。在活动还原操作期间,或者当数据库还原操作或日志文件还原操作由于备份文件损坏而失败时,数据库可以处于 RESTORING 状态。有关详细信息,请参阅应对由损坏的备份导致的 SQL Server 还原错误。
通过设置以下选项之一来清除 SQL Server 实例的计划缓存:
OFFLINE |
READ_WRITE |
ONLINE |
MODIFY FILEGROUP DEFAULT |
MODIFY_NAME |
MODIFY FILEGROUP READ_WRITE |
COLLATE |
MODIFY FILEGROUP READ_ONLY |
READ_ONLY |
|
清除计划缓存将导致对所有后续执行计划进行重新编译,并可能导致查询性能暂时性地突然降低。对于计划缓存中每个已清除的缓存存储区,SQL Server 错误日志包含以下信息性消息:“由于某些数据库维护或重新配置操作,SQL Server 经历了 '%s' 缓存存储区(计划缓存的一部分)的 %d 次刷新”。只要每五分钟刷新一次缓存,此消息就将每五分钟记录一次。
更改数据库排序规则
在对数据库应用不同排序规则之前,请确保已满足下列条件:
您是当前数据库的唯一用户。
没有依赖数据库排序规则的架构绑定对象。
如果数据库中存在下列依赖于数据库排序规则的对象,则 ALTER DATABASEdatabase_nameCOLLATE 语句将失败。SQL Server 将对每个阻塞 ALTER 操作的对象返回一条错误消息:
通过 SCHEMABINDING 创建的用户定义函数和视图。
计算列。
CHECK 约束。
表值函数返回包含字符列的表,这些列继承了默认的数据库排序规则。
数据库排序规则更改时,非绑定到架构的实体的依赖关系信息将自动更新。有关详细信息,请参阅了解 SQL 依赖关系。
改变数据库的排序规则不会在任何数据对象的系统名称中产生重复名称。
如果改变排序规则后出现重复的名称,则下列命名空间可能导致改变数据库排序规则的操作失败:
对象名,如过程、表、触发器或视图。
架构名称
主体,例如组、角色或用户。
标量类型名,如系统和用户定义类型。
全文目录名称。
对象内的列名或参数名。
表范围内的索引名。
由新的排序规则产生的重复名称将导致更改操作失败,SQL Server 将返回错误消息,指出重复名称所在的命名空间。
查看数据库信息
可以使用目录视图、系统函数和系统存储过程返回有关数据库、文件和文件组的信息。有关详细信息,请参阅查看数据库元数据。
权限
需要对数据库具有 ALTER 权限。
示例
A. 更改数据库的名称
以下示例将 AdventureWorks2008R2 数据库的名称更改为 Northwind。
USE master;
GO
ALTER DATABASE AdventureWorks2008R2
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
请参阅