《MS SQL Server 2000管理员手册》系列——9. 建立数据库

9. 建立数据库
数据库结构
系统数据库
建立数据库
检视数据库
删除数据库
本章总结
当您将 Microsoft SQL Server 2000 的数据库设计与安装完成后,下一步就可学习如何建立数据库。与早期的版本比较,SQL Server 2000 的数据库沿用 SQL Server 7 的数据储存与空间管理方式。早期的版本使用逻辑装置和固定尺寸的数据区段来放置数据;而 SQL Server 2000 可让使用者选择,是否让档案或档案群组依数据多寡而自动成长或缩小。本章将介绍档案、档案群组,以及如何管理数据库的成长。本章还会介绍三种建立数据库的方法,以及如何检视与删除数据库。
数据库结构

每一个数据库都由一组系统档案所组成,档案又可被组合成为档案群组。档案群组可方便数据的管理与分类,增进系统执行效能。在这一节我们会介绍档案及档案群组,以及它们在数据库中所扮演的角色。
档案

如刚才所提到的,数据库是由一组系统档案所组成。系统档案又可分为数据文件(data file)及记录档案(log file)。数据文件用以储存数据及对象(如数据表、索引、检视表、触发器、预存程序等),依类型又分为主要数据文件及次要数据文件两种。而记录档案则仅用以储存有关交易记录的数据。记录档案的空间和数据文件的空间是分开的,不能把记录档案视为数据文件的一部份。
每个数据库至少要包含一个数据文件及一个记录档案,这些档案不可与其它数据库共享。也就是说这一个数据库的数据及记录档案就只能属于这个数据库。下面我们来看看数据库的三种档案类型。
• 主要数据文件 顾名思义,主要数据文件包含了一个系统的主要数据文件,如系统数据库启动信息以及系统的数据表与对象。主要数据文件也可以储存使用者自订的数据表与对象。每一个数据库只能有一个(且一定要有一个)主要数据文件,建议的档案扩展名是.mdf。

• 次要数据文件 次要数据文件可储存不在主要数据文件中的数据及对象。一个数据库并不一定要有次要数据文件(不同于主要数据文件一定要存在),您可以选择把所有的资料都放在主要数据文件内。有些数据库则会利用一个或多个次要数据文件来将数据分散在不同的磁盘。(这种方式不同于我们在下一节将讨论到的 RAID),次要数据文件的建议扩展名是.ndf。

• 交易记录档案 这个档案记录所有交易记录信息,这些记录可用来复原数据库的数据。每一个数据库至少要有一个交易记录档案。建议的扩展名为.ldf。


说明
以一个 SQL Server资 料库来说,数据文件的最大尺寸是 32TB,记录文件为4TB。


以一个简单型的数据库来说,一个主要数据文件就可存放所有的数据、对象及一个交易记录档案。较复杂的数据库可能包含一个主要数据文件、五个次要数据文件和两个交易记录档案。这样一个数据库要如何整合分散在各个数据文件的数据呢?答案就是:利用档案群组。
档案群组

档案群组可将档案分组以便管理与储存(有点类似 SQL Server 早期版本的数据区段)。档案群组将数据库分散建立在多个磁盘、磁盘控制卡或磁盘阵列上(也就是 第五章 讨论过的 RAID)以加强数据库的执行效能。利用档案群组可以将数据表和索引建立在指定的磁盘上,也就是说您可以为某个数据表或索引的 I/O 指定某个实体磁盘、磁盘控制卡或磁盘阵列。本节后段会有几个范例操作。
档案群组可分为三种类型:
• 主要档案群组 包括主要数据文件,及未放入其它档案群组的档案。系统数据表-定义使用者、对象和数据库权限-均放在主要档案群组。当您建立数据库时,SQL Server 会自动建立系统数据表。

• 使用者自订档案群组 是指在建立数据库的过程中,使用者自订的档案群组。在指定的使用者自定档案群组中,能建立数据表和索引。

• 预设档案群组 如果数据表和索引在建立时都未指定档案群组,则所有数据表与索引的分页都会置入预设档案群组。在每个数据库中,一次只能有一个档案群组当作预设的档案群组。如果没有指定预设的档案群组,则默认值为主要档案群组。属于db_owner角色成员的使用者可把预设状态从一个档案群组切换到另一个档案群组。在同一时间,只能有一个预设档案群组。我们可以用ALTER DATABASE指令来更改档案群组,以下为Transact-SQL的语法:

ALTER DATABASE database_name MODIFY FILEGROUP filegroup_name
DEFAULT
(您将会在〈第三篇〉学习如何运用T-SQL)。您可以将预设档案群组设成使用者自订群组,如此您在数据库所建立的对象就可以自动建立在所指定的档案群组中,而不需每次指定对象属于哪个档案群组。
在不同的档案群组建立数据表及索引可控制数据储存的位置,增进数据库效能。举例来说,您可以将常用的数据表放在一个大型的磁盘阵列内(譬如说一个由10部磁盘组成的 RAID),较少用的数据表则放在一个由4部磁盘组成较小型的 RAID。因此,较常存取的数据表就会被分配在多个磁盘上,允许更多磁盘 I/O 平行进行。如果您有多个磁盘但没有使用 RAID,仍然可以善加利用档案群组。举例来说,您可以在各自的磁盘上建立各自的档案,并将档案放入各自的使用使用者自订档案群组。这样当您在建立数据表或索引指定档案群组时,所建的数据表和索引就会被放在指定的档案内(以及档案群组所在的磁盘内)。图9-1即是此架构的范例:主要数据文件放置在C磁盘内的主档案群组中,两个次要档案分别放置在E和F磁盘中使用者自订的FG1和FG2的档案群组内,记录档案则放在G磁盘内。然后就可在使用者自订档案群组-FG1或FG2中建立数据表和索引。

图9-1 使用档案群组控制数据位置
或者您可以透过使用者自订档案群组将数据分散在数个磁盘上。图9-2显示分别在磁盘E和F中使用者自订档案群组(FG1)中的次要数据文件(记录档案在磁盘G,主要数据文件在磁盘C)。在这个范例中,我们假定每一个数据库档案均建立于单一的实体磁盘中(没有使用 RAID),利用 SQL Server 的比例写入方式,就能将在使用者自订的档案群组中建立的数据表和索引,分布在两个不同的磁盘。

图9-2 利用档案群组分散数据至多个磁盘
如果您使用的是 RAID 系统,您可能需要把大型的数据表数据,分散放置在两个或数个的 RAID 控制卡所控制的逻辑磁盘阵列上。设定的方法是建立一个使用者自订的档案群组,档案群组中有一个档案存在于每个控制卡内。假定您分别在两个不同的磁盘阵列上,各建立一个次要数据文件,每个逻辑数组由八个实体磁盘组成,设定在 RAID 5 上,两个数组在不同的 RAID 控制卡上。要建立一个跨控制卡的数据表或索引(等于跨16个磁盘),首先需定义一个使用者自订的档案群组来放置这两个档案,然后在此档案群组中建立数据表或索引。图9-3显示使用者自订的档案群组(FG1)分散在十六个实体磁盘(或说两个逻辑RAID磁盘阵列上)。图中也显示主要数据文件在另一个控制卡上(RAID1),记录档案则在另一个 RAID10 的控制卡上。
SQL Server 可自动的将数据文件依比例,分别在每个数据文件以写入的方式将数据配置在数个磁盘内,以提供最佳化的自动档案配置方式。「Striping」是数据库的术语,是指数据分散地储存在一个以上的数据库档案内。SQL Server 档案的 Stripping 方式与 RAID 磁盘等量扇区无关,它可以单独使用,也可以与 RAID 一起混用。

图9-3 使用者自订档案群组分散放置于数个RAID控制卡
要对数据文件进行 Stripping 时,SQL Server 会比较每一个档案的可用空间,然后再依比例将数据分别写入到每一个档案中(而非将所有数据写入第一个档案,等到写满之后,再写入下个档案)。数据表和索引的空间依 范围 (extend)配置。 范围 是配置空间给数据表与索引的基本单位,一个范围包含8个分页(page),每一分页为8KB,所以一个范围单位即有64KB。举例来说,如果档案F1有400 MB的可用空间;档案F2有100 MB的可用空间,如果要将5个范围依比例性填满策略写入档案,则4个范围分配给F1,1个范围分配给F2。如此一来,这两个档案将在大致相同的时间填满,使跨磁盘分配的I/O效能更好。无论F1和F2档案属于使用者自订档案群组,还是属于主要档案群组,都会依比例将数据分别写入。如果档案群组中的所有档案的开始尺寸都一样,当数据加载时,会平均配置到每一个档案。建议将档案群组内所有档案的开始尺寸设为相同,使数据跨磁盘平均配置,以达到I/O平均分配的目的。
档案群组的另一个好处是可依档案或档案群组为主进行数据库备份。如果您的数据库太大,不能一次备份全部内容,可径自备份数据库中的档案或档案群组,无需一次备份整个数据库。本书 第32章 会详细介绍如何利用档案群组作部分备份。
规则和建议

使用档案和档案群组时,记住以下的 SQL Server 2000 规则:
• 档案和档案群组只能用于一个数据库。

• 一个档案只能属于一个档案群组。

• 数据和交易记录文件数据不能在同一个档案中。记录文件空间和数据文件空间应分别管理。

• 交易记录文件档案不是档案群组的一部分。

• 数据库一旦建立了档案,此档案就不能移动到另一个档案群组中,除非您删除这个档案,并重新建立档案。

为了协助您设计数据库,下面是几个使用档案和档案群组时的建议:
• 大多数的数据库只需要一个数据文件和一个交易记录文件即可顺利运作。对于I/O不是特别密集的数据库,建议使用这种设计。

• 如 第5章 所述,记录档案与数据文件必须放置于不同的实体磁盘中。

• 如果需要使用多个数据文件,可设定主要数据文件用于储存系统数据表和对象,而使用者的数据和对象则另设一个或多个次要数据文件来储存。

• 为了得到最好的效能,尽可能将档案和档案群组跨多个实体磁盘建立,以利用到最多数量的平行磁盘I/O。

• 将经常存取的数据表和这些数据表所包含的非丛集索引,以档案群组的方式放在与数据表不同的实体磁盘内。若档案位于不同的磁盘中,则将藉由平行的I/O而改善效能。(索引将在 第17章 中讨论。)

• 如果可能的话,把同一个查询中使用的数据表存放在不同的实体磁盘上,这样当您搜索数据时,就能利用到平行磁盘I/O。

当一个系统大量的使用 RAID 及很多磁盘,最后两项建议不一定适用。如果您有许多磁盘,您应该尽可能地把索引和数据表分散到不同的磁盘上,以利用到最多数量的平行磁盘I/O。
自动档案成长

SQL Server 允许档案依需要自动成长。当建立档案时,您可以指定 SQL Server是否允许自动成长。建议将档案设为允许自动成长(默认值也是设定在允许自动成长),因为它能减少管理员手动监控和增加档案空间的负担。
档案建立时有一个起始的大小。当起始的空间大小填满时,SQL Server 将依指定的成长量增加档案空间,这个成长量称为 成长递增值 (growth increment),当新的空间填满,SQL Server 又会分配新的成长递增值。数据文件会依需要按指定的量成长,直到磁盘已满或达到最大档案尺寸为止(如果有指定的话)。


说明
档案自动成长不同于依比例写入的方式。档案自动成长是指当档案填满时,SQL Server 将自动增加档案空间;而按比例写入是指 SQL Server 根据档案的剩余空间,将数据依比例存放,而不增长档案的空间。


最大档案尺寸档案即为所能成长到的最大尺寸。这个值是档案建立时指定的,可使用 Enterprise Manager 或 ALTER DATABASE 命令更改最大档案尺寸的值。如果没有设定档案的最大尺寸,SQL Server 可让档案依需要成长,直到磁盘空间用完为止。为了避免磁盘驱动器出现磁盘空间不足,导致 SQL Server 错误,您应该为每一个档案设定最大尺寸。如果档案确实成长到最大尺寸,您还可以利用 ALTER DATABASE 陈述式重设最大档案尺寸、或是当磁盘还有空间时,在磁盘上新增另一个档案。如果档案允许无限制扩大(依预设),当磁盘空间用尽,您就必须将档案建立在另一个有剩余空间的磁盘上。
您应该使用档案自动成长和最大档案尺寸作为设计时的规则。当建立数据库时,将档案设定到可能会成长到的最大尺寸。虽然档案的成长可设成依需要自动成长,但仍建议您定期监控档案的成长,这样可帮助您预估档案未来的成长,并决定是否应修改数据库以增加更多档案。
系统数据库

当您安装 SQL Server 时,将会建立四个系统数据库:master、tempdb、model和msdb数据库。
• master 记录系统层级的信息、SQL Server 的安装信息和组态设定,并记录所有的登入账号、其它已经存在的数据库,以及所有使用者数据库主要档案的储存位置。您应当保存最新的master数据库的备份。

• tempdb 用来掌控临时的数据表和临时预存程序。此数据库也用于 SQL Server 的临时储存所需,例如对数据进行排序。每次 SQL Server 启动时,会根据 model 的预设尺寸重新建立一个tempdb数据库的干净副本。然后它会根据需要自动成长。如果您需要较大的 tempdb 数据库空间,您可以使用 ALTER DATABASE 命令来设定一个更大尺寸的默认值。在在线丛书搜寻 tempdb 数据库可获得更多信息。

• model 系统会建立其它数据库的模板,其中也包括 tempdb 数据库。当建立数据库时,第一部分是建立 model 数据库的备份。数据库的其余部分则由空白分页填充。系统中必须有 model 数据库,因为每次当 SQL Server 启动时,便需要使用 model 数据库来重建 tempdb 数据库。您也可以修改 model 数据库,使其包括使用者自订的数据型态、数据表等,以便您建立的每一个新数据库都包括这些属性。在在线丛书搜寻 model 数据库可获得更多信息。

• msdb SQL Server Agent 使用它来排定工作、警示和记录操作者信息。( 操作者 (Operator)是被指定负责工作和警示的人。)

每一个系统数据库都有自己的主要数据文件和记录档案。数据库储存在安装SQL Server 时为系统档案指定的目录中。
建立数据库

SQL Server 提供三种建立数据库的方法:使用 建立数据库精灵 、SQL Server Enterprise Manager 和 T-SQL 指令。T-SQL 指令能储存在档案中并作为指令码来执行。下面将讨论这三种方法:
使用 建立数据库精灵 要注意它的一些限制。如果您使用精灵来建立数据库,所建立的数据文件都会放在您指定的单一磁盘中,因为精灵建立数据库的过程中不会有让您指定档案在其它位置的步骤(也就是说除了刚开始指定的位置,在精灵的安装过程中,所有建立的数据文件都会指定到相同的磁盘和档案内)。记录文件可以放在和数据文件不同的磁盘或档案内,不过也只能存放在单一磁盘中。使用者自订群组是不能被指定的,而且其中的档案将继承同样的增长选项。碍于这些限制,当数据库中只需要一个主要数据文件和交易记录档案时,才建议使用 建立数据库精灵 。
如果您想把次要数据文件放在与主要档案数据不同的磁盘中,或是您想增加使用者自订的档案群组,或者您需要替每个档案指定增长选项,就必须使用 Enterprise Manager 或 T-SQL 指令码来建立数据库。
使用建立数据库精灵

如果您是建立数据库的新手,您可以使用 建立数据库精灵 来建立数据库。以下是使用精灵的步骤:
1. 开启 SQL Server Enterprise Manager,选择一个服务器来建立数据库(先按一下在 Microsoft SQL Servers 这个数据夹名称旁边的加号展开资料夹,再展开 SQL Server 群组数据夹,就可以看到已注册的服务器)。选取一个服务器后,选取菜单上的 工具/精灵 进入 选择精灵 对话框,展开 数据库 ,如图9-4所示。

图9-4 「选择精灵」画面
2. 按两下 建立数据库精灵 开启 欢迎使用建立数据库精灵 对话框,如图9-5所示。

图9-5 「欢迎使用建立数据库精灵」对话框
3. 按一下 下一步 到 为数据库命名并指定其位置 (如9-6所示),输入数据库名称、数据库档案及交易记录文件的存放路径。如果您选择 ... 则可以浏览档案。路径指定后按 下一步 继续下一个步骤。

图9-6 「为数据库命名并指定其位置」画面


说明
本节的图将会从头显示如何建立一个叫做MyDB的数据库,这个数据库的主要数据文件放在C:\mssql2k\MSSQL\data,记录文件放在D:\mssql2k\MSSQL\data。


4. 图9-7是 为数据库档案命名 的画面。您可以设定每一个数据库的文件名称和起始大小。主要数据文件会自动使用数据库名称作为前置字,您可以接受或自行输入名称,扩展名为 .MDF。如果您知道数据库档案的大小,可直接输入起始大小值,否则建议您保留默认值,将来可利用 Enterprise Manger 或 ALTER DATABASE 指令来变更。除了一开始设定的主要档案,其它建立的档案是次要档案,并自动给予档案 .NDF这个扩展名。这些档案将存放在与主要档案位置相同的目录中。按一下 下一步 继续。当使用 建立数据库精灵 时就没有 使用者自订档案群组 这个选项。
在范例中,我们保存原预设的主要档案(MyDB_Data),新增一个次要档案并命名为MyDB_Data2。两个档案会同时放在步骤3所指定的位置。如果所指定的档案夹或档案群组是放在您不想要放置的磁盘上,请停止精灵安装的步骤,我们必须利用其它方法来新增数据库。在下节我们会讨论其它新增数据库的方法。按一下 下一步 继续新增步骤。

图9-7 「为数据库档案命名」画面
5. 出现 定义数据库档案成长量 (图9-8)。通常这里建议您选择 数据库档案自动成长 ,让系统依需要自动增长数据库的尺寸,并指定数据库档案应该以固定递增值成长,或是指定档案依照目前档案大小的百分比成长。您也可以选择 数据库档案不要自动成长 ,以手动调整数据库尺寸,但是这样会增加人工的耗费。您也可以透过选择 不限制档案成长 或 限制档案成长到 来控制数据库档案成长的空间。如果使用精灵新增数据库,就无法个别定义步骤4中的数据库档案,也就是说使用精灵新增数据库,则所有在步骤4新增的数据库都遵照这里所定义的方式成长。按 下一步 继续新增步骤。

图9-8 「定义数据库档案成长量」画面
6. 出现 为交易记录文件命名 对话框。此对话框和步骤4中的 为数据库档案命名 的画面很像,请注意不要混淆这两个对话框。
设定逻辑同步骤4,先输入交易记录档案的名称和起始大小(注意,交易记录文件记录所有数据库的修改记录,当系统故障时可以用来作修复数据的依据)。系统会自动建立第一个交易数据文件并使用数据库名称作为前置字,当然您也可以自订名称。交易数据文件的扩展名是 .ldf,视需要可自行新增交易记录档案。除非您知道交易档案的起始大小,否则建议保留默认值,日后如需更改可利用 Enterprise Manager 或 ALTER DATABASE 指令变更此默认值。按 下一步 继续下一个步骤。
7. 出现 定义交易记录文件成长量 ,这里设定的逻辑同步骤5,您可以指定档案成长的方式。完成设定后按 下一步 继续下一个步骤。
8. 出现 完成建立数据库精灵 (图9-9)。检查是否所有新增信息皆正确,确认后按下 完成 即可完成数据库的新增,如要修改信息则按 上一步 回到先前的画面。

图9-9 「完成建立数据库精灵」画面
9. 出现 数据库已成功建立 ,这表示数据库的建置完成,按下 确定 完成新增步骤。
10. 出现信息方块 您要为数据库建立维护计划 ,建议选择 是 。维护计划可确保数据库的执行效能,定期备份以防发生系统错误,并检查数据的一致性。在这里请先选择 否 ,待 第三十章 我们再讨论维护计划。
使用 Enterprise Manager

SQL Server Enterprise Manager 能建立比精灵更复杂的数据库选项。例如,您无需将数据库内所有的档案视为一个档案群组,而可以对每一个建立的档案定义档案成长选项,也可以指定各自的使用者自订档案群组。以下介绍如何利用 Enterprise Manager 建立数据库,在范例中我们将建立一个叫做 MyDB 的数据库,其中包含一个主要档案数据、三个同时存放在一个使用者自订档案群组的次要档案数据。
1. 开启 Enterprise Manager 。展开 SQL Server 群组,然后展开服务器。在 数据库 上按一下鼠标右钮,然后按一下 新增数据库 。
2. 出现 数据库属性 对话框,先出现的是 一般 标签页(图9-10)。在方块中输入新增的数据库名称。

图9-10 「数据库属性」对话框中的「一般」标签页
3. 按一下 数据文件 标签页(图9-11)。Enterprise Manager 会自动建立主要数据文件,使用所建的数据库名称作为前置字,并以 PRIMARY 作为档案群组。您可以自行更改主要文件名称、位置或档案大小,但是不能更改主要数据文件的档案群组。输入文件名称(逻辑名称)、位置(实体名称)、尺寸和每个数据文件的档案群组。除了主要档案之外的数据文件都可以设成使用者自订的档案群组。在范例中我们在 My_FG 这个档案群组内建立一个次要数据文件名称 MyDB_Data2。

图9-11 「数据库属性」对话框中的「数据文件」标签页
档案预设的位置是在 SQL Sever 所在的磁盘数据夹内。可自行输入新的档案位置或用 浏览 按钮指定档案位置。
4. 在 档案属性 选项区域中可以选取让 档案自动成长 及成长方式,选择逻辑同前,也可以指定 档案大小上限 ,您可以选取 不限制档案成长 让档案无限制成长,或是选取 限制档案成长 (MB) 指定受限制的档案所能成长的大小(以 MB 为单位)。您可以现在就选择您的设定,或是保留默认值。若是以后要更改默认值可再回到 Enterprise Manager 的 数据库属性 窗口更改。若是想删除清单中的档案,可按一下欲删除的档案后按下 删除 键。
5. 所有数据文件设定完成后,按一下 交易记录文件 卷标页。交易记录文件的设定逻辑同 数据文件 卷标页,但少了 档案群组 选项,因为交易记录文件不属于档案群组。输入文件名称(逻辑名称)、位置(实体名称),尺寸和及交易记录档案及其它所有档案的 起始大小 ,选取 档案自动成长 。
6. 数据库属性定义后按 确定 完成新增。现在在画面右方就可以看到新增的数据库图标。
使用 T-SQL 命令

您可以使用 T-SQL 命令或指令码(Script)来建立和修改数据库,而不使用图形化使用者接口。要建立数据库,使用指令码是很有用的。譬如当您在图形化使用者接口建立了一个数据库,却把档案位置设错,更改的方式就是把整个档案删除再重设正确位置。但使用 T-SQL 命令就可以很快的把错误修正,而无须重建数据库。您也可以利用同样的一份指令码在其它系统上建立另一份一模一样的数据库。
另一方面,Enterprise Manager 可以用来产生建立数据库及数据库对象的 T-SQL指令码,不过在此动作之前必须已有一个数据库的存在。Enterprise Manager 指令码会涵盖所有已存在的数据库设定,所以您可以依需要使用已产生的指令码。不论您使用自订的指令码,或是使用已产生的指令码,这里都建议您先了解建立数据库的 T-SQL。本节我们会复习建立数据库的 T-SQL 命令。您可以将指令码储存在档案内。本书 第十三章 会学习如何建立及执行指令码。


真实世界 简单的数据库
在这个范例中,我们将建立一个命名为 MyDB 的数据库,它包括一个主要数据文件(MyDB_root)、一个保留在预设的主要档案群组中的次要数据文件(MyDB_data1)和一个交易记录文件档案(Log_data1)。以下为建立 MyDB 的 SQL 陈述式:
CREATE DATABASE MyDB
ON
(NAME = MyDB_root, --主要数据文件
FILENAME = 'c:\mssq12k\MSSQL\data\mydbroot.mdf',
SIZE = 8MB,
MAXSIZE = 9MB,
FILEGROWTH = 100MB),
(NAME = MyDB_data1, --次要数据文件
FILENAME = 'c:\mssql2k\MSSQL\data\mydbdata1.ndf',
SIZE = 100MB,
MAXSIZE = 1500MB,
FILEGROWTH = 100MB)
LOG ON
(NAME = Log_data1, --记录档案
FILENAME = 'd:\log_files\logdata1.ldf',
SIZE = 1000MB,
MAXSIZE = 1500MB,
FILEGROWTH = 100MB)


在这个例子中,您可以看到主要数据文件和次要数据文件都在C磁盘中,而记录档案在E磁盘中。如前所述,您应该分别储存数据文件和记录档案以改进磁盘的I/O效能。
同时建议使用 .MDF、.NDF 和 .LDF为扩展名。以 KB 或 MB 为单位来指定SIZE、MAXSIZE 和 FILEGROWTH 选项,默认值会以 MB 为单位。
XXXXXXX


真实世界 复杂的数据库
这个数据库范例是以几个磁盘或磁盘阵列(在 RAID 系统中)的系统为基础。在这里,「disk」是代表一个单一的磁盘装置,或者有 RAID 磁盘区的磁盘阵列。我们会将几个档案建立在不同的磁盘上,每一个档案放置在两个档案群组的其中一个。我们将数据库命名为 Sales,并包括下面的档案:
• 主要数据文件:Sales_root.mdf

• 在customers_group档案群组中的三个次要数据文件:customer_data1、customer_data2和customer_data3

• 在products_group档案群组中的两个次要数据文件:product_data1和product_data2

• 一个记录档案:log_data1.ldf

下面是建立 Sales 数据库的语法。因为我们将自订一个数据群组,所以在CREATE DATABES 命令会看到 FILEGROUP 这个关键词。
CREATE DATABASE Sales
ON PRIMARY --明确定义主要档案群组(这个参数可有可无)
(NAME = Salesroot, --主要数据文件
FILENAME = 'c:\mssq12k\MSSQL\data\salesroot.mdf',
SIZE = 8MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB),
FILEGROUP customers_group --次要数据文件的档案群组
(NAME = customer_data1,
FILENAME = 'd:\mssq12k\MSSQL\data\costomerdata1.ndf',
SIZE = 800MB,
MAXSIZE = 100MB,
FILEGROWTH = 100MB),
(NAME = customer_data2, --次要数据文件
FILENAME = 'e:\mssql2\MSSQL\data\costomerdata2.ndf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 100MB),
(NAME = customer_data3, --次要数据文件
FILENAME = 'f:\mssq12\MSSQL\data\costomerdata3.ndf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 100MB),
FILEGROUP products_group --另一个档案群组
(NAME = product_data1, --次要数据文件
FILENAME = 'g:\mssq12\MSSQL\data\product_data1.ndf',
SIZE = 500MB,
MAXSIZE = 700MB,
FILEGROWTH = 100MB),
(NAME = product_data2, --次要数据文件
FILENAME = 'h:\mssq12\MSSQL\data\product_data2.ndf',
SIZE = 500MB,
MAXSIZE = 700MB,
FILEGROWTH = 100MB)
LOG ON
(NAME = logdata1, --记录文件
FILENAME = 'i:\log_files\logdata1.ldf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 200MB)


参照范例中的批注,如果存入档案之前没有定义档案属于哪一个档案群组,档案就会被预设放至主要档案群组。如果在存入档案前先定义档案群组,档案就会依定义被放入该档案群组。如范例所示,在定义了 customers_group 和 products_group 这两个档案群组后,紧接着档案群组后的档案就会被放入该档案群组。在一个档案群组定义之后,列出的所有档案将存放在该档案群组中,直到定义了另一个档案群组,或者执行至 LOG ON 叙述为止。
也请注意每一个档案的磁盘代号。当在那些档案群组中建立数据表和索引时,在不同的磁盘上建立每一个档案,以将数据分散到不同的磁盘中。例如,在 customers_group 建立的数据表,会将数据依照比例(以Stripping方式)储存到 customer_data1、customer_data2 和 customer_data3 档案的磁盘中。记录文件也在没有数据文件的单独磁盘中,以让记录文件可以依照顺序写入。
在预设状态下,SQL Server 可让数据文件依需要成长,直到磁盘空间用完为止。因此,若您不希望允许数据库档案的成长超过开始建立的大小时,就必须设定 FILEGROWTH= 0,这样档案就会依您之前设的开始尺寸填满。当您的数据表属于静态数据表时(不会成长的数据表,也就是不会写入资料),您可以选择这个设定。在这种情况下,也不需指定 MAXSIZE 值,因为最大的尺寸就是开始的尺寸设定。


说明
如果您使用过 SQL 6.5 或更早的版本,您会发现 SQL 7.0 版本在建立数据库前不再使用 DISK INIT 这个命令建立逻辑装置。现在以使用档案的方式来取代逻辑装置。


检视数据库

数据库建立后,您可以使用 Enterprise Manager,或是命令列的 OSQL 以执行 SQL 命令来浏览及检视数据库内的对象。以下会依序介绍这两种方法:
使用 Enterprise Manager

以下是使用 Enterprise Manager 检视数据库信息的步骤:
1. 在 Enterprise Manager 中,展开 SQL Server群组 / 数据库所在的服务器名称 和 数据库 数据夹,如图9-12所示。

图9-12 展开后的Enterprise Manager及数据库数据夹
2. 选择一个数据库检视信息,如图9-13所示。

图9-13 显示在Northwind数据库中的对象
使用SQL

您也可以利用命令列提示窗口,或在 Query Analyzer 执行 T-SQL 命令检视数据库信息,要透过使用 SQL 命令列检视数据库信息,先开启命令提示窗口,以 OSQL 连接至 SQL Server,如下面的范例所示:
OSQL -U

 1<username> -P<password> -S<servername>   
 2当输入上列的命令时,请将角括号内的数据正确输入(不含角括号)。执行以下 SQL 命令列出数据库信息。   
 3Use MyDB --指定要于哪一个数据库环境下执行   
 4GO   
 5sp_helpfile --显示数据库所有档案信息,您也可以提供文件名称以得   
 6到特定的档案信息   
 7GO   
 8sp_helpdb MyDB --上述信息加上档案分配的空间大小   
 9GO   
10sp_helpfilegroup --显示数据库中档案群组信息,您也可以提供档案群组名   
11称以得到特定的档案信息   
12GO   
13sp_helpdb --检视所有数据库信息   
14GO   
15________________________________________   
16相关信息   
17您可以在 SQL Server 在线丛书中找到与这些命令和输出方式相关细节。   
18________________________________________   
19删除数据库   
20  
21有时候,您可能需要删除数据库。要注意的是数据库一旦删除,是不可以执行任何回复步骤的,若是要找回数据库必须还原备份版本。为了安全起见,删除数据库前先备份,以防您将来又会用到它。您可以使用 Enterprise Manager 或 SQL 命令来删除数据库。   
22使用 Enterprise Manager   
23  
24本书 第八章 曾提到,Enterprise Manager 可以执行数据库管理,也可以用来检视资料。您可以执行以下步骤,永久地删除数据库及所有档案:   
251\. 在 Enterprise Manager 中,展开 SQL Server群组 ,按两下欲删除数据库的服务器名称。   
262\. 展开 数据库 数据夹以显示数据库。   
273\. 在您想删除的数据库名称上按右钮,然后从快捷菜单中选择 删除 ,会出现 删除数据库 消息框,如果您选取 删除备份并还原数据库的历程记录 ,所有属于 msdb 数据库中的 备份-还原历程记录数据表 中的 备份-还原信息 都会被删除,选取后按 确定 确认删除数据库。   
28________________________________________   
29说明   
30master 数据库是不容许被删除的。   
31________________________________________   
32使用 SQL   
33  
34您可以利用 T-SQL 命令删除数据库。要使用 T-SQL 必须开启 Query Analyzer 或命令提示窗口,透过 OSQL 与 SQL Server 连接,可参阅以下例子:   
35OSQL -U<username> -P<password> -S<servername>   
36数据库的删除是永久性的,可用 DROP DATABASE 命令来删除数据库及所有档案,以下为删除 MyDB 这个数据库的步骤:   
37USE master --您必须使用master数据库来执行DROP DATABASE   
38命令   
39GO   
40DROP DATABASE MyDB --数据库名称是唯一需要输入的参数   
41GO   
42删除数据库后,建议您为 master 数据库建立新备份,以保持最新的使用者数据库,避免 master 数据库中还保有已删除的数据库数据。另一点要注意的是,当使用者还在与数据库联机时,是无法删除数据库的。所以删除数据库前请先确认使用者没有与数据库联机。   
43本章总结   
44  
45在本章中,您学到更多关于数据、记录文件、档案群组和档案自动成长。也透过 建立数据库精灵 、SQL Server Enterprise Manger 和 T-SQL 命令来建立数据库,并学到检视数据库和档案数据以及删除数据库的两种方法。下一章会开始学习在数据库中建立数据表。</servername></password></username></servername></password></username>
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus