Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9265940
  • 博文数量: 299
  • 博客积分: 9955
  • 博客等级: 中将
  • 技术积分: 4177
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-27 20:59
文章分类
文章存档

2015年(1)

2012年(2)

2011年(9)

2010年(47)

2009年(108)

2008年(132)

我的朋友

分类: Mysql/postgreSQL

2009-10-02 14:00:31

第4学时数据库结构基础
在使用SQL Server时,不仅要知道它怎样运行,而且还要明白为什么这样,这一点非常
重要。尽管这看起来有些奇怪,但为了能正确使用SQL Server数据库,你必须掌握几种有关
SQL Server数据库的东西。本章我将从几个不同的方面来介绍SQL Server数据库是怎样运行
的。
本学时的要点包括:
• 关于数据库
• 物理空间分配
• 系统数据库
• 用户数据库
• 系统目录
• 事务日志
4.1 关于数据库
正如我前面所提到的,了解SQL Server数据库的基本结构是非常重要的。SQL Server中所
有的数据都存储在数据库中。在物理层次上,这些数据库至少由两个存储在服务器硬盘上的
文件组成。在逻辑层次上,你和你的用户使用表、存储过程、视图和其他对象。从你的用户
的观点来看,其物理实现应该是不可看见的。
在第一次安装SQL Server时,几个数据库会自动建立。其中4个数据库是系统数据库。系
统数据库包含着SQL Server运行所必需的信息。这些数据库中包含有配置信息、维护历史、
数据排序用的临时空间以及一个用于创建所有用户数据库的基本结构。在初始安装时,同时
也建立两个用户数据库。这两个数据库供用户测试和训练使用。
与其他的R D B M S不一样,你不必运行多个SQL Server实例来允许用户访问同一台服务器
上的不同数据库。SQL Server非常擅于管理服务器资源,允许多个用户访问多个数据库。每
个用户连接与一个数据库相关联,但是每个用户能打开多个指向不同数据库的连接。
4.2 物理空间分配
当我谈到SQL Server怎样使用空间时,你会经常听到两个术语。在讲解数据库的逻辑实
现前,你必须首先明白这两个术语是什么,相互之间关系怎样。这两个术语就是页和区域。
4.2.1 页
页是SQL Server分配空间时使用的最小单位。一页的长度是8 K B,数据库的实际数据就写
在这里。每页可以包含至少一行,但一行不能超出一页的长度。每页只能存储一个表中的数
据,因为页属于一个特定的表。在需要空间时,为了避免SQL Server因分配许多单个的页而
大大增加系统开销,空间被分成很多叫做区域的单元。
4.2.2 区域
区域是SQL Server每次申请空间时能分配的最小单位。区域是8个连续页,即6 4 K B空间。
为了节省数据库空间,库中的每个对象都不是被分配一个完整的区域。如果这样规定,那么
含有很少数据的对象也将占用至少6 4 K B空间。为解决这个问题, SQL Server使用两种不同的
区域:
• 混合型—一个混合型区域有6 4 K B,其中的页可以组成8个不同的对象。
• 统一型—一个统一型区域有6 4 K B,其中所有的页必须属于同一个对象。
当你第一次建立一个对象时, SQL Server在一个混合型区域中为它分配空间。如果这个
对象增长到包含8个页或更多时,SQL Server便会将现有数据移到一个统一型区域中。
4.2.3 文件和文件组
当建立一个SQL Server数据库时,数据库的实际存储被映射成几个操作系统文件。与S Q L
S e r v e r以前的版本不同,事务日志和数据库信息不再存储在同一个文件中,并且多个数据库也
不再存储在同一个文件中。同样,与SQL Server以前的版本不同,数据库文件在满了以后,
会自动增大,除非这些文件达到了你定义的最大尺寸。这三种类型的SQL Server数据库文件
如下:
• 主数据库文件—主数据库文件是所有数据库的起点。这些文件不仅包含数据库用户收
集的信息,还包含了数据库中所有其他文件的有关信息。每个数据库都有一个主数据库
文件。主数据库文件的扩展名默认并推荐使用. m d f。
• 辅数据库文件—辅数据库文件是那些你增加到数据库中的其他任何数据库文件。随着
在服务器上使用多个驱动器,增加它们可以用来为数据库增大容量。不是所有的数据库
都有辅数据库文件,但是,如果想要你的数据库文件延伸到多个物理硬盘上,就需要有
辅数据库文件。辅数据库文件的扩展名默认并推荐使用. n d f。
• 日志文件—日志文件用来保存数据库的事务日志。每个数据库至少有一个日志文件,
可以为一个数据库建立多个日志文件。日志文件的扩展名默认并推荐使用. l d f。
数据库文件的一个优点是为了分配和管理目的,能够把文件关联到文件组中。文件组可
以用来把表、索引和其他数据分配到服务器中特定的位置。这样可以允许把大的或极少访问
的数据从主文件组中移出,从而提高对其他数据的访问速度。在第6学时“创建数据库、文件
和文件组”中,我将讲解创建文件和文件组。
4.3 系统数据库
SQL Server安装4个系统数据库。它们分别是m a s t e r数据库、m o d e l数据库、t e m p d b数据库
和m s d b数据库。这些数据库是SQL Server的心脏和灵魂。没有它们, SQL Server将无法运行。
这些数据库中每个库都在服务器中执行特定的功能。
4.3.1 master数据库
m a s t e r数据库控制SQL Server的所有方面。这个数据库中包括所有的配置信息、用户登录
信息、当前正在服务器中运行的过程的信息。SQL Server 运行时所做的第一件事就是寻找
2 8 SQL Server 7 24学时教程
下载
m a s t e r数据库并打开它。因为m a s t e r库中包括有关所有其他数据库的全部信息,所以它在整个
系统中是最重要的数据库。如果你丢失了m a s t e r数据库,要恢复所有你的用户数据库是非常困
难的。因此,保存m a s t e r数据库的最近备份是非常重要的,以防有什么意外事故发生。
4.3.2 model数据库
m o d e l数据库是建立所有用户数据库时的模板。当你建立一个新数据库时, SQL Server会
把m o d e l数据库中的所有对象建立一份拷贝并移到新数据库中。在模板对象被拷贝到新的用户
数据库中之后,该数据库的所有多余空间都将被空页填满。
4.3.3 tempdb数据库
t e m p d b数据库是一个非常特殊的数据库,供所有来访问你的SQL Server的用户使用。这
个库用来保存所有的临时表、存储过程和其他SQL Server建立的临时用的东西。例如,排序
时要用到t e m p d b数据库。数据被放进t e m p d b数据库,排完序后再把结果返回给用户。每次
SQL Server重新启动,它都会清空t e m p d b数据库并重建。永远不要在t e m p d b数据库建立需要
永久保存的表。
4.3.4 msdb数据库
m s d b数据库是SQL Server中的一个特例。如果你查看这个数据库的实际定义,会发现它
其实是一个用户数据库。不同之处是SQL Server拿这个数据库来做什么。所有的任务调度、
报警、操作员都存储在m s d b数据库中。该库的另一个功能是用来存储所有备份历史。S Q L
Server Agent将会使用这个库。
4.4 用户数据库
随着建立任何一个用户数据库, SQL Server都会在初始安装过程中建立两个用户数据库。
这些数据库不会影响服务器的操作和性能,但是它们提供了一个学习和试验新概念的好地方,
同时不必担心改变有用的数据。这两个数据库叫作p u b s和N o r t h w i n d。
4.4.1 pubs数据库
熟悉SQL Server以前版本的用户应该对p u b s数据库有印象。这个数据库包括出版公司的信
息,可用来演示很多SQL Server的关键特点和概念。你可以在这个数据库中做所需的修改,
不会影响你的SQL Server的运行。如果已做了许多修改,而又想恢复这个数据库最初的状态,
微软为你提供了这个数据库的安装脚本。这个脚本叫i n s t p u b s . s q l,存储在\ M S S Q L 7 \ I n s t a l l目
录中。要想重新安装p u b s数据库,按下面步骤执行。不用担心是否理解命令中的语法。在第5
学时“使用工具”中,我将讲解它。
1) 点击“S t a r t”按钮,到“P r o g r a m s”,选择“Command Prompt”。
2) 在命令提示符下,改变当前目录为\ M S S Q L 7 \ I n s t a l l子目录,键入如下命令:
c d \ m s s q l 7 \ I n s t a l l
3) 使用下列命令利用O S Q L工具运行i n s t p u b s . s q l:
o s q l / U s a / P s a p a s s w o r d / S s e r v e r n a m e / i i n s t p u b s . s q l / o i n s t p u b s . r p t
第4学时数据库结构基础2 9
下载
4) 运行完毕后,退出命令提示符状态,使用N o t e p a d显示i n s t p u b s . r p t文件内容。如果在执
行过程中有什么错误,将会包含在该文件中。
4.4.2 Northwind数据库
同p u b s数据库一样, N o r t h w i n d数据库是预安装的用户数据库,可以用来学习SQL Server
的概念。像Microsot Access 中的同名数据库一样,这个数据库包括了关于一个注册商标为
Northwind Tr a d e r s公司的信息。这个假设的公司在全世界进出口食品。你可以在这个数据库
中进行任何修改,而不用担心会影响你的成品系统。如果在这个数据库中做了改动,你可以
按下面的步骤通过运行i n s t n w n d . s q l来将它恢复成初始状态。就像在p u b s例子中一样,不必为
理解它而担心,以后我会讲解这些语法。本书中,我多次都在改动了这些数据库后,提到这
个重新安装过程。
1) 点击“S t a r t”按钮,到“P r o g r a m s”,选择“Command Prompt”。
2) 在命令提示符后,使用下面的命令改变目录到\ M S S Q L 7 \ I n s t a l l:
c d \ M S S Q L 7 \ I n s t a l l
3) 使用下列命令利用O S Q L工具运行i n s t p u b s . s q l:
o s q l / U s a / P s a p a s s w o r d / S s e r v e r n a m e / i i n s t n w n d . s q l / o i n s t n w n d . r p t
4) 运行完毕后,退出命令提示符状态,使用N o t e p a d显示i n s t n w n d . r p t文件内容。如果在执
行过程中有什么错误,将会包含在该文件中。
4.5 系统目录
有一系列特殊的表包含在所有用户数据库和系统数据库中,称为系统目录。利用这些表
包括的信息,SQL Server可以找出有关每个数据库中对象的信息。在系统目录中查询数据时,
微软会使你避免直接访问表。SQL Server为你提供了一种工具来浏览那些表中的信息,这个
工具就是Information Schema Vi e w s。Information Schema Vi e w s主要为你做两件事。第一件是
它阻止任何应用程序在系统目录中做改动。通常,当微软增加新功能到SQL Server中的时候,
他们会在系统目录的设计上做些修改。如果一个应用程序被硬编码为查找某些表,应用程序
就会失败,因为它们不能处理那些改动。如果这个应用程序仅指向Information Schema Vi e w s,
它们还能继续运行下去。为你做的第二件事是使SQL Server符合S Q L - 9 2标准。S Q L - 9 2标准定
义了S Q L数据库服务器的“表象”。这样就保证了SQL Server应用程序与其他数据库管理平台
上的应用程序兼容。如果你编写的应用程序可以与这些视图一起工作,那么该应用程序将能
够跨不同系统使用。
4.6 事务日志
在SQL Server中,事务日志负责维护你的数据库保持一致状态。这就是说它保证数据修
改要么是完整修改,要么被取消。所有这些数据修改都是基于事务的。一个事务是在S Q L
S e r v e r中运行的一个逻辑单元。在一个事务中,你可以做所有事或什么都不做。如果只有部分
事务运行,则数据库处于不一致状态。
对此,银行可能是一个合适的例子。假设在一个SQL Server中维护银行所有的帐号。一
天,你结算支票本,发现里面钱不够了。你的反应是打电话给银行,要求他们从你的存款帐
3 0 SQL Server 7 24学时教程
下载
号里转1 0 0 0美元到你的支票帐号里。你希望这个全过程是作为一个独立的事务。如果银行的
计算机在从你的存款帐号里减去1 0 0 0美元后,还没来得及在你的支票帐号里加上1 0 0 0美元,
就因为某种原因坏了,你将会损失1 0 0 0美元。
当一个事务开始后,在任何实际数据修改前,都会在事务日志中写入一行,表明事务处
理开始。所做的任何改动都会被记入事务日志。然后SQL Server 在内存或者在磁盘上找到数
据。如果数据在磁盘上,就把它载入内存。真正的数据修改在内存上进行,当SQL Server不
忙的时候再写入磁盘。当事务处理完毕,事务结束行会被写入日志。那个开始和最后的记录
就是SQL Server划定一个事务处理开始和完毕的标志。
由于某种原因,事务处理可能失败。它可能因为表无法写入而失败,也可能因硬件故障
而失败,或者因为某人偶然碰掉了墙外的电源线。
如果是这种情况,当SQL Server重新启动后,自动修复过程将在每个数据库的事务日志中进
行,查找事务的首条和末条记录并与数据库中的数据进行比较。在系统崩溃时,尚未提交的事务
会被取消。当开始和结束的事务记录在事务日志中都被发现时,事务会重新执行,或向前回滚。
自动修复过程从m a s t e r数据库开始,然后是m o d e l数据库。在m o d e l数据库修复后,自动
修复过程清除t e m p d b数据库中的所有对象。下一个是m s d b数据库被修复;然后是p u b s被修复。
如果服务器设置为发布服务器,下一个就是发布数据库被修复。在所有系统数据库被修复后,
用户数据库被修复。用户可以在系统数据库被修复后,登录服务器,但是在用户数据库完全
修复完之前,他们不能使用用户数据库。
自动修复过程不能关掉,但是两个设置选项会影响自动修复。在自动修复过程期间,在
SQL Enterprise Manager中,正在修复的数据库名会变灰,旁边标注着“ R e c o v e r i n g”字样。
修复标志选项决定在修复过程中SQL Server显示什么信息。修复时间间隔选项控制SQL Server
修复数据库所花费时间的最大值。你在这里设置的值将被SQL Server用于决定检查点处理的
频率。这些选项可以用SQL Enterprise Manager或者s p c o n f i g u r e存储过程来设置。
为加速自动修复过程, SQL Server执行一个叫检查点的处理。在检查点处SQL Server将所
有改动过的页写到磁盘。在完成修改后,它向事务日志写入一个记录。这是一个标识点,它
告诉SQL Server所有已完成的事务已被写入磁盘。
有两类检查点:用户预置的和自动的检查点。用户预置检查点由数据库拥有者设置。自
动检查点由SQL Server根据系统活动性和你设置的修复时间间隔值来设置。修复时间间隔决
定了服务器在一次失败后修复所需的时间。
在另两种情况下,数据库也使用检查点。当你使用存储过程s p _ d b o p t i o n修改数据库时,
将自动产生检查点。同样当你下达关闭命令时, SQL Server会对服务器上所有数据库进行检
查点处理。
4.7 课时小结
在本学时内,我讲解了SQL Server如何分配空间和怎样维护自身的信息。我还讲了S Q L
S e r v e r怎样使用事务日志来维护数据库的一致性。这将对你以后使用事务有所帮助。
4.8 专家答疑
问题:我建了一个数据库,里面数据从未被修改过,它只供查询。因为以后也不会有数
第4学时数据库结构基础3 1
下载
据被修改,而且我不想管理事务日志,可不可以把它关掉?
解答: 不行。这部分对SQL Server运行是至关重要的,因此微软不允许关闭它。此外,
对于只读数据库,因为从不修改数据,所以SQL Server将永远不会做任何事务日志。
问题:我刚刚安装上SQL Server 7.0,发现服务器中已有6个数据库存在。它们占了磁盘
空间,我想删除它们,这允许吗?
解答:不行。删除这些数据库,至少全部删除不行。只有两个数据库可以删除,它们是
p u b s和N o r t h w i n d数据库。系统中所有其他的数据库对服务器的运行都是至关重要的。
4.9 课外作业
这些思考题和练习题是供你加深理解用的。答案可以在附录“答案”中找到。
4.9.1 思考题
1) SQL Server给数据库中的对象分配空间的最小量是什么,有多大?
2) 当SQL Server第一次给一个新数据库对象分配空间时,怎样分配?
3) 什么是区域?有多大?
4) master数据库的作用是什么?
5) msdb数据库的作用是什么?
6) tempdb数据库用来做什么?
7) 主数据库文件用来做什么?
8) 可以给一个数据库增加多少主数据库文件?
9) 事务日志有什么用处?
10) 什么是事务?
4.9.2 练习题
在你的SQL Server中探查一次,找到m a s t e r数据库、m s d b数据库和m o d e l数据库。调查它
们数据和日志段有多大。
阅读(933) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~