CREATE DATABASE CREATE DATABASE - 北京怡康軟件科技有限公司 資源網(wǎng) "/>
創(chuàng)建一個(gè)新數(shù)據(jù)庫及存儲(chǔ)該數(shù)據(jù)庫的文件,或從先前創(chuàng)建的數(shù)據(jù)庫的文件中附加數(shù)據(jù)庫。
說明 有關(guān)與 DISK INIT 向后兼容性的更多信息,請(qǐng)參見"Microsoft® SQL Server™ 向后兼容性詳細(xì)信息"中的設(shè)備(級(jí)別 3)。
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
新數(shù)據(jù)庫的名稱。數(shù)據(jù)庫名稱在服務(wù)器中必須唯一,并且符合標(biāo)識(shí)符的規(guī)則。database_name 最多可以包含 128 個(gè)字符,除非沒有為日志指定邏輯名。如果沒有指定日志文件的邏輯名,則 Microsoft® SQL Server™ 會(huì)通過向 database_name 追加后綴來生成邏輯名。該操作要求 database_name 在 123 個(gè)字符之內(nèi),以便生成的日志文件邏輯名少于 128 個(gè)字符。
ON
指定顯式定義用來存儲(chǔ)數(shù)據(jù)庫數(shù)據(jù)部分的磁盤文件(數(shù)據(jù)文件)。該關(guān)鍵字后跟以逗號(hào)分隔的 <filespec> 項(xiàng)列表,<filespec> 項(xiàng)用以定義主文件組的數(shù)據(jù)文件。主文件組的文件列表后可跟以逗號(hào)分隔的 <filegroup> 項(xiàng)列表(可選),<filegroup> 項(xiàng)用以定義用戶文件組及其文件。
n
占位符,表示可以為新數(shù)據(jù)庫指定多個(gè)文件。
LOG ON
指定顯式定義用來存儲(chǔ)數(shù)據(jù)庫日志的磁盤文件(日志文件)。該關(guān)鍵字后跟以逗號(hào)分隔的 <filespec> 項(xiàng)列表,<filespec> 項(xiàng)用以定義日志文件。如果沒有指定 LOG ON,將自動(dòng)創(chuàng)建一個(gè)日志文件,該文件使用系統(tǒng)生成的名稱,大小為數(shù)據(jù)庫中所有數(shù)據(jù)文件總大小的 25%。
FOR LOAD
支持該子句是為了與早期版本的 Microsoft SQL Server 兼容。數(shù)據(jù)庫在打開 dbo use only 數(shù)據(jù)庫選項(xiàng)的情況下創(chuàng)建,并且將其狀態(tài)設(shè)置為正在裝載。SQL Server 7.0 版中不需要該子句,因?yàn)?RESTORE 語句可以作為還原操作的一部分重新創(chuàng)建數(shù)據(jù)庫。
FOR ATTACH
指定從現(xiàn)有的一組操作系統(tǒng)文件中附加數(shù)據(jù)庫。必須有指定第一個(gè)主文件的 <filespec> 條目。至于其它 <filespec> 條目,只需要與第一次創(chuàng)建數(shù)據(jù)庫或上一次附加數(shù)據(jù)庫時(shí)路徑不同的文件的那些條目。必須為這些文件指定 <filespec> 條目。附加的數(shù)據(jù)庫必須使用與 SQL Server 相同的代碼頁和排序次序創(chuàng)建。應(yīng)使用 sp_attach_db 系統(tǒng)存儲(chǔ)過程,而不要直接使用 CREATE DATABASE FOR ATTACH。只有必須指定 16 個(gè)以上的 <filespec> 項(xiàng)目時(shí),才需要使用 CREATE DATABASE FOR ATTACH。
如果將數(shù)據(jù)庫附加到的服務(wù)器不是該數(shù)據(jù)庫從中分離的服務(wù)器,并且啟用了分離的數(shù)據(jù)庫以進(jìn)行復(fù)制,則應(yīng)該運(yùn)行 sp_removedbreplication 從數(shù)據(jù)庫刪除復(fù)制。
collation_name
指定數(shù)據(jù)庫的默認(rèn)排序規(guī)則。排序規(guī)則名稱既可以是 Windows 排序規(guī)則名稱,也可以是 SQL 排序規(guī)則名稱。如果沒有指定排序規(guī)則,則將 SQL Server 實(shí)例的默認(rèn)排序規(guī)則指派為數(shù)據(jù)庫的排序規(guī)則。
有關(guān) Windows 和 SQL 排序規(guī)則名稱的更多信息,請(qǐng)參見 COLLATE。
PRIMARY
指定關(guān)聯(lián)的 <filespec> 列表定義主文件。主文件組包含所有數(shù)據(jù)庫系統(tǒng)表。還包含所有未指派給用戶文件組的對(duì)象。主文件組的第一個(gè) <filespec> 條目成為主文件,該文件包含數(shù)據(jù)庫的邏輯起點(diǎn)及其系統(tǒng)表。一個(gè)數(shù)據(jù)庫只能有一個(gè)主文件。如果沒有指定 PRIMARY,那么 CREATE DATABASE 語句中列出的第一個(gè)文件將成為主文件。
NAME
為由 <filespec> 定義的文件指定邏輯名稱。如果指定了 FOR ATTACH,則不需要指定 NAME 參數(shù)。
logical_file_name
用來在創(chuàng)建數(shù)據(jù)庫后執(zhí)行的 Transact-SQL 語句中引用文件的名稱。logical_file_name 在數(shù)據(jù)庫中必須唯一,并且符合標(biāo)識(shí)符的規(guī)則。該名稱可以是字符或 Unicode 常量,也可以是常規(guī)標(biāo)識(shí)符或定界標(biāo)識(shí)符。
FILENAME
為 <filespec> 定義的文件指定操作系統(tǒng)文件名。
'os_file_name'
操作系統(tǒng)創(chuàng)建 <filespec> 定義的物理文件時(shí)使用的路徑名和文件名。os_file_name 中的路徑必須指定 SQL Server 實(shí)例上的目錄。os_file_name 不能指定壓縮文件系統(tǒng)中的目錄。
如果文件在原始分區(qū)上創(chuàng)建,則 os_file_name 必須只指定現(xiàn)有原始分區(qū)的驅(qū)動(dòng)器字母。每個(gè)原始分區(qū)上只能創(chuàng)建一個(gè)文件。原始分區(qū)上的文件不會(huì)自動(dòng)增長;因此,os_file_name 指定原始分區(qū)時(shí),不需要指定 MAXSIZE 和 FILEGROWTH 參數(shù)。
SIZE
指定 <filespec> 中定義的文件的大小。如果主文件的 <filespec> 中沒有提供 SIZE 參數(shù),那么 SQL Server 將使用 model 數(shù)據(jù)庫中的主文件大小。如果次要文件或日志文件的 <filespec> 中沒有指定 SIZE 參數(shù),則 SQL Server 將使文件大小為 1 MB。
size
<filespec> 中定義的文件的初始大小??梢允褂们ё止?jié) (KB)、兆字節(jié) (MB)、千兆字節(jié) (GB) 或兆兆字節(jié) (TB) 后綴。默認(rèn)值為 MB。指定一個(gè)整數(shù),不要包含小數(shù)位。size 的最小值為 512 KB。如果沒有指定 size,則默認(rèn)值為 1 MB。為主文件指定的大小至少應(yīng)與 model 數(shù)據(jù)庫的主文件大小相同。
MAXSIZE
指定 <filespec> 中定義的文件可以增長到的最大大小。
max_size
<filespec> 中定義的文件可以增長到的最大大小??梢允褂们ё止?jié) (KB)、兆字節(jié) (MB)、千兆字節(jié) (GB) 或兆兆字節(jié) (TB) 后綴。默認(rèn)值為 MB。指定一個(gè)整數(shù),不要包含小數(shù)位。如果沒有指定 max_size,那么文件將增長到磁盤變滿為止。
說明 在磁盤即將變滿時(shí),Microsoft Windows NT® S/B 系統(tǒng)日志會(huì)警告 SQL Server 系統(tǒng)管理員。
UNLIMITED
指定 <filespec> 中定義的文件將增長到磁盤變滿為止。
FILEGROWTH
指定 <filespec> 中定義的文件的增長增量。文件的 FILEGROWTH 設(shè)置不能超過 MAXSIZE 設(shè)置。
growth_increment
每次需要新的空間時(shí)為文件添加的空間大小。指定一個(gè)整數(shù),不要包含小數(shù)位。0 值表示不增長。該值可以 MB、KB、GB、TB 或百分比 (%) 為單位指定。如果未在數(shù)量后面指定 MB、KB 或 %,則默認(rèn)值為 MB。如果指定 %,則增量大小為發(fā)生增長時(shí)文件大小的指定百分比。如果沒有指定 FILEGROWTH,則默認(rèn)值為 10%,最小值為 64 KB。指定的大小舍入為最接近的 64 KB 的倍數(shù)。
使用一條 CREATE DATABASE 語句即可創(chuàng)建數(shù)據(jù)庫以及存儲(chǔ)該數(shù)據(jù)庫的文件。SQL Server 分兩步實(shí)現(xiàn) CREATE DATABASE 語句:
因此,model 數(shù)據(jù)庫中任何用戶定義對(duì)象均復(fù)制到所有新創(chuàng)建的數(shù)據(jù)庫中。可以向 model 數(shù)據(jù)庫中添加任何對(duì)象,例如表、視圖、存儲(chǔ)過程、數(shù)據(jù)類型等,以將這些對(duì)象添加到所有數(shù)據(jù)庫中。
每個(gè)新數(shù)據(jù)庫都從 model 數(shù)據(jù)庫繼承數(shù)據(jù)庫選項(xiàng)設(shè)置(除非指定了 FOR ATTACH)。例如,在 model 和任何創(chuàng)建的新數(shù)據(jù)庫中,數(shù)據(jù)庫選項(xiàng) select into/bulkcopy 都設(shè)置為 OFF。如果使用 ALTER DATABASE 更改 model 數(shù)據(jù)庫的選項(xiàng),則這些選項(xiàng)設(shè)置會(huì)在創(chuàng)建的新數(shù)據(jù)庫中生效。如果在 CREATE DATABASE 語句中指定了 FOR ATTACH,則新數(shù)據(jù)庫將繼承原始數(shù)據(jù)庫的數(shù)據(jù)庫選項(xiàng)設(shè)置。
一臺(tái)服務(wù)器上最多可以指定 32,767 個(gè)數(shù)據(jù)庫。
有三種類型的文件用來存儲(chǔ)數(shù)據(jù)庫:
每個(gè)數(shù)據(jù)庫至少有兩個(gè)文件,一個(gè)主文件和一個(gè)事務(wù)日志文件。
盡管 'os_file_name' 可以是任何有效的操作系統(tǒng)文件名,但如果使用以下建議的擴(kuò)展名,則可以更加清楚地反映文件的用途。
文件類型 | 文件擴(kuò)展名 |
---|---|
主要數(shù)據(jù)文件 | .mdf |
次要數(shù)據(jù)文件 | .ndf |
事務(wù)日志文件 | .ldf |
說明 創(chuàng)建用戶數(shù)據(jù)庫后,應(yīng)備份 master 數(shù)據(jù)庫。
SIZE、MAXSIZE 和 FILEGROWTH 參數(shù)中不能指定分?jǐn)?shù)。若要在 SIZE 參數(shù)中指定以兆字節(jié)為單位的分?jǐn)?shù),請(qǐng)將該數(shù)字乘以 1,024 轉(zhuǎn)換成千字節(jié)。例如,指定 1,536 KB 而不要指定 1.5 MB(1.5 乘以 1,024 等于 1,536)。
如果僅指定 CREATE DATABASE database_name 語句而不帶其它參數(shù),那么數(shù)據(jù)庫的大小將與 model 數(shù)據(jù)庫的大小相等。
所有數(shù)據(jù)庫都至少包含一個(gè)主文件組。所有系統(tǒng)表都分配在主文件組中。數(shù)據(jù)庫還可以包含用戶定義的文件組。如果使用指定用戶定義文件組的 ON filegroup 子句創(chuàng)建對(duì)象,則該對(duì)象的所有頁均從指定的文件組中分配。所有沒有使用 ON filegroup 子句(或者使用 ON DEFAULT 子句)創(chuàng)建的用戶對(duì)象的頁將從默認(rèn)文件組分配。數(shù)據(jù)庫首次創(chuàng)建時(shí),主文件組就是默認(rèn)文件組??梢允褂?ALTER DATABASE 將用戶定義的文件組指定為默認(rèn)文件組:
ALTER DATABASE database_name MODIFY FILEGROUP filegroup_name DEFAULT
每個(gè)數(shù)據(jù)庫都有一個(gè)所有者,可在該數(shù)據(jù)庫中執(zhí)行某些特殊的活動(dòng)。所有者是創(chuàng)建數(shù)據(jù)庫的用戶??梢允褂?sp_changedbowner 更改數(shù)據(jù)庫所有者。
若要為 SQL Server 實(shí)例顯示某個(gè)數(shù)據(jù)庫或所有數(shù)據(jù)庫的報(bào)表,請(qǐng)執(zhí)行 sp_helpdb。若要顯示有關(guān)數(shù)據(jù)庫中所占用空間的報(bào)表,請(qǐng)使用 sp_spaceused。若要顯示有關(guān)數(shù)據(jù)庫中文件組的報(bào)表,請(qǐng)使用 sp_helpfilegroup,使用 sp_helpfile 可顯示數(shù)據(jù)庫中文件的報(bào)表。
早期版本的 SQL Server 使用 DISK INIT 語句在執(zhí)行 CREATE DATABASE 語句之前為數(shù)據(jù)庫創(chuàng)建文件。為了與早期版本的 SQL Server 向后兼容,CREATE DATABASE 語句也可以在用 DISK INIT 創(chuàng)建的文件或設(shè)備上創(chuàng)建新數(shù)據(jù)庫。有關(guān)更多信息,請(qǐng)參見 SQL Server 向后兼容性詳細(xì)信息。
CREATE DATABASE 的權(quán)限默認(rèn)地授予 sysadmin 和 dbcreator 固定服務(wù)器角色的成員。sysadmin 和 securityadmin 固定服務(wù)器角色的成員可以將 CREATE DATABASE 權(quán)限授予其它登錄。sysadmin 和 dbcreator 固定服務(wù)器角色的成員可以為 dbcreator 角色添加其它登錄。CREATE DATABASE 權(quán)限必須顯式授予,而不能通過 GRANT ALL 語句授予。
CREATE DATABASE 權(quán)限通常限于少數(shù)登錄,以便控制對(duì)運(yùn)行 SQL Server 實(shí)例的計(jì)算機(jī)上磁盤的使用。
下面的示例創(chuàng)建名為 Sales 的數(shù)據(jù)庫。因?yàn)闆]有使用關(guān)鍵字 PRIMARY,第一個(gè)文件 (Sales_dat) 成為主文件。因?yàn)?Sales_dat 文件的 SIZE 參數(shù)沒有指定 MB 或 KB,因此默認(rèn)為 MB,以兆字節(jié)為單位進(jìn)行分配。Sales_log 文件以兆字節(jié)為單位進(jìn)行分配,因?yàn)?SIZE 參數(shù)中顯式聲明了 MB 后綴。
USE master
GO
CREATE DATABASE Sales
ON
( 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
下面的示例使用三個(gè) 100 MB 的數(shù)據(jù)文件和兩個(gè) 100 MB 的事務(wù)日志文件創(chuàng)建了名為 Archive 的數(shù)據(jù)庫。主文件是列表中的第一個(gè)文件,并使用 PRIMARY 關(guān)鍵字顯式指定。事務(wù)日志文件在 LOG ON 關(guān)鍵字后指定。注意 FILENAME 選項(xiàng)中所用的文件擴(kuò)展名:主要數(shù)據(jù)文件使用 .mdf,次要數(shù)據(jù)文件使用 .ndf,事務(wù)日志文件使用 .ldf。
USE master
GO
CREATE DATABASE Archive
ON
PRIMARY ( 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
本例創(chuàng)建名為 Products 的數(shù)據(jù)庫,并指定單個(gè)文件。指定的文件成為主文件,并會(huì)自動(dòng)創(chuàng)建一個(gè) 1 MB 的事務(wù)日志文件。因?yàn)橹魑募?SIZE 參數(shù)中沒有指定 MB 或 KB,所以主文件將以兆字節(jié)為單位進(jìn)行分配。因?yàn)闆]有為事務(wù)日志文件指定 <filespec>,所以事務(wù)日志文件沒有 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
下面的示例創(chuàng)建名為 mytest 的數(shù)據(jù)庫,并創(chuàng)建相應(yīng)的主文件和事務(wù)日志文件。因?yàn)樵撜Z句沒有 <filespec> 項(xiàng),所以主數(shù)據(jù)庫文件的大小為 model 數(shù)據(jù)庫主文件的大小。事務(wù)日志文件的大小為 model 數(shù)據(jù)庫事務(wù)日志文件的大小。因?yàn)闆]有指定 MAXSIZE,文件可以增長到填滿所有可用的磁盤空間為止。
CREATE DATABASE mytest
下面的示例創(chuàng)建名為 products2 的數(shù)據(jù)庫。文件 prods2_dat 將成為主文件,大小等于 model 數(shù)據(jù)庫中主文件的大小。事務(wù)日志文件會(huì)自動(dòng)創(chuàng)建,其大小為主文件大小的 25% 或 512 KB 中的較大值。因?yàn)闆]有指定 MAXSIZE,文件可以增長到填滿所有可用的磁盤空間為止。
USE master
GO
CREATE DATABASE Products2
ON
( NAME = prods2_dat,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\prods2.mdf' )
GO
下面的示例使用三個(gè)文件組創(chuàng)建名為 sales 的數(shù)據(jù)庫:
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
示例 B 創(chuàng)建一個(gè)包含下列物理文件的名為 Archive 的數(shù)據(jù)庫:
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 存儲(chǔ)過程分離該數(shù)據(jù)庫,然后使用帶有 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
下面的示例使用原始分區(qū)創(chuàng)建名為 Employees 的數(shù)據(jù)庫。執(zhí)行語句時(shí),原始分區(qū)必須存在,并且每個(gè)原始分區(qū)只能創(chuàng)建一個(gè)文件。
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
下面的示例使用指向原始分區(qū)的已裝入驅(qū)動(dòng)器創(chuàng)建名為 Employees 的數(shù)據(jù)庫。此功能只在 Microsoft® Windows® 2000 Server 中才可用。.執(zhí)行語句時(shí)必須已經(jīng)存在已裝入的驅(qū)動(dòng)器和原始分區(qū),并且每個(gè)原始分區(qū)上只能有一個(gè)文件。當(dāng)在已裝入的驅(qū)動(dòng)器上創(chuàng)建數(shù)據(jù)庫文件時(shí),必須用尾隨反斜線結(jié)束驅(qū)動(dòng)器路徑。
USE master相關(guān)文章
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