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