2003-9-28 17:16
zdygk
第一章 DB2的概貌<br />提纲<br /> 列出存放数据的不同方式<br /> 描述DBMS的目的<br /> 列出DBMS提供的服务<br /> 列举UDB关系数据库理解的语言<br /> 列出UDB操作的平台<br /> 建立数据库<br /><br />1.1 文件系统特点<br /><br /> (1)无控冗余<br /> (2)数据不一致<br /> (3)数据缺乏独立性<br /> (4)数据难以共享<br /> (5)无法施加统一标准<br /><br />1.2 数据库系统特点<br /><br /> <br /><br /><br /> <br /><br /> 图1.1 数据库系统的数据处理视图<br /><br />下面分别叙述数据库方法的主要优点。<br />(1) 数据集成<br /> 数据的集成是数据库管理系统的主要目的。通过数据集成来统一规划与协调各相关应用领域的信息资源,这样可使数据得到最大程度的共享,而冗余最少。<br />(2) 数据共享<br /> 数据共享指在数据库中,一个数据可以为不同的用户共同使用,即各个用户可以为了不同的目的来存取相同的数据。<br />(3) 数据冗余最少<br /> 在文件系统中,每个应用拥有它各自的文件,这常常带来大量的数据冗余,如人事管理系统中的工资发放应用、人事应用、劳资应用和业务档案应用,每一个都可能拥有一个包含职工信息(如职工号、姓名、性别、职称、工资等)的文件。而对于数据库方法,这些分立而有冗余的数据文件被集成为单一的逻辑结构,而且每一数据项值可以理想地只存储一次。<br />(4) 数据一致性<br /> 通过消除或控制数据冗余,可以在一定范围内避免数据的一不致性。显然,引起不一致性的根源是数据冗余。若一个数据在数据库中只存储一次,则根本不可能发生不一致性。<br />(5) 实施统一标准<br />数据库对组织的数据进行集中管理控制,一个数据库系统必须包括一个称为数据库管理的组织机构(DBA)。数据库管理的职能包括管理和技术两个方面。在管理上负责制定并实施所要组织数据的命名、组织结构、格式及有效使用等方面的统一标准和控制过程。统一标准的数据有利于共享与彼此交换,有利于数据定义的重叠或冲突问题的解决以及今后的变更。<br /> (6) 统一安全、保密和完整性控制<br /> (7) 数据独立性<br /> (8) 减少应用程序的开发与维护<br />1.3 DBMS的工作原理<br />1.3.1 数据库管理系统的功能<br /><br /> <br /> <br /><br /> 图1.2 DBMS的主要组成部分<br /> 1.3.2 存储管理程序<br /> 存储管理程序,它的任务是从数据存储器获得想要查询的信息,并在接到上层的更新请求时更新相应的信息。DBMS的另一个组成部分是查询处理程序,不过这个名字有点不太恰当。因为它不仅负责查询,而且负责发出更新数据或数据字典数据的请求。它的任务是接受一个操作请求后,找到最佳的执行方式,然后向存储管理程序发出命令,使其报告。<br /> 在简单的数据库系统中,存储管理程序也许就是底层操作系统的文件系统。但为了提高效率,DBMS往往直接控制磁盘存储器。至少在某些情况下是这样,存储管理程序包括两个部分——缓冲区管理程序和文件管理程序。<br /> (1) 文件管理程序对文件在磁盘上的位置保持跟踪,并且负责取出一个或几个相关数据块,而数据块中含有缓冲区管理程序所要求的信息。磁盘通常划分成一个个连续存放的数据块,每个数据块能容纳许多字节,从212至214(大约4 000到16000)字节之间。<br /> (2) 缓冲区管理程序控制处理主存。它通过文件管理程序从磁盘取得数据块,并选择主存的一个页面存放其中一块。缓冲区管理程序会把数据块在主存中保留一段时间,但当另一个新数据块需要使用该页面时,就把旧数据块写回磁盘,让新数据使用。当然,如果事务管理程序发出请求,缓冲区管理程序也会把数据块写回磁盘,使改变的数据成为永久。<br /> 1.3.3查询处理程序<br /> 查询处理程序的任务是,把高级语言表示的对数据库的查询或操作(如SQL查询语句)转换成对存储器数据的请求序列。通常,查询处理任务最因难的部分是查询优化,也就是说选择好的查询规划,即对存储器系统选择好的请求序列来回答所要求的查询。<br /> 查询处理程序,不过这个名字有点不太恰当。因为它不仅负责查询,而且负责发出更新数据或数据字典数据的请求。它的任务是接受一个操作请求后,找到最佳的执行方式,然后向存储管理程序发出命令,使其报告。<br /><br />1.3.4 事务管理程序<br /><br /> 事务管理程序负责系统的完整性。它必须保证同时运行的若干个查询不互相冲突,保证系统在出现系统故障时不丢失数据。事务管理程序要与查询处理程序互相配合,因为它必须知道当前查询将要操作的数据(以免出现冲突),为了避免冲突的发生,也许需要延迟一些查询或操作。事务管理程序也与存储管理程序互相配合,因为保护数据的模式一般需要一个“日志”文件,记录历次数据的更新。如果操作顺序正确的话,日志文件将会记载更新的记录,从而使系统出现故障时能恢复在日志文件已记载的操作信息。<br /> DBMS允许用户将一个或多个查询和/或更新组成(transaction)。事务,非正式地讲,是一组按顺序执行的操作单位。数据库系统常常允许许多事务并发地执行。例如,有些事情可能在一家银行的所有ATM机器上同时执行,保证这些事务全部正确执行是DBMS中事务管理程序的任务。更详细地说,事务的“正确”执行还需要通常称为ACID的特性。ACID取自于事务执行的四个主要需求的首字母。这四个特性是:<br />·原子性(atomicity)。我们需要整个事务或者都执行或者都不执行。例如,从ATM机器中取钱和记入相关借方的顾客帐户上应该是一个原子事务。如果钱已经付出了而没有记入借方帐户或者记入了借方帐户而钱并没有付出,都是不能接受的。<br />·一致性(consistency)。数据库通常都有“一致状态”的概念,即数据符合我们的所有期望。例如,对航班数据库而言,“一个座位不能分配给两个不同的顾客”就是一种适当的一致性条件。要事务处理过程中的某个时刻,由于旅客之间调换座位,可能会违背这种一致性条件,但事务结束后,事务管理程序必须保证数据库满足所有约定的一致性条件。<br />·隔离性(isolation)。当两个或更多的事务并发运行时,它们的作用效果必须互相分开。也就是说,我们看到的两个事务并发运行的效果必须同两个事务一前一后运行时的效果完全一样。例如,如果两个机票代理正在出售同一航班的座位,而座位导致同一座位卖了两次或根本没卖,都是不能接受的。<br /> ·持久性(durability)。如果事务已经完成,即使系统出现故障,甚至事务刚刚完成,就出现了系统故障,事务的结果也不能丢失。<br /> 1.3.5 日志<br /> 事务管理程序记录了一个日志文件,包括每个事务的开始,每个事务所引起的数据库的更新和每个事务的结束,日志总是记在非易失性存储器上,像磁盘这样的存储介质,掉电后数据仍完好保存。因此,虽然事务本身的工作区可能是易失性的主存,而最后的结果总是直接写到磁盘。记录所有的操作是保证事务持久性的重要手段。为了保证持久性和原子性,事务一般以“试验”方式完成,也就是说,在试验过程中计算对数据库要做的更新,但并不真正地更新数据库本身。事务即将完成时,也就是事务提交时,更新的内容的已复制到日志记录中。该日志记录首先复制到磁盘上,然后才把更新的内容决定性地存储于数据库本身。日志文件主要是保护数据库以防止故障。一般为了防止日志文件本身的故障,UDB容许在不同磁盘上维护两个或多个日志副本。数据库操纵语句INSERT、UPDATE、DELETE的执行会影响日志文件的内容。<br />1.3.6 数据字典<br /> 数据字典是存放描述数据库对象的信息和管理数据库对象的信息的数据库。它的信息不是由一般用户操作的,而是由用户建立数据库对象或管理数据库对象时产生的信息,它的模式是系统建立的模式,如SYSIBM和 SYSCAT等系统模式。数据库定义语句CREATE、ALTER、DROP的执行会影响数据字典的内容。<br /><br />1.3.7 事务<br /> <br /> 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元。当它全部完成时,数据的一致性可以保持,而当这个单元中的一部分操作失败,整个事务应全部视为错误,所有从起始点以后的操作应全部回退到开始状态。 <br /> 对事务的操作是这样进行的:先定义开始一个事务,然后对数据作修改操作,这时如果提交(COMMIT),这些修改就永久地保存下来,如果回退(ROLLBACK),数据库管理系统将放弃所作的所有修改而回到开始事务时的状态。COMMIT 或 ROLLBACK 语句是一个旧事务的结束,另一个新事务的开始。第一个事务就是第一条SQL语句的开始。 正确地管理事务可以保证数据的完整性,当您所做的工作全部完成和得到确认之前,没有任何数据物理地写进数据库。让我们来看这样一个实例,我们有这样一个银行应用系统,前台使用者作出将储户甲的一百元存款划归储户乙帐下的操作;在后台的数据库中,这两个客户的 记录分储在两张表中,当使用者在屏幕上作出如上操作时,在后台需要对两张表进行修改。如果在数据库中对甲用户存款余款作减去一百元修改后,对乙用户加一百元的操作修改却失败时,前一张表也必须回到修改前的状态,否则数据库的内容不统一,甲储户白白损失一百元,信息必然是不正确的。因此进行事务管理是必须的。 <br /> 当一个事务的数据库修改都成功地完成后,修改须提交给数据库,COMMIT语句是一个旧事务结束和一个新事务开始的界线。在修改被提交前,数据库的数据并没有被真正地修改,这些修改被保留在某个工作区,只有作修改的用户才能看到这些被修改后的值,提交之后,则所有的用户就都可以看到新值了。 <br />在事务的进程中发生某些错误,或者在操作中出于种种原因打算中止事务,须用ROLLBACK命令回退事务,如果已作的操作不用ROLLBACK命令取消,这些操作必将错误地作为下一个事务的一部分而导致数据库的混乱。 <br /> 在多用户系统中,修改和提交的时间越接近,提交成功的可能性就越高。因为一个事务中 所有的SQL语句全部执行成功而提交却失败是完全可能发生的,例如在您的事务过程中,另一 个用户修改了数据并提交,这很可能使您作出的修改无效,这时COMMIT将失败,您必须回退这一事务的全部。 <br /><br />1.4 关系数据库的特点和产品<br />1.4.1 UDB 关系数据库的特点<br />DB2 UDB关系数据库系统是IBM公司开发的产品,可在许多种硬件平台上运行(包括微机、工作站、小型机、中型机和大型机),支持很多种操作系统。用户的DB2应用可方便地从一种计算机配置移至到另一种计算机配置上。DB2 UDB的分布式结构可将数据和应用驻留在多台计算机上,而相互间的通信是透明的。DB2 UDB关系数据库市场销售量不断上升,它之所以倍受用户喜爱是因为它有以下突出的特点:<br />。支持超大数据库、多用户的高性能的事务处理<br />。遵守数据存取语言、操作系统、用户接口和网络通信协议的工业标准。<br />。实施安全性控制和完整性控制。<br />。支持多媒体和分布式功能。<br />。具有可移植性、可兼容性和可连接性。<br /><br />1.4.2 UDB关系数据库的产品<br /> UDB(Universal Database )的前身为DB2,是IBM公司开发的关系型数据库管理系统。从其诞生之日开始,DB2就定位于要为各种规模的企业提供稳定、高效的数据管理支持。可以说,DB2是当前适用范围最广泛的数据库产品。我们对DB2产品的划分通常分为两种方法:一种方法是按其所能支持的硬件和操作系统平台进行划分,另一种方法是按其所能支持的用户规模的不同进行划分。<br /> DB2产品几乎覆盖了当前所有流行的硬件和操作系统平台。在大型机操作系统上,有DB2 for OS/390、DB2 for MVS/ESA、DB2 for VSE 和DB2 for VM等多种产品;在由IBM公司设计的小型机AS/400上,DB2已经嵌入在操作系统OS/400之中,成为其不可分割的一部分。DB2对UNIX操作系统的支持同样十分广泛,可以在AIX、HP-UX、 Solaris、SCO-UNIX、SINIX 等多种系统上找到其相应的版本。另外,在PC操作系统上,DB2可以对Window 9x、Windows NT以及OS/2等多种操作系统提供支持。UDB 6.1还增加了对Linux操作系统的支持。以上我们所提到的只是DB2服务器所能运行的平台,DB2的客户端所能支持的平台更为广泛,除了以上提到的所有平台之外,DB2的客户端还能运行在Dos、Windows 3.x、Mac OS以及SGI公司的IRIS系统之上。最早的 DB2产品是DB2 for MVS/ESA,以后的产品设计时都延续了它的基本结构及关键算法,保障了不同系统之间的可移植性和互操作性。但是,由于不同操作系统之间存在着不小的差异,DB2系列产品还针对相应的平台进行了一定的优化,以适应操作系统的特性。<br />UDB产品除了能够对各种硬件和操作系统平台进行支持之外,为了适应不同用户群的需要,UDB提供了不同级别的产品,对小到个人用户,大到跨国企业的不同需求提供支持。以下是对UDB 6.1版本不同级别产品的特点介绍:<br /> UDB卫星版:是专门为移动用户设计的小型数据库产品。适合于偶尔连接 DB2控制服务器来与公司系统交换数据的单用户系统。它既能允许用户对本地数据进行各种修改,又可以接受远程卫星控制器的集中管理,减轻本地用户的管理负担。该版本只能运行在Windows平台。(该版本属于UDB 6.1版本新增版本)<br />UDB个人版:是专门为个人用户设计的功能完备的个人数据库产品,允许用户在本地建立数据库、更改数据、开发应用程序从本地对数据库管理系统进行存取以及通过内置的客户端对远程数据库服务器进行管理。。该版本的限制在于不能对远程应用程序提供全面支持。该版本可以运行在Windows、OS/2以及Linux平台。<br />UDB工作组版:适用于小型局域网的数据管理需求。具有UDB个人版的全部功能,并能够对远程应用程序提供全面支持。该版本可以运行在Windows、OS/2以及Linux平台。(UDB工作组版 5.0可以运行在UNIX平台)<br />UDB企业版: 简称为UDB EE,适用于企业级的数据管理需求。具有UDB工作组版的全部功能,并能够利用对称多处理(SMP)技术提高系统性能。在它的程序包中,包含了DB2 Connect企业版,允许Intel平台和UNIX平台的客户端应用程序访问大型机和AS/400上的数据库服务。UDB企业版可以运行在Windows、OS/2、Linux以及UNIX平台。<br />UDB企业扩展版:简称为UDB EEE,适用于大规模的企业应用。大规模的企业应用的基本要求是稳定(宕机时间短)和高效(处理速度快),UDB企业扩展版能够利用群集(cluster)和大规模并行处理(MPP)技术提高系统的稳定性和性能。<br /><br />1.5 关系数据库的操作语言SQL的概述<br />1.5.1 SQL简介<br /> SQL语言作为关系数据库管理系统中的一种通用的结构查询语言, 已经被众多的数据库管理系统所采用,如UDB、ORACLE、Sybase、Informix等数据库管理系统,它们都支持SQL 语言。在使用开发数据库应用程序时,我们可以使用SQL语言编程,这也是体现一个强大的数据库应用开发工具的一个重要标志。<br /> SQL是关系数据库管理系统的高级语言。在70年代初,E.E.Codd首先提出了关系模型。70年代中期,IBM公司在研制 SYSTEM R关系数据库管理系统中研制了SQL语言,最早的SQL语言(叫SEQUEL2)是在1976 年 11 月的IBM Journal of R&D上公布的。1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2 和SQL/DS数据库系统中也实现了SQL。<br /> 1986年10月,美国ANSI采用SQL作为关系数据库管理系统的标准语言(ANSI X3. 135-1986),后为国际标准化组织(ISO)采纳为国际标准。1989年,美国ANSI采纳在ANSI X3.135-1989报告中定义的关系数据库管理系统的SQL标准语言,称为ANSI SQL 89, 该标准替代ANSI X3.135-1986版本。该标准为下列组织所采纳:<br />● 国际标准化组织(ISO),为ISO 9075-1989报告"Database Language SQL With Integrity Enhancement"<br />● 美国联邦政府,发布在The Federal Information Processing Standard Publication(FIPS PUB)127<br />目前,所有主要的关系数据库管理系统支持某些形式的SQL语言, 大部分数据库打算遵守ANSI SQL89标准。 <br /> "SQL" 是英文Structured Query Language (结构化查询语句)的缩写。 SQL常被读为"sequel",也可以读成"S.Q.L"。 SQL是用于对存放在计算机数据库的数据进行组织,管理和检索的工具。实际上,SQL是用于特定类型的数据库─ 关系型数据库(relational database)的高级语言,并随着关系型数据库模型而的以普及。关系数据库中的表、行/列结构很直观,因而使得SQL语言简单易懂。 <br />1.5.2 SQL的优点<br /> SQL广泛地被采用正说明了它的优点。它使全部用户,包括应用程序员、DBA管理员和终端用户受益非浅。<br />(1) 非过程化语言<br /> SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航。SQL允许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集。所有SQL 语句接受集合作为输入,返回集合作为输出。SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入。<br /> SQL不要求用户指定对数据的存放方法。 这种特性使用户更易集中精力于要得到的结果。所有SQL语句使用查询优化器,它是RDBMS的一部分,由它决定对指定数据存取的最快速度的手段。查询优化器知道存在什么索引,哪儿使用合适,而用户从不需要知道表是否有索引,表有什么类型的索引。<br />(2) 统一的语言<br /> SQL可用于所有用户的DB活动模型,包括系统管理员、数据库管理员、 应用程序员、决策支持系统人员及许多其它类型的终端用户。基本的SQL 命令只需很少时间就能学会,最高级的命令在几天内便可掌握。<br /> SQL为许多任务提供了命令,包括:<br />● 查询数据<br />● 在表中插入、修改和删除记录<br />● 建立、修改和删除数据对象<br />● 控制对数据和数据对象的存取<br />● 保证数据库一致性和完整性<br />以前的数据库管理系统为上述各类操作提供单独的语言,而SQL 将全部任务统一在一种语言中。<br />(3) 是所有关系数据库的公共语言<br /> 由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS转到另一个。所有用SQL编写的程序都是可以移植的。<br />1.5.3 SQL的分类<br />SQL的主要语句分为以下几类:<br />数据定义语言 DDL:CREATE、ALTER、DROP <br />数据操纵语言DML:INSERT、UPDATE、DELETE<br />数据查询语言:SELECT<br />数据控制语言 DCL :GRANT、REVOKE等<br />1.6 数据库的建立<br /> 1.6.1 创建数据库<br /> 创建数据库用CREATE DATABASE命令,它需要创建者有SYSADM或者SYSCTRL权限。该创建语句有许多缺省的选项值,所以创建一个数据库可以用简单的形式,也可以用复杂的形式,具体情况视创建者需求而定。<br /> 例1:CREATE DATABASE japanl ON (/db2/japan1);<br /> 该语句创建一个数据库japanl,数据库存放于目录/db2/japan1下。<br /> 创建一个数据库将完成如下工作:<br /> · 在指定的本地数据库目录下,产生一个物理目录以存储该数据库。缺省的本地数据库目录是数据库管理员配置文件中DFTDBPTH参数所指定的值;<br /> · 产生一个文件,记载数据库恢复日志和其它必要的信息;<br /> · 产生一些表空间。这些表空间的特性可以在命令中指定,也可以设置为系统缺省值。缺省情况下,创建一个新的数据库后,会产生一个表空间:SYSCATSPACE(存放系统目录表),USERSPACE1(存放用户数据),TEMPSPACE1(临时存储表空间)。<br /> · 为新建的数据库设置CODESET、TERRITORY等参数的值。<br /> · 在系统表空间中,产生所有的系统目录及其视图。<br /> · 将一些实用程序捆绑到新的数据库中,创建它们在该数据库中的包(Package),使得这些应用程序能够使用该数据库,实现相应的功能。<br /> · 在DB2实例的系统数据库目录中产生新建数据库的入口。<br /> · 对创建数据库的用户授予DBADM权限,向PUBLIC用户授予CONNECT,CREATABTAB及BINDADD权限。<br /> 下面我们用一个比较详尽的例子来说明CREATE DATABASE的用法。<br /> 例2:<br /> CREATE DATABASE personl<br /> CATALOG TABLESPACE MANAGED BY SYSTEM<br /> USING ( “d: \ pcatalog” , “e: \ pcatalog”)<br /> EXTENTSIZE 16<br /> PREFETCHSIZE 32<br /> USERTABLESPACE MANAGED BY DATABASE<br /> USING (FILE “d: \ db2data \ personl”, 5000,<br /> FILE “c: \ db2data \ personl”, 5000)<br /> EXTENTSIZE 32<br /> PREFETCHSIZE 64<br /> TEMTABLESPACE MANAGED BY SYSTEM<br /> USING (“f: \ db2temp \ personl”)<br /> WTTH “personnal db for the computer depatment”<br /> 该例创建数据库personl,显示生成三个表空间:<br /> · CATALOG表空间——该表空间是SMS表空间,位于d: \ pcatalog和e: \ pcatalog目录下,扩展单元大小为16页,预取单元为32页;<br /> · USER表空间——该表空间是DMS表空间,位于d: \ db2data \ personl和e: \ db2data \ personl目录下,扩展单元大小为32页,预取单元为64页;<br /> · 临时表空间——该表空间是SMS表空间,位于f: \db2temp \temp1目录下,扩展单元和预取单元大小都取系统缺省值;<br /> · WTTH子句——该字符串描述了创建数据库的目的。<br /> 1.6.2 删除数据库<br /> 要删除一个过期无用的数据库,执行命令:<br /> DROP DATABASE dbname<br />就行了,其中dbname代表被删除的数据库的名字。<br /> 注:详细请见数据库系统管理的有关章节。