1、文件与文件组 在SQL Server 中数据库是由数据库文件和事务日志文件组成的。一个数据库至少应包含一个数据库文件和一个事物日志文件。 (1) 数据库文件(Database File) 数据库文件是存放数据库数据和数据库对象的文件。一个数据库可以有一个或多个数据库文件,一个数据库文件只属于一个数据库。当有多个数据库文件时,有一个文件被定义为主数据库文件(Primary Database File), 扩展名为mdf, 它用来存储数据库的启动信息和部分或全部数据,一个数据库只能有一个主数据库文件。其它数据库文件被称为次数据库文件(Secondary Database File), 扩展名为ndf, 用来存储主文件没存储的其它数据。
采用多个数据库文件来存储数据的优点体现在: ·数据库文件可以不断扩充,而不受操作系统文件大小的限制; ·可以将数据库文件存储在不同的硬盘中,这样可以同时对几个硬盘做数据存取,提高了数据处理的效率。对于服务器型的计算机尤为有用。
(2) 事务日志文件(Transaction Log File) 事务日志文件是用来记录数据库更新情况的文件,扩展名为ldf。例如使用INSERT、UPDATE、 DELETE、 等对数据库进行更的操作都会记录在此文件中,而如SELECT 等对数据库内容不会有影响的操作则不会记录在案。一个数据库可以有一个或多个事务日志文件。
SQL Server 中采用“Write-Ahead (提前写)”方式的事务,即对数据库的修改先写入事务日志中,再写入数据库。其具体操作是,系统先将更改操作写入事务日志中,再更改存储在计算机缓存中的数据,为了提高执行效率,此更改不会立即写到硬盘中的数据库,而是由系统以固定4 的时间间隔执行CHECKPOINT 命令,将更改过的数据批量写入硬盘。SQL Server 有个特点,它在执行数据更改时会设置一个开始点和一个结束点,如果尚未到达结束点就因某种原因使操作中断,则在SQL Server 重新启动时会自动恢复已修改的数据,使其返回未被修改的状态。 由此可见,当数据库破坏时,可以用事务日志恢复数据库内容。
(3) 文件组(File Group) 文件组是将多个数据库文件集合起来形成的一个整体。每个文件组有一个组名。与数据库文件一样,文件组也分为主文件组(Primary File Group) 和次文件组(Secondary FileGroup) 一个文件只能存在于一个文件组中,一个文件组也只能被一个数据库使用。主文件组中包含了所有的系统表。当建立数据库时,主文件组包括主数据库文件和未指定组的其它文件。在次文件组中可以指定一个缺省文件组,那么在创建数据库对象时如果没有指定将其放在哪一个文件组中,就会将它放在缺省文件组中。如果没有指定缺省文件组则主文件组,为缺省文件组。 注意:事务日志文件不属于任何文件组。
6.1.2 用Enterprise Manager 创建数据库 在Enterprise Manager 中可以按下列步骤来创建数据库: (1) 单击工具栏中的图标,或在服务器的Databases 文件夹或其下属数据库图标上单击右键,选择New Database…选项,即会出现如图6-1 所示的对话框。 (2) 指定数据库的名称和编码方式,如图6-1 所示。
图6-1 创建数据库对话框 (3) 点击Transaction Log 页框,指定数据库文件的名称、存储位置、初始容量大小和所属文件组,如图6-2 所示。 (4) 进行数据库文件大小扩充方式和容量限制设置,如图6-2 所示。 (5) 点击Transaction Log 页框,指定事务日志文件的名称、存储位置和初始容量大小,如图6-3 所示。 (6) 进行事务日志文件大小扩充方式和容量限制设置,如图6-3 所示。
(7) 单击“确定”按钮,则建新数据库。 注意:数据库的名称最长为128个字符,且不区分大小写。 注意:在此指定的文件容量以MB为单们的,数据库文件的最小容量为1MB,最大容量为1,048,516TB(这么大的硬盘还没出世!);事务日志文件的最小容量为1MB。 一个服务器在理论上可以管理32,767数据库。
6.1.3 用CREATE DATABASE 命令创建数据库
各参数说明如下:
- database_name
数据库名称,不能超过128 个字符,由于系统会在其后添加5 个字符的逻辑后缀,因此实际能指定的字符数为123 个。
- on
指明数据库文件和文件组的明确定义。
- PRIMARY
指明主数据库文件或主文件组。主文件组的第一个文件被认为是主数据库文件,其中包含了数据库的逻辑启动信息和数据库的系统表。如果没有PRIMARY 项,则在CREATE DATABASE 命令中列出的第一个文件将被默认为主文件。
- filespec
文件说明。
- n
占位符表明可以指定多个类似的对象。
- filegroupspec
文件组说明。
- LOG ON>
指明事务日志文件的明确定义。如果没有LOG ON 选项,则系统会自动产生一个文件名前缀与数据库名相同,容量为所有数据库文件大小1/4 的事务日志文件。
- COLLATE
指明数据库使用的校验方式。collation_name 可以是Windows 的校验方式名称,也可以是SQL 校验方式名称。如果省略此子句,则数据库使用当前的SQL Server 设置的校验方式。
- FOR LOAD
此选项是为了与SQL Server 7.0 以前的版本兼容而设定的。读者可以不用管它。RESTORE 命令可以更好地实现此功能。
- FOR ATTACH
用于附加已经存在的数据库文件到新的数据库中,而不用重新创建数据库文件。使用此命令必须指定主文件。被附加的数据库文件的代码页(Code Page)和排序次序(Sort Order)必须和目前SQL Server 所使用的一致。建议使用sp_attach_db 系统存储过程来代替此命令(关于sp_attach_db 系统存储过程的用法请参见本章的第7 节“移动和复制数据库”)。CREATE DATABASE FOR ATTACH 命令只有在指定的文件数目超过16 个时才必须使用。
- NAME
指定文件在SQL Server 中的逻辑名称。当时用FOR ATTACH 选项时,就不需要使用 NAME 选项了。
- FILENAME
指定文件在操作系统中存储的路径名和文件名称。
- SIZE
指定数据库的初始容量大小。如果没有指定主文件的大小,则SQL Server 默认其与模板数据库中的主文件大小一致,其它数据库文件和事务日志文件则默认为1 MB。 指定大小的数字size 可以使用KB、 MB、 GB、 和TB 后缀,默认的后缀是MB。 size 中不能使用小数,其最小值为512 KB, 默认值是1MB。 主文件的size 不能小于模板数据库中的主文件(关于模板数据库的介绍请参见本章最后一节)。
- MAXSIZE
指定文件的最大容量。如果没有指定MAXSIZE, 则文件可以不断增长直到充满磁盘。
- UNLIMITED
指明文件无容量限制。
- FILEGROTH
指定文件每次增容时增加的容量大小。增加量可以为确定的以KB、 MB 作后缀的字节数或以%作后缀的被增容文件的百分比来表示。缺省后缀为MB。 如果没有指定FILEGROWTH,则缺省值为10%, 每次扩容的最小值为64 KB。 CREATE DATABASE 命令在SQL Server 中执行时使用模板数据库来初始化新建的数据库(使用FOR ATTACH 选项时除外)。在模板数据库中的所有用户定义的对象和数据库的设置都会被复制到新数据库中。每个数据库都有一个所有者(Database Owner,简称DBO),创建数据库的用户被默认为数据库所有者。可以通过sp_changedbowner 系统存储过程来更改数据库所有者。
例6-1: 创建一个与上节中用Enterprise Manager 创建的数据库类似的数据库。 create database mydb on primary ( name = mydb_data1, filename = 'd:\sql data\mydb_data1.mdf', size = 1, maxsize = unlimited, filegrowth = 10% ), filegroup data2 ( name = mydb_data2, filename = 'd:\sql data\mydb_data2.ndf', size = 2, maxsize = 100, filegrowth = 1 ), filegroup data3 ( name = mydb_data3, filename = 'd:\sql data\mydb_data3.ndf', size = 3, maxsize = 50, filegrowth = 500kb ) log on ( name = 'mydb_log1', filename = 'd:\sql data\mydb_log1.ldf', size = 1mb, maxsize = 25mb, filegrowth = 10% ), ( name = 'mydb_log2', filename = 'd:\sql data\mydb_log2.ldf', size = 1mb, maxsize = 10mb, filegrowth = 10% ), ( name = 'mydb_log3', filename = 'd:\sql data\mydb_log3.ldf', size = 1mb, maxsize = 5mb, filegrowth = 512kb ) 运行结果如下 -------------------- -------------------- The CREATE DATABASE process is allocating 1.00 MB on disk 'mydb_Data1'. The CREATE DATABASE process is allocating 2.00 MB on disk 'mydb_Data2'. The CREATE DATABASE process is allocating 3.00 MB on disk 'mydb_Data3'. The CREATE DATABASE process is allocating 1.00 MB on disk 'mydb_Log1'. The CREATE DATABASE process is allocating 1.00 MB on disk 'mydb_Log2'. The CREATE DATABASE process is allocating 1.00 MB on disk 'mydb_Log3'. |