簡介
創建一個新資料庫及存儲該資料庫的檔案,或從先前創建的資料庫的檔案中附加資料庫。
語法
CREATE DATABASE database_name
[ ON
[ < filespec > [ ,...n ] ]
[ ,< filegroup > [ ,...n ] ]
]
[ LOG ON { < filespec > [ ,...n ] } ]
[ COLLATE collation_name ]
[ FOR LOAD | FOR ATTACH ]
< filespec > ::=
[ PRIMARY ]
([ NAME =logical_file_name ,]
FILENAME ='os_file_name'
[ ,SIZE =size ]
[ ,MAXSIZE ={ max_size| UNLIMITED } ]
[ ,FILEGROWTH =growth_increment ] )[ ,...n]
< filegroup > ::=
FILEGROUP filegroup_name< filespec > [ ,...n]
參數
database_name
新資料庫的名稱。資料庫名稱在伺服器中必須唯一,並且符合
標識符的規則。
database_name最多可以包含 128 個字元,除非沒有為日誌指定邏輯名。如果沒有指定日誌檔案的邏輯名,則 Microsoft® SQL Server™ 會通過向
database_name追加後綴來生成邏輯名。該操作要求
database_name在 123 個字元之內,以便生成的日誌檔案邏輯名少於 128 個字元。
ON
指定顯式定義用來存儲資料庫數據部分的磁碟檔案(數據檔案)。該關鍵字後跟以逗號分隔的 <filespec> 項列表,<filespec> 項用以定義主檔案組的數據檔案。主
檔案組的檔案列表後可跟以逗號分隔的 <filegroup> 項列表(可選),<filegroup> 項用以定義用戶檔案組及其檔案。
n
LOG ON
指定顯式定義用來存儲資料庫日誌的磁碟檔案(日誌檔案)。該關鍵字後跟以逗號分隔的 <filespec> 項列表,<filespec> 項用以定義日誌檔案。如果沒有指定 LOG ON,將自動創建一個日誌檔案,該檔案使用系統生成的名稱,大小為資料庫中所有數據檔案總大小的 25%。
FOR LOAD
支持該子句是為了與早期版本的 Microsoft SQL Server 兼容。資料庫在打開 dbo use only資料庫選項的情況下創建,並且將其狀態設定為正在裝載。SQL Server 7.0 版中不需要該子句,因為 RESTORE 語句可以作為還原操作的一部分重新創建資料庫。
FOR ATTACH
指定從現有的一組作業系統檔案中附加資料庫。必須有指定第一個主檔案的 <filespec> 條目。至於其它 <filespec> 條目,只需要與第一次創建資料庫或上一次附加資料庫時路徑不同的檔案的那些條目。必須為這些檔案指定 <filespec> 條目。附加的資料庫必須使用與 SQL Server 相同的
代碼頁和排序次序創建。應使用
sp_attach_db系統
存儲過程,而不要直接使用 CREATE DATABASE FOR ATTACH。只有必須指定 16 個以上的 <filespec> 項目時,才需要使用 CREATE DATABASE FOR ATTACH。
如果將資料庫附加到的伺服器不是該資料庫從中分離的伺服器,並且啟用了分離的資料庫以進行複製,則應該運行 sp_removedbreplication從資料庫刪除複製。
collation_name
指定資料庫的默認排序規則。排序規則名稱既可以是 Windows 排序規則名稱,也可以是 SQL 排序規則名稱。如果沒有指定排序規則,則將 SQL Server 實例的默認排序規則指派為資料庫的排序規則。
有關 Windows 和 SQL 排序規則名稱的更多信息,請參見
COLLATE。
PRIMARY
指定關聯的 <filespec> 列表定義主檔案。主檔案組包含所有
資料庫系統表。還包含所有未指派給用戶
檔案組的對象。主檔案組的第一個 <filespec> 條目成為主檔案,該檔案包含資料庫的邏輯起點及其系統表。一個資料庫只能有一個主檔案。如果沒有指定 PRIMARY,那么 CREATE DATABASE 語句中列出的第一個檔案將成為主檔案。
NAME
為由 <filespec> 定義的檔案指定邏輯名稱。如果指定了 FOR ATTACH,則不需要指定 NAME 參數。
logical_file_name
用來在創建資料庫後執行的 Transact-SQL 語句中引用檔案的名稱。
logical_file_name在資料庫中必須唯一,並且符合
標識符的規則。該名稱可以是字元或 Unicode 常量,也可以是常規標識符或定界標識符。
FILENAME
為 <filespec> 定義的檔案指定作業系統檔案名稱。
'os_file_name'
作業系統創建 <filespec> 定義的物理檔案時使用的路徑名和檔案名稱。
os_file_name中的路徑必須指定 SQL Server 實例上的目錄。
os_file_name不能指定
壓縮檔案系統中的目錄。
如果檔案在原始分區上創建,則 os_file_name必須只指定現有原始分區的驅動器字母。每個原始分區上只能創建一個檔案。原始分區上的檔案不會自動增長;因此,os_file_name指定原始分區時,不需要指定 MAXSIZE 和 FILEGROWTH 參數。
指定 <filespec> 中定義的檔案的大小。如果主檔案的 <filespec> 中沒有提供 SIZE 參數,那么 SQL Server 將使用 model資料庫中的主檔案大小。如果次要檔案或日誌檔案的 <filespec> 中沒有指定 SIZE 參數,則 SQL Server 將使檔案大小為 1 MB。
size
<filespec> 中定義的檔案的初始大小。可以使用
千位元組 (KB)、
兆位元組 (MB)、千兆位元組 (GB) 或兆兆位元組 (TB) 後綴。默認值為 MB。指定一個整數,不要包含小數位。
size的最小值為 512 KB。如果沒有指定
size,則默認值為 1 MB。為主檔案指定的大小至少應與
model資料庫的主檔案大小相同。
MAXSIZE
指定 <filespec> 中定義的檔案可以增長到的最大大小。
max_size
<filespec> 中定義的檔案可以增長到的最大大小。可以使用
千位元組 (KB)、
兆位元組 (MB)、千兆位元組 (GB) 或兆兆位元組 (TB) 後綴。默認值為 MB。指定一個整數,不要包含小數位。如果沒有指定
max_size,那么檔案將增長到磁碟變滿為止
說明在磁碟即將變滿時,Microsoft Windows NT® S/B 系統日誌會警告 SQL Server
系統管理員。
UNLIMITED
指定 <filespec> 中定義的檔案將增長到磁碟變滿為止。
FILEGROWTH
指定 <filespec> 中定義的檔案的增長增量。檔案的 FILEGROWTH 設定不能超過 MAXSIZE 設定。
growth_increment
每次需要新的空間時為檔案添加的空間大小。指定一個整數,不要包含小數位。0 值表示不增長。該值可以 MB、KB、GB、TB 或百分比 (%) 為單位指定。如果未在數量後面指定 MB、KB 或 %,則默認值為 MB。如果指定 %,則增量大小為發生增長時檔案大小的指定百分比。如果沒有指定 FILEGROWTH,則默認值為 10%,最小值為 64 KB。指定的大小
捨入為最接近的 64 KB 的倍數。
注釋
使用一條 CREATE DATABASE 語句即可創建資料庫以及存儲該資料庫的檔案。SQL Server 分兩步實現 CREATE DATABASE 語句:SQL Server 使用
model 資料庫的複本初始化資料庫及其
元數據。
然後,SQL Server 使用空頁填充資料庫的剩餘部分,除了包含記錄資料庫中空間使用情況以外的內部數據頁。因此,
model資料庫中任何用戶定義對象均複製到所有新創建的資料庫中。可以向
model資料庫中添加任何對象,例如表、視圖、
存儲過程、數據類型等,以將這些對象添加到所有資料庫中。
每個新資料庫都從 model 資料庫繼承資料庫選項設定(除非指定了 FOR ATTACH)。例如,在 model和任何創建的新資料庫中,資料庫選項 select into/bulkcopy都設定為 OFF。如果使用 ALTER DATABASE 更改 model資料庫的選項,則這些選項設定會在創建的新資料庫中生效。如果在 CREATE DATABASE 語句中指定了 FOR ATTACH,則新資料庫將繼承原始資料庫的資料庫選項設定。
一台
伺服器上最多可以指定 32,767 個資料庫。
有三種類型的檔案用來存儲資料庫:主檔案包含資料庫的啟動信息。主檔案還可以用來存儲數據。每個資料庫都包含一個主檔案。
次要檔案保存所有
主要數據檔案中容納不下的數據。如果主檔案大到足以容納資料庫中的所有數據,就不需要有
次要數據檔案。而另一些資料庫可能非常大,需要多個次要數據檔案,也可能使用多個獨立
磁碟驅動器上的次要檔案,以將數據分布在多個磁碟上。
事務日誌檔案保存用來恢複數據庫的日誌信息。每個資料庫必須至少有一個事務日誌檔案(儘管可以有多個)。事務日誌檔案最小為 512 KB。每個資料庫至少有兩個檔案,一個主檔案和一個事務日誌檔案。
儘管 'os_file_name'可以是任何有效的作業系統檔案名稱,但如果使用以下建議的擴展名,則可以更加清楚地反映檔案的用途。
說明創建用戶資料庫後,應備份 master資料庫。
SIZE、MAXSIZE 和 FILEGROWTH 參數中不能指定分數。若要在 SIZE 參數中指定以
兆位元組為單位的分數,請將該數字乘以 1,024 轉換成
千位元組。例如,指定 1,536 KB 而不要指定 1.5 MB(1.5 乘以 1,024 等於 1,536)。
如果僅指定 CREATE DATABASE database_name語句而不帶其它參數,那么資料庫的大小將與 model資料庫的大小相等。
所有資料庫都至少包含一個主檔案組。所有系統表都分配在主檔案組中。資料庫還可以包含用戶定義的
檔案組。如果使用指定用戶定義檔案組的 ON
filegroup子句創建對象,則該對象的所有頁均從指定的檔案組中分配。所有沒有使用 ON
filegroup子句(或者使用 ON DEFAULT 子句)創建的用戶對象的頁將從默認檔案組分配。資料庫首次創建時,主檔案組就是默認檔案組。可以使用 ALTER DATABASE 將用戶定義的檔案組指定為默認檔案組:
ALTER DATABASE database_name MODIFY FILEGROUP filegroup_name DEFAULT 每個資料庫都有一個所有者,可在該資料庫中執行某些特殊的活動。所有者是創建資料庫的用戶。可以使用 sp_changedbowner更改資料庫所有者。
若要為 SQL Server 實例顯示某個資料庫或所有資料庫的報表,請執行
sp_helpdb。若要顯示有關資料庫中所占用空間的報表,請使用
sp_spaceused。若要顯示有關資料庫中
檔案組的報表,請使用
sp_helpfilegroup,使用
sp_helpfile可顯示資料庫中檔案的報表。
早期版本的 SQL Server 使用 DISK INIT 語句在執行 CREATE DATABASE 語句之前為資料庫創建檔案。為了與早期版本的 SQL Server 向後兼容,CREATE DATABASE 語句也可以在用 DISK INIT 創建的檔案或設備上創建新資料庫。有關更多信息,請參見 SQL Server 向後兼容性詳細信息。
許可權
CREATE DATABASE 的許可權默認地授予 sysadmin和 dbcreator固定伺服器角色的成員。sysadmin和 securityadmin固定伺服器角色的成員可以將 CREATE DATABASE 許可權授予其它登錄。sysadmin和 dbcreator固定伺服器角色的成員可以為 dbcreator角色添加其它登錄。CREATE DATABASE 許可權必須顯式授予,而不能通過 GRANT ALL 語句授予。
CREATE DATABASE 許可權通常限於少數登錄,以便控制對運行 SQL Server 實例的計算機上磁碟的使用。
示例
A. 創建指定數據檔案和事務日誌檔案的資料庫下面的示例創建名為
Sales的資料庫。因為沒有使用關鍵字 PRIMARY,第一個檔案 (
Sales_dat) 成為主檔案。因為
Sales_dat檔案的 SIZE 參數沒有指定 MB 或 KB,因此默認為 MB,以
兆位元組為單位進行分配。
Sales_log檔案以兆位元組為單位進行分配,因為 SIZE 參數中顯式聲明了 MB 後綴。
USE master
GO
CREATE DATABASE Sales
ON PRIMARY
(NAME = Sales_dat,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\saledat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5)
LOG ON
(NAME = Sales_log,
FILENAME = 'c:\program files\microsoft sql server\
mssql\data\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB)
GO
下面的示例使用三個 100 MB 的數據檔案和兩個 100 MB 的事務日誌檔案創建了名為
Archive的資料庫。主檔案是列表中的第一個檔案,並使用 PRIMARY 關鍵字顯式指定。事務日誌檔案在 LOG ON 關鍵字後指定。注意 FILENAME 選項中所用的檔案擴展名:
主要數據檔案使用 .mdf,
次要數據檔案使用 .
ndf,
事務日誌檔案使用 .ldf。
USE master GOCREATE DATABASE Archive ONPRIMARY (NAME = Arch1,FILENAME = 'c:\program files\microsoft sql server\
mssql\data\archdat1.mdf',SIZE = 100MB,MAXSIZE = 200,FILEGROWTH = 20),(NAME = Arch2,FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat2.ndf',SIZE = 100MB,MAXSIZE = 200,FILEGROWTH = 20),(NAME = Arch3,FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat3.ndf',SIZE = 100MB,MAXSIZE = 200,FILEGROWTH = 20)LOG ON (NAME = Archlog1,FILENAME = 'c:\program files\microsoft sql server\
mssql\data\archlog1.ldf',SIZE = 100MB,MAXSIZE = 200,FILEGROWTH = 20),(NAME = Archlog2,FILENAME = 'c:\program files\microsoft sql server\mssql\data\archlog2.ldf',SIZE = 100MB,MAXSIZE = 200,FILEGROWTH = 20)GO
C. 創建簡單的資料庫本例創建名為
Products的資料庫,並指定單個檔案。指定的檔案成為主檔案,並會自動創建一個 1 MB 的
事務日誌檔案。因為主檔案的
SIZE參數中沒有指定 MB 或 KB,所以主檔案將以
兆位元組為單位進行分配。因為沒有為事務日誌檔案指定 <filespec>;,所以事務日誌檔案沒有 MAXSIZE,可以增長到填滿所有可用的磁碟空間為止。
USE master
GO
CREATE DATABASE Products
ON
(NAME = prods_dat,
FILENAME = 'c:\program files\microsoft sql server\
mssql\data\prods.mdf',
SIZE = 4,
MAXSIZE = 10,
FILEGROWTH = 1)
GO
D. 不指定檔案創建資料庫
下面的示例創建名為
mytest 的資料庫,並創建相應的主檔案和
事務日誌檔案。因為該語句沒有 <filespec> 項,所以主資料庫檔案的大小為
model資料庫主檔案的大小。事務日誌檔案的大小為 model
資料庫事務日誌檔案的大小。因為沒有指定 MAXSIZE,檔案可以增長到填滿所有可用的磁碟空間為止。
CREATE DATABASE mytest
E. 不指定 SIZE 創建資料庫
下面的示例創建名為
products2 的資料庫。檔案
prods2_dat將成為主檔案,大小等於
model資料庫中主檔案的大小。
事務日誌檔案會自動創建,其大小為主檔案大小的 25% 或 512 KB 中的較大值。因為沒有指定 MAXSIZE,檔案可以增長到填滿所有可用的磁碟空間為止。
USE master
GO
CREATE DATABASE Products2
ON
(NAME = prods2_dat,
FILENAME = 'c:\program files\microsoft sql server\
mssql\data\prods2.mdf')
GO
下面的示例使用三個檔案組創建名為 sales 的資料庫:主檔案組包含檔案 Spri1_dat 和 Spri2_dat。指定這些檔案的 FILEGROWTH 增量為 15%。
名為 SalesGroup1 的檔案組包含檔案 SGrp1Fi1 和 SGrp1Fi2。
名為 SalesGroup2 的檔案組包含檔案 SGrp2Fi1 和 SGrp2Fi2。
CREATE DATABASE Sales ON PRIMARY(NAME = SPri1_dat,FILENAME = 'c:\program files\microsoft sql server\mssql\data\SPri1dat.mdf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 15%),(NAME = SPri2_dat,FILENAME = 'c:\program files\microsoft sql server\
mssql\data\SPri2dt.ndf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 15%),FILEGROUP SalesGroup1 (NAME = SGrp1Fi1_dat,FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG1Fi1dt.ndf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 5),(NAME = SGrp1Fi2_dat,FILENAME = 'c:\program files\microsoft sql server\
mssql\data\SG1Fi2dt.ndf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 5),FILEGROUP SalesGroup2 (NAME = SGrp2Fi1_dat,FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG2Fi1dt.ndf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 5),(NAME = SGrp2Fi2_dat,FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG2Fi2dt.ndf',SIZE = 10,MAXSIZE = 50,FILEGROWTH = 5)LOG ON(NAME = 'Sales_log',FILENAME = 'c:\program files\microsoft sql server\
mssql\data\salelog.ldf',SIZE = 5MB,MAXSIZE = 25MB,FILEGROWTH = 5MB)GO
G. 附加資料庫
示例 B 創建一個包含下列物理檔案的名為 Archive 的資料庫:
c:\program files\microsoft sql server\mssql\data\archdat1.mdf
c:\program files\microsoft sql server\
mssql\data\archdat2.ndf
c:\program files\microsoft sql server\mssql\data\archdat3.ndf
c:\program files\microsoft sql server\mssql\data\archlog1.ldf
c:\program files\microsoft sql server\mssql\data\archlog2.ldf
可以使用
sp_detach_db存儲過程分離該資料庫,然後使用帶有 FOR ATTACH 子句的 CREATE DATABASE 重新附加。
sp_detach_db Archive
GO
CREATE DATABASE Archive
ON PRIMARY (FILENAME = 'c:\program files\microsoft sql server\
mssql\data\archdat1.mdf')
FOR ATTACH
GO
H. 使用原始分區
下面的示例使用原始分區創建名為 Employees的資料庫。執行語句時,原始分區必須存在,並且每個原始分區只能創建一個檔案。
USE master
GO
CREATE DATABASE Employees
ON
(NAME = Empl_dat,
FILENAME = 'f:',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5)
LOG ON
(NAME = 'Sales_log',
FILENAME = 'g:',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB)
GO
I. 使用已裝入的驅動器
下面的示例使用指向原始分區的已裝入驅動器創建名為 Employees的資料庫。此功能只在 Microsoft® Windows® 2000 Server 中才可用..執行語句時必須已經存在已裝入的驅動器和原始分區,並且每個原始分區上只能有一個檔案。當在已裝入的驅動器上創建資料庫檔案時,必須用尾隨反斜線結束驅動器路徑。
USE master
GO
CREATE DATABASE Employees
ON
(NAME = Empl_dat,
FILENAME = 'd:\sample data dir\',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5)
LOG ON
(NAME = 'Sales_log',
FILENAME = 'd:\sample log dir\',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB)
GO