CREATE DATABASE.docx
《CREATE DATABASE.docx》由会员分享,可在线阅读,更多相关《CREATE DATABASE.docx(22页珍藏版)》请在冰豆网上搜索。
![CREATE DATABASE.docx](https://file1.bdocx.com/fileroot1/2022-12/14/dbae8804-e068-4358-8d9b-8755ce58d75c/dbae8804-e068-4358-8d9b-8755ce58d75c1.gif)
CREATEDATABASE
SQLServer2005联机丛书
CREATEDATABASE(Transact-SQL)
发送反馈
请参阅
全部折叠全部展开
语言筛选器:
全部语言筛选器:
多语言语言筛选器:
VisualBasic语言筛选器:
C#语言筛选器:
C++语言筛选器:
J#语言筛选器:
JScript
VisualBasic(Declaration)
C#
C++
J#
JScript
创建一个新数据库及存储该数据库的文件,创建一个数据库快照,或从先前创建的数据库的已分离文件中附加数据库。
Transact-SQL语法约定
语法
CREATEDATABASEdatabase_name
[ON
[PRIMARY] [[,...n]
[,[,...n]]
[LOGON{[,...n]}]
]
[COLLATEcollation_name]
[WITH]
]
[;]
Toattachadatabase
CREATEDATABASEdatabase_name
ON[,...n]
FOR{ATTACH[WITH]
|ATTACH_REBUILD_LOG}
[;]
:
:
=
{
(
NAME=logical_file_name,
FILENAME='os_file_name'
[,SIZE=size[KB|MB|GB|TB]]
[,MAXSIZE={max_size[KB|MB|GB|TB]|UNLIMITED}]
[,FILEGROWTH=growth_increment[KB|MB|GB|TB|%]]
)[,...n]
}
:
:
=
{
FILEGROUPfilegroup_name[DEFAULT]
[,...n]
}
:
:
=
{
DB_CHAINING{ON|OFF}
| TRUSTWORTHY{ON|OFF}
}
:
:
=
{
ENABLE_BROKER
| NEW_BROKER
| ERROR_BROKER_CONVERSATIONS
}
Createadatabasesnapshot
CREATEDATABASEdatabase_snapshot_name
ON
(
NAME=logical_file_name,
FILENAME='os_file_name'
)[,...n]
ASSNAPSHOTOFsource_database_name
[;]
备注
创建用户数据库后,应备份master数据库。
CREATEDATABASE语句必须以自动提交模式(默认事务管理模式)运行,不允许在显式或隐式事务中使用。
有关详细信息,请参阅自动提交事务。
使用一条CREATEDATABASE语句即可创建数据库以及存储该数据库的文件。
SQLServer通过使用以下步骤实现CREATEDATABASE语句:
1.SQLServer2005DatabaseEngine 使用model数据库的副本初始化该数据库及其元数据。
2.为数据库分配ServiceBrokerGUID。
3.然后,数据库引擎 使用空页填充数据库的剩余部分,包含记录数据库中空间使用情况的内部数据页除外。
有关详细信息,请参阅数据库文件初始化。
在一个SQLServer的实例中最多可以指定32,767个数据库。
每个数据库都有一个所有者,它可以在数据库中执行特殊操作。
所有者是创建数据库的用户。
可以使用sp_changedbowner(Transact-SQL)更改数据库所有者。
数据库文件和文件组
每个数据库至少有两个文件(一个主文件和一个事务日志文件)和一个文件组。
可以为每个数据库指定最多32,767个文件和32,767个文件组。
有关详细信息,请参阅物理数据库文件和文件组。
在创建数据库时,请根据数据库中预期的最大数据量,创建尽可能大的数据文件。
有关详细信息,请参阅使用文件和文件组管理数据库增长。
建议使用存储区域网络(SAN)、基于iSCSI的网络或本地附加的磁盘来存储SQLServer数据库文件,因为该配置使SQLServer的性能和可靠性得到了优化。
默认情况下,不对SQLServer启用使用网络数据库文件(存储在网络服务器或网络附加的存储器上)。
但是,可以使用跟踪标志1807创建具有基于网络的数据库文件的数据库。
有关此跟踪标志以及重要的性能和维护注意事项的信息,请参阅此Microsoft网站。
数据库快照
可以使用CREATEDATABASE语句创建现有数据库(“源数据库”)的只读静态视图(“数据库快照”)。
当创建快照时,源数据库已存在,所以数据库快照在事务上与源数据库一致,源数据库可以具有多个快照。
注意:
创建数据库快照时,CREATEDATABASE语句不能引用日志文件、脱机文件、还原文件和不存在的文件。
如果创建数据库快照失败,快照便成为可疑快照,必须将其删除。
有关详细信息,请参阅DROPDATABASE(Transact-SQL)。
每个快照都将一直存在,直到使用DROPDATABASE将其删除为止。
有关详细信息,请参阅数据库快照。
数据库选项
创建数据库时,总会自动设置几个数据库选项。
有关这些选项及其默认设置的列表,请参阅设置数据库选项。
可以使用ALTERDATABASE语句修改这些选项。
model数据库和创建新数据库
model数据库中的所有用户定义对象都将复制到所有新创建的数据库中。
可以向model数据库中添加任何对象(例如表、视图、存储过程、数据类型等),以将这些对象包括到所有新建数据库中。
当指定CREATEDATABASEdatabase_name语句而不带其他大小参数时,主数据文件将与model数据库中的主文件具有相同的大小。
除非指定了FORATTACH,否则每个新数据库都从model数据库继承数据库选项设置。
例如,在model和创建的任何新数据库中,数据库选项autoshrink都设置为true。
如果更改了model数据库中的选项,则这些新选项设置也将用于您所创建的所有新数据库中。
在model数据库中的更改操作不会影响现有数据库。
如果在CREATEDATABASE语句中指定了FORATTACH,则新数据库将继承原始数据库的数据库选项设置。
查看数据库信息
可以使用目录视图、系统函数和系统存储过程返回有关数据库、文件和文件组的信息。
有关详细信息,请参阅查看数据库元数据。
参数
database_name
新数据库的名称。
数据库名称在SQLServer的实例中必须唯一,并且必须符合标识符规则。
除非没有为日志文件指定逻辑名称,否则database_name最多可以包含128个字符。
如果未指定逻辑日志文件名称,则SQLServer将通过向database_name追加后缀来为日志生成logical_file_name和os_file_name。
这会将database_name限制为123个字符,从而使生成的逻辑文件名称不超过128个字符。
如果未指定数据文件的名称,则SQLServer使用database_name作为logical_file_name和os_file_name。
ON
指定显式定义用来存储数据库数据部分的磁盘文件(数据文件)。
当后面是以逗号分隔的、用以定义主文件组的数据文件的项列表时,需要使用ON。
主文件组的文件列表可后跟以逗号分隔的、用以定义用户文件组及其文件的项列表(可选)。
PRIMARY
指定关联的列表定义主文件。
在主文件组的项中指定的第一个文件将成为主文件。
一个数据库只能有一个主文件。
有关详细信息,请参阅物理数据库文件和文件组。
如果没有指定PRIMARY,那么CREATEDATABASE语句中列出的第一个文件将成为主文件。
LOGON
指定显式定义用来存储数据库日志的磁盘文件(日志文件)。
LOGON后跟以逗号分隔的用以定义日志文件的项列表。
如果没有指定LOGON,将自动创建一个日志文件,其大小为该数据库的所有数据文件大小总和的25%或512KB,取两者之中的较大者。
不能对数据库快照指定LOGON。
COLLATEcollation_name
指定数据库的默认排序规则。
排序规则名称既可以是Windows排序规则名称,也可以是SQL排序规则名称。
如果没有指定排序规则,则将SQLServer实例的默认排序规则分配为数据库的排序规则。
不能对数据库快照指定排序规则名称。
不能使用FORATTACH或FORATTACH_REBUILD_LOG子句指定排序规则名称。
有关如何更改附加数据库的排序规则的信息,请访问此Microsoft网站。
有关Windows和SQL排序规则名称的详细信息,请参阅COLLATE(Transact-SQL)。
FORATTACH
指定通过附加一组现有的操作系统文件来创建数据库。
必须有一个指定主文件的项。
至于其他项,只需要指定与第一次创建数据库或上一次附加数据库时路径不同的文件的那些项即可。
必须有一个项指定这些文件。
FORATTACH具有以下要求:
∙所有数据文件(MDF和NDF)都必须可用。
∙如果存在多个日志文件,这些文件都必须可用。
如果一个可读/写数据库具有一个当前不可用的日志文件,并且进行附加操作前在没有使用用户或打开的事务的情况下关闭了该数据库,那么FORATTACH会自动重新生成日志文件并更新主文件。
相比之下,对于只读数据库,由于主文件不能更新,将不能重新生成日志。
因此,如果附加一个日志不可用的只读数据库,必须在FORATTACH子句中提供日志文件或文件。
在SQLServer2005中,要附加的数据库中包含的所有全文文件也将随之一起附加。
若要指定全文目录的新路径,请指定不带全文操作系统文件名的新位置。
有关详细信息,请参阅“示例”部分。
不能对数据库快照指定FORATTACH。
有关附加数据库和分离数据库的详细信息,请参阅分离和附加数据库。
注意:
如果数据库使用ServiceBroker,请参阅。
有关分离或附加数据库时设置的文件权限的信息,请参阅保护数据和日志文件的安全。
当您附加已复制而不是分离的复制数据库时,请注意下列事项:
∙如果您将数据库附加到原始数据库所在的同一服务器实例和版本,则不需要其他步骤。
∙如果您将数据库附加到同一个服务器实例,但是版本已升级,则必须执行sp_vupgrade_replication才能在附加操作完成后升级复制。
∙如果您将数据库附加到不同的服务器实例,而不考虑版本,则必须执行sp_removedbreplication才能在附加操作完成后删除复制。
FORATTACH_REBUILD_LOG
指定通过附加一组现有的操作系统文件来创建数据库。
该选项只限于读/写数据库。
如果缺少一个或多个事务日志文件,将重新生成日志文件。
必须有一个指定主文件的项。
注意:
如果日志文件可用,数据库引擎 将使用这些文件,而不会重新生成日志文件。
FORATTACH_REBUILD_LOG具有以下要求:
∙完全关闭数据库。
∙所有数据文件(MDF和NDF)都必须可用。
重要事项:
该操作会中断日志备份链。
建议在完成该操作后执行完整数据库备份。
有关详细信息,请参阅BACKUP(Transact-SQL)。
通常,FORATTACH_REBUILD_LOG用于将具有大型日志的可读/写数据库复制到另一台服务器,在这台服务器上,数据库副本频繁使用,或仅用于读操作,因而所需的日志空间少于原始数据库。
不能对数据库快照指定FORATTACH_REBUILD_LOG。
有关附加数据库和分离数据库的详细信息,请参阅分离和附加数据库。
控制文件属性。
NAMElogical_file_name
指定文件的逻辑名称。
指定FILENAME时,需要使用NAME,除非指定FORATTACH子句之一。
logical_file_name
引用文件时SQLServer中使用的逻辑名称。
logical_file_name必须在数据库中唯一,必须符合标识符规则。
名称可以是字符或Unicode常量,也可以是常规标识符或分隔标识符。
FILENAME'os_file_name'
指定操作系统(物理)文件名称。
'os_file_name'
是创建文件时由操作系统使用的路径和文件名。
文件必须驻留在下列一种设备中:
安装SQLServer的本地服务器、存储区域网络[SAN]或基于iSCSI的网络。
执行CREATEDATABASE语句前,指定路径必须存在。
有关详细信息,请参阅“备注”部分的“数据库文件和文件组”。
如果为该文件指定了UNC路径,则无法设置SIZE、MAXSIZE和FILEGROWTH参数。
如果文件位于原始分区上,则os_file_name必须仅指定现有原始分区的驱动器号。
每个原始分区上只能创建一个数据文件。
不应将数据文件放在压缩文件系统中,除非这些文件是只读的辅助文件或数据库是只读的。
日志文件一定不要放在压缩文件系统中。
有关详细信息,请参阅只读文件组。
SIZEsize
指定文件的大小。
将os_file_name指定为UNC路径时,不能指定SIZE。
size
文件的初始大小。
如果没有为主文件提供size,则数据库引擎 将使用model数据库中的主文件的大小。
如果指定了辅助数据文件或日志文件,但未指定该文件的size,则数据库引擎 将以1MB作为该文件的大小。
为主文件指定的大小至少应与model数据库的主文件大小相同。
可以使用千字节(KB)、兆字节(MB)、千兆字节(GB)或兆兆字节(TB)后缀。
默认为MB。
指定一个整数,不包含小数位。
MAXSIZEmax_size
指定文件可增大到的最大大小。
将os_file_name指定为UNC路径时,不能指定MAXSIZE。
max_size
最大的文件大小。
可以使用KB、MB、GB和TB后缀。
默认为MB。
指定一个整数,不包含小数位。
如果未指定max_size,则文件将一直增大,直至磁盘已满。
UNLIMITED
指定文件将增长到磁盘已满。
在SQLServer2005中,指定为不限制增长的日志文件的最大大小为2TB,而数据文件的最大大小为16TB。
FILEGROWTHgrowth_increment
指定文件的自动增量。
文件的FILEGROWTH设置不能超过MAXSIZE设置。
将os_file_name指定为UNC路径时,不能指定FILEGROWTH。
growth_increment
每次需要新空间时为文件添加的空间量。
该值可以MB、KB、GB、TB或百分比(%)为单位指定。
如果未在数字后面指定MB、KB或%,则默认值为MB。
如果指定%,则增量大小为发生增长时文件大小的指定百分比。
指定的大小舍入为最接近的64KB的倍数。
值为0时表明自动增长被设置为关闭,不允许增加空间。
如果未指定FILEGROWTH,则数据文件的默认值为1MB,日志文件的默认增长比例为10%,并且最小值为64KB。
注意:
在SQLServer2005中,数据文件的默认增量已从10%更改为1MB。
日志文件的默认值仍然为10%。
控制文件组属性。
不能对数据库快照指定文件组。
FILEGROUPfilegroup_name
文件组的逻辑名称。
filegroup_name
filegroup_name必须在数据库中唯一,不能是系统提供的名称PRIMARY和PRIMARY_LOG。
名称可以是字符或Unicode常量,也可以是常规标识符或分隔标识符。
名称必须符合标识符规则。
DEFAULT
指定命名文件组为数据库中的默认文件组。
控制外部与数据库之间的双向访问。
DB_CHAINING{ON|OFF}
当指定为ON时,数据库可以为跨数据库所有权链的源或目标。
当为OFF时,数据库不能参与跨数据库所有权链接。
默认值为OFF。
重要事项:
如果crossdbownershipchaining服务器选项为0(OFF),SQLServer实例将可以识别此设置。
如果crossdbownershipchaining为1(ON),则不论此选项为何值,所有用户数据库都可以参与跨数据库所有权链。
可以使用sp_configure设置此选项。
若要设置此选项,要求具有sysadmin固定服务器角色的成员身份。
不能针对下列系统数据库设置DB_CHAINING选项:
master、model和tempdb。
有关详细信息,请参阅所有权链。
TRUSTWORTHY{ON|OFF}
当指定ON时,使用模拟上下文的数据库模块(例如,视图、用户定义函数或存储过程)可以访问数据库以外的资源。
当为OFF时,模拟上下文中的数据库模块不能访问数据库以外的资源。
默认值为OFF。
只要附加数据库,TRUSTWORTHY就会设置为OFF。
默认情况下,master数据库始终将TRUSTWORTHY设置为ON。
model、tempdb数据库始终将TRUSTWORTHY设置为OFF,并且不能对这些数据库更改该值。
若要设置此选项,要求具有sysadmin固定服务器角色的成员身份。
控制数据库上的ServiceBroker选项。
仅当使用FORATTACH子句时,才能指定ServiceBroker选项。
ENABLE_BROKER
指定对指定的数据库启用ServiceBroker。
也就是说,在sys.databases目录视图中将is_broker_enabled设置为true,然后开始进行消息传递。
NEW_BROKER
在sys.databases和还原数据库中创建一个新service_broker_guid。
ERROR_BROKER_CONVERSATIONS
结束所有会话,并产生一个错误,指明已创建broker的副本。
database_snapshot_name
新数据库快照的名称。
数据库快照名称必须在SQLServer的实例中唯一,并且必须符合标识符规则。
database_snapshot_name最多可以包含128个字符。
ON(NAME=logical_file_name,FILENAME='os_file_name')[,...n]
若要创建数据库快照,请在源数据库中指定文件列表。
若要使快照工作,必须分别指定所有数据文件。
但是,日志文件不允许用于数据库快照。
有关NAME和FILENAME以及其值的说明,请参阅等价的值的说明。
注意:
创建数据库快照时,不允许使用其他选项和关键字PRIMARY。
ASSNAPSHOTOFsource_database_name
指定要创建的数据库为source_database_name指定的源数据库的数据库快照。
快照和源数据库必须位于同一实例中。
有关详细信息,请参阅“备注”部分的“数据库快照”。
权限
要求具有CREATEDATABASE、CREATEANYDATABASE或ALTERANYDATABASE的权限。
为了控制对运行SQLServer实例的计算机上的磁盘使用,通常只有少数登录帐户才有创建数据库的权限。
对数据文件和日志文件的权限
在SQLServer2005中,对各个数据库的数据和日志文件设置了某些权限。
每当对数据库执行下列操作时,便会设置下列权限:
创建
修改以添加新文件
附加
备份
分离
还原
如果这些文件位于具有打开权限的目录中,那么以上权限可以防止文件被意外篡改。
有关详细信息,请参阅保护数据和日志文件的安全。
注意:
MicrosoftSQLServer2005ExpressEdition不设置数据文件和日志文件权限。
示例
A.创建未指定文件的数据库
以下示例创建名为mytest的数据库,并创建相应的主文件和事务日志文件。
因为语句没有项,所以主数据库文件的大小为model数据库主文件的大小。
事务日志将设置为下列值中的较大者:
512KB或主数据文件大小的25%。
因为没有指定MAXSIZE,文件可以增大到填满所有可用的磁盘空间为止。
复制代码
USEmaster;
GO
IFDB_ID(N'mytest')ISNOTNULL
DROPDATABASEmytest;
GO
CREATEDATABASEmytest;
GO
--Verifythedatabasefilesandsizes
SELECTname,size,size*1.0/