在数据库中添加或删除文件和文件组。也可用于更改文件和文件组的属性,例如更改文件的名称和大小。ALTER DATABASE 提供了更改数据库名称、文件组名称以及数据文件和日志文件的逻辑名称的能力。
ALTER DATABASE 支持数据库选项的设置。在早期版本的 Microsoft® SQL Server™ 中,这些选项可以通过 sp_dboption 存储过程来设置。在此次发布的版本中,SQL Server 继续支持 sp_dboption存储过程,但在未来版本中可能不再支持。可使用 DATABASEPROPERTYEX 函数检索数据库选项的当前设置。
ALTER DATABASE database
{ ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ]
| ADD LOG FILE < filespec > [ ,...n ]
| REMOVE FILE logical_file_name
| ADD FILEGROUP filegroup_name | REMOVE FILEGROUP filegroup_name
| MODIFY FILE < filespec >
| MODIFY NAME = new_dbname | MODIFY FILEGROUP filegroup_name {filegroup_property | NAME = new_filegroup_name }
|
SET < optionspec > [ ,...n ] [ WITH < termination > ]
| COLLATE < collation_name >
}
database
是要更改的数据库的名称。
ADD FILE
指定要添加文件。
TO FILEGROUP
指定要将指定文件添加到的文件组。
filegroup_name
是要添加指定文件的文件组名称。
ADD LOG FILE
指定要将日志文件添加到指定的数据库。
REMOVE FILE
从数据库系统表中删除文件描述并删除物理文件。只有在文件为空时才能删除。
ADD FILEGROUP
指定要添加文件组。
filegroup_name
是要添加或除去的文件组名称。
REMOVE FILEGROUP
从数据库中删除文件组并删除该文件组中的所有文件。只有在文件组为空时才能删除。
MODIFY FILE
指定要更改给定的文件,更改选项包括 FILENAME、SIZE、FILEGROWTH 和 MAXSIZE。一次只能更改这些属性中的一种。必须在 <filespec> 中指定 NAME,以标识要更改的文件。如果指定了 SIZE,那么新大小必须比文件当前大小要大。只能为 tempdb 数据库中的文件指定 FILENAME,而且新名称只有在 Microsoft SQL Server 重新启动后才能生效。
若要更改数据文件或日志文件的逻辑名称,应在 NAME 选项中指定要改名的逻辑文件名称,并在 NEWNAME 选项中指定文件的新逻辑名称。
示例如下:
MODIFY FILE (NAME = logical_file_name, NEWNAME = new_logical_name...)。
可同时运行几个 ALTER DATABASE database MODIFY FILE 语句以实现多个修改文件操作时性能最优。
MODIFY NAME = new_dbname
重命名数据库。
MODIFY FILEGROUP filegroup_name { filegroup_property | NAME = new_filegroup_name }
指定要修改的文件组和所需的改动。
如果指定 filegroup_name 和 NAME = new_filegroup_name,则将此文件组的名称改为 new_filegroup_name。
如果指定 filegroup_name 和 filegroup_property,则表示给定文件组属性将应用于此文件组。filegroup_property 的值有:
WITH <termination>
指定当数据库从一种状态转换到另一种状态时,何时回滚未完成的事务。只能指定一条 termination 子句,而且该子句应跟在 SET 子句后面。
COLLATE < collation_name >
指定数据库的排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。如果没有指定排序规则,则将 SQL Server 实例的默认排序规则指派为数据库的排序规则。
有关 Windows 和 SQL 排序规则名称的更多信息,请参见 COLLATE。
<filespec>
控制文件属性。
如果文件位于原始分区上,那么 os_file_name 必须仅指定该原始分区的驱动器字母。每个原始分区上只能存放一个文件。原始分区上的文件不会自动增长;因此,os_file_name 指定原始分区时,不需要指定 MAXSIZE 和 FILEGROWTH 参数。
<state_option>
控制用户对数据库的访问,数据库是否处于联机状态,以及是否允许写操作。
<cursor_option>
控制游标选项。
<auto_option>
控制自动选项。
<sql_option>
控制 ANSI 遵从性选项。
<recovery_options>
控制数据库恢复选项。
如果指定为 BULK_LOGGED,将在介质错误保护程度与某些大规模或大容量操作的最优性能及日志存储空间最少占用量之间进行权衡。这些操作包括 SELECT INTO、大容量装载操作(bcp 和 BULK INSERT)、CREATE INDEX 以及文本和图象操作(WRITETEXT 和 UPDATETEXT)。
在大容量日志记录恢复模型下,对整个类只做最少的日志记录,并且无法逐个操作地控制日志记录行为。
如果指定为 SIMPLE,系统将提供占用日志空间最小的备份策略。服务器故障恢复不再需要的日志空间可被自动重用。
重要 简单恢复模型比其它两种模型更容易管理,但数据文件损坏时造成数据丢失的可能性更大。最近的数据库备份或差异数据库备份之后的更改都将丢失,必须手工重新输入。
默认恢复模型由 model 数据库的恢复模型确定。若要更改新数据库的默认值,请用 ALTER DATABASE 设置 model 数据库的恢复选项。
若要删除数据库,请使用 DROP DATABASE 语句。若要更改数据库名称,请使用 sp_renamedb。有关减小数据库大小的更多信息,请参见 DBCC SHRINKDATABASE。
在对数据库应用不同的或新的排序规则时,应确保符合以下条件:
如果数据库中存在以下依赖数据库排序规则的对象,则 ALTER DATABASE database COLLATE 语句将失败。SQL Server 将针对每一个阻塞 ALTER 操作的对象返回一个错误信息:
如果改变排序规则后出现重复的名称,则下列命名空间可能导致改变数据库排序规则的操作失败:
由新的排序规则产生的重复名称将导致改变操作失败,SQL Server 将返回错误信息,指出重复名称所在的命名空间。
当 BACKUP 语句正在执行时,不能添加或删除文件。
若要在 size 参数中指定兆字节的分数,应通过乘以数字 1024 将该值转换为千字节。例如,应指定 1536 KB 而不是 1.5MB(1.5 x 1024 = 1536)。
ALTER DATABASE 权限默认授予 sysadmin 和 dbcreator 固定服务器角色成员以及 db_owner 固定数据库角色成员。这些权限是不可传递的。
下例创建数据库,并更改该数据库以添加一个 5 MB 大小的新数据文件。
USE master
GO
CREATE DATABASE Test1 ON
(
NAME = Test1dat1,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat1.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
GO
ALTER DATABASE Test1
ADD FILE
(
NAME = Test1dat2,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat2.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
GO
下例在示例 A 中所创建的 Test1 数据库中创建一个文件组,并将两个 5 MB 的文件添加到该文件组。然后下例将 Test1FG1 设置为默认文件组。
USE master
GO
ALTER DATABASE Test1
ADD FILEGROUP Test1FG1
GO
ALTER DATABASE Test1
ADD FILE
( NAME = test1dat3,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat3.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB),
( NAME = test1dat4,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat4.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
TO FILEGROUP Test1FG1
ALTER DATABASE Test1
MODIFY FILEGROUP Test1FG1 DEFAULT
GO
下例向数据库中添加两个 5 MB 大小的日志文件。
USE master
GO
ALTER DATABASE Test1
ADD LOG FILE
( NAME = test1log2,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\test2log.ldf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB),
( NAME = test1log3,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\test3log.ldf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)
GO
下例将示例 B 中添加到数据库 Test1 中的一个文件删除。
USE master
GO
ALTER DATABASE Test1
REMOVE FILE test1dat4
GO
下例将示例 B 中添加到数据库 Test1 中的一个文件增加大小。
USE master
GO
ALTER DATABASE Test1
MODIFY FILE
(NAME = test1dat3,
SIZE = 20MB)
GO
假定原来另一个文件组设置为默认文件组,下例将主文件组设置为默认文件组。
USE master
GO
ALTER DATABASE MyDatabase
MODIFY FILEGROUP [PRIMARY] DEFAULT
GO
相关文章