在數(shù)據(jù)庫中添加或刪除文件和文件組。也可用于更改文件和文件組的屬性,例如更改文件的名稱和大小。ALTER DATABASE 提供了更改數(shù)據(jù)庫名稱、文件組名稱以及數(shù)據(jù)文件和日志文件的邏輯名稱的能力。
ALTER DATABASE 支持?jǐn)?shù)據(jù)庫選項(xiàng)的設(shè)置。在早期版本的 Microsoft® SQL Server™ 中,這些選項(xiàng)可以通過 sp_dboption 存儲(chǔ)過程來設(shè)置。在此次發(fā)布的版本中,SQL Server 繼續(xù)支持 sp_dboption存儲(chǔ)過程,但在未來版本中可能不再支持。可使用 DATABASEPROPERTYEX 函數(shù)檢索數(shù)據(jù)庫選項(xiàng)的當(dāng)前設(shè)置。
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
是要更改的數(shù)據(jù)庫的名稱。
ADD FILE
指定要添加文件。
TO FILEGROUP
指定要將指定文件添加到的文件組。
filegroup_name
是要添加指定文件的文件組名稱。
ADD LOG FILE
指定要將日志文件添加到指定的數(shù)據(jù)庫。
REMOVE FILE
從數(shù)據(jù)庫系統(tǒng)表中刪除文件描述并刪除物理文件。只有在文件為空時(shí)才能刪除。
ADD FILEGROUP
指定要添加文件組。
filegroup_name
是要添加或除去的文件組名稱。
REMOVE FILEGROUP
從數(shù)據(jù)庫中刪除文件組并刪除該文件組中的所有文件。只有在文件組為空時(shí)才能刪除。
MODIFY FILE
指定要更改給定的文件,更改選項(xiàng)包括 FILENAME、SIZE、FILEGROWTH 和 MAXSIZE。一次只能更改這些屬性中的一種。必須在 <filespec> 中指定 NAME,以標(biāo)識(shí)要更改的文件。如果指定了 SIZE,那么新大小必須比文件當(dāng)前大小要大。只能為 tempdb 數(shù)據(jù)庫中的文件指定 FILENAME,而且新名稱只有在 Microsoft SQL Server 重新啟動(dòng)后才能生效。
若要更改數(shù)據(jù)文件或日志文件的邏輯名稱,應(yīng)在 NAME 選項(xiàng)中指定要改名的邏輯文件名稱,并在 NEWNAME 選項(xiàng)中指定文件的新邏輯名稱。
示例如下:
MODIFY FILE (NAME = logical_file_name, NEWNAME = new_logical_name...)。
可同時(shí)運(yùn)行幾個(gè) ALTER DATABASE database MODIFY FILE 語句以實(shí)現(xiàn)多個(gè)修改文件操作時(shí)性能最優(yōu)。
MODIFY NAME = new_dbname
重命名數(shù)據(jù)庫。
MODIFY FILEGROUP filegroup_name { filegroup_property | NAME = new_filegroup_name }
指定要修改的文件組和所需的改動(dòng)。
如果指定 filegroup_name 和 NAME = new_filegroup_name,則將此文件組的名稱改為 new_filegroup_name。
如果指定 filegroup_name 和 filegroup_property,則表示給定文件組屬性將應(yīng)用于此文件組。filegroup_property 的值有:
WITH <termination>
指定當(dāng)數(shù)據(jù)庫從一種狀態(tài)轉(zhuǎn)換到另一種狀態(tài)時(shí),何時(shí)回滾未完成的事務(wù)。只能指定一條 termination 子句,而且該子句應(yīng)跟在 SET 子句后面。
COLLATE < collation_name >
指定數(shù)據(jù)庫的排序規(guī)則。排序規(guī)則名稱既可以是 Windows 排序規(guī)則名稱,也可以是 SQL 排序規(guī)則名稱。如果沒有指定排序規(guī)則,則將 SQL Server 實(shí)例的默認(rèn)排序規(guī)則指派為數(shù)據(jù)庫的排序規(guī)則。
有關(guān) Windows 和 SQL 排序規(guī)則名稱的更多信息,請(qǐng)參見 COLLATE。
<filespec>
控制文件屬性。
如果文件位于原始分區(qū)上,那么 os_file_name 必須僅指定該原始分區(qū)的驅(qū)動(dòng)器字母。每個(gè)原始分區(qū)上只能存放一個(gè)文件。原始分區(qū)上的文件不會(huì)自動(dòng)增長;因此,os_file_name 指定原始分區(qū)時(shí),不需要指定 MAXSIZE 和 FILEGROWTH 參數(shù)。
<state_option>
控制用戶對(duì)數(shù)據(jù)庫的訪問,數(shù)據(jù)庫是否處于聯(lián)機(jī)狀態(tài),以及是否允許寫操作。
<cursor_option>
控制游標(biāo)選項(xiàng)。
<auto_option>
控制自動(dòng)選項(xiàng)。
<sql_option>
控制 ANSI 遵從性選項(xiàng)。
<recovery_options>
控制數(shù)據(jù)庫恢復(fù)選項(xiàng)。
如果指定為 BULK_LOGGED,將在介質(zhì)錯(cuò)誤保護(hù)程度與某些大規(guī)?;虼笕萘坎僮鞯淖顑?yōu)性能及日志存儲(chǔ)空間最少占用量之間進(jìn)行權(quán)衡。這些操作包括 SELECT INTO、大容量裝載操作(bcp 和 BULK INSERT)、CREATE INDEX 以及文本和圖象操作(WRITETEXT 和 UPDATETEXT)。
在大容量日志記錄恢復(fù)模型下,對(duì)整個(gè)類只做最少的日志記錄,并且無法逐個(gè)操作地控制日志記錄行為。
如果指定為 SIMPLE,系統(tǒng)將提供占用日志空間最小的備份策略。服務(wù)器故障恢復(fù)不再需要的日志空間可被自動(dòng)重用。
重要 簡單恢復(fù)模型比其它兩種模型更容易管理,但數(shù)據(jù)文件損壞時(shí)造成數(shù)據(jù)丟失的可能性更大。最近的數(shù)據(jù)庫備份或差異數(shù)據(jù)庫備份之后的更改都將丟失,必須手工重新輸入。
默認(rèn)恢復(fù)模型由 model 數(shù)據(jù)庫的恢復(fù)模型確定。若要更改新數(shù)據(jù)庫的默認(rèn)值,請(qǐng)用 ALTER DATABASE 設(shè)置 model 數(shù)據(jù)庫的恢復(fù)選項(xiàng)。
若要?jiǎng)h除數(shù)據(jù)庫,請(qǐng)使用 DROP DATABASE 語句。若要更改數(shù)據(jù)庫名稱,請(qǐng)使用 sp_renamedb。有關(guān)減小數(shù)據(jù)庫大小的更多信息,請(qǐng)參見 DBCC SHRINKDATABASE。
在對(duì)數(shù)據(jù)庫應(yīng)用不同的或新的排序規(guī)則時(shí),應(yīng)確保符合以下條件:
如果數(shù)據(jù)庫中存在以下依賴數(shù)據(jù)庫排序規(guī)則的對(duì)象,則 ALTER DATABASE database COLLATE 語句將失敗。SQL Server 將針對(duì)每一個(gè)阻塞 ALTER 操作的對(duì)象返回一個(gè)錯(cuò)誤信息:
如果改變排序規(guī)則后出現(xiàn)重復(fù)的名稱,則下列命名空間可能導(dǎo)致改變數(shù)據(jù)庫排序規(guī)則的操作失?。?/P>
由新的排序規(guī)則產(chǎn)生的重復(fù)名稱將導(dǎo)致改變操作失敗,SQL Server 將返回錯(cuò)誤信息,指出重復(fù)名稱所在的命名空間。
當(dāng) BACKUP 語句正在執(zhí)行時(shí),不能添加或刪除文件。
若要在 size 參數(shù)中指定兆字節(jié)的分?jǐn)?shù),應(yīng)通過乘以數(shù)字 1024 將該值轉(zhuǎn)換為千字節(jié)。例如,應(yīng)指定 1536 KB 而不是 1.5MB(1.5 x 1024 = 1536)。
ALTER DATABASE 權(quán)限默認(rèn)授予 sysadmin 和 dbcreator 固定服務(wù)器角色成員以及 db_owner 固定數(shù)據(jù)庫角色成員。這些權(quán)限是不可傳遞的。
下例創(chuàng)建數(shù)據(jù)庫,并更改該數(shù)據(jù)庫以添加一個(gè) 5 MB 大小的新數(shù)據(jù)文件。
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 中所創(chuàng)建的 Test1 數(shù)據(jù)庫中創(chuàng)建一個(gè)文件組,并將兩個(gè) 5 MB 的文件添加到該文件組。然后下例將 Test1FG1 設(shè)置為默認(rèn)文件組。
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
下例向數(shù)據(jù)庫中添加兩個(gè) 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 中添加到數(shù)據(jù)庫 Test1 中的一個(gè)文件刪除。
USE master
GO
ALTER DATABASE Test1
REMOVE FILE test1dat4
GO
下例將示例 B 中添加到數(shù)據(jù)庫 Test1 中的一個(gè)文件增加大小。
USE master
GO
ALTER DATABASE Test1
MODIFY FILE
(NAME = test1dat3,
SIZE = 20MB)
GO
假定原來另一個(gè)文件組設(shè)置為默認(rèn)文件組,下例將主文件組設(shè)置為默認(rèn)文件組。
USE master
GO
ALTER DATABASE MyDatabase
MODIFY FILEGROUP [PRIMARY] DEFAULT
GO
相關(guān)文章