计算机应用
COMPUTER APPLICATIONS
1999年 第19卷 第6期 Vol.19 No.6 1999



Microsoft Access与Oracle的性能比较
刘广钟　刘晓飞
　　摘　要　Microsoft Access是深受微机用户喜爱的关系数据库管理系统，而Oracle主要使用在大中型计算机上，随着Oracle Developer/2000的推出，Oracle也开始在微机上流行起来。本文通过对二者在数据库体系结构、数据互操作能力、数据管理能力、数据安全性、前端用户界面、系统运行效率等方面的比较，阐述了这两种关系数据库管理系统在微机上运行的优缺点。
　　关键词　Access，Oracle，Developer/2000，RDBMS，SQL
1　概述
　　Access 是目前比较流行的一种关系数据库管理软件。与许多数据库管理软件一样，Access允许构造应用程序来收集和存储数据，并使其能很容易地用多种方式进行筛选、分类和更新数据。而且，可以通过显示在屏幕上的表单来查看Access的数据，也能在打印出的报表中看到它们。作为Microsoft Office Professional家族的一部分，Access 以其方便快捷的特点与Word和Excel一起在微机上得到了广泛的应用。
　　Oracle是目前最流行的中大规模关系数据库管理系统。作为一个开放型的分布式数据库产品，Oracle 提供局部自治和场地透明性的功能，并且能在各种形式的异构系统下正常工作，在相当程度上满足了硬件、操作系统和网络的独立性。近年来，Oracle开始在微机上流行起来。Oracle的强大功能既来自于其允许用户快速而准确地进行数据检索的能力，也来自于其强大的保证数据的完整性和一致性及维护数据的安全能力。Oracle提供的第四代语言开发工具，允许软件开发者快速的建立一个应用。
　　作为世界上著名的两大软件公司的产品，Oracle和Access都具有各自的优势和缺点，下面对二者作一个综合的比较。
2　数据库体系结构的比较
　　Oracle是一个典型的分布式数据库管理系统，这个系统采用客户/服务器体系结构。在网络环境中，每一个具有多用户处理能力的硬件平台都可以成为服务器，也可以成为工作站。多个服务器上的数据库对用户来说，是一个逻辑上的单一数据库整体，数据一致性、完整性及安全性都是对这一逻辑上的单个数据库进行控制的。服务器对共享数据的存取进行管理，而非数据库管理系统的处理操作可以由客户机来完成。Oracle分布式数据库系统结构如图1所示。Oracle数据库有明显的“前端”与“后端”之分。它的数据表（Tables）及存放在表中的完整性约束条件作为“后端”，由数据库管理员统一进行管理。“前端”开发工具构造的应用程序通过与数据库联接（Connect）来操纵“后端”的数据。Oracle的“前端”和“后端”具有较大的独立性。

图1　Oracle分布式数据库体系结构
　　Oracle提供了一个完整的客户/服务器体系结构的DBMS。利用SQL*NET软件层，与多种操作系统支持的通信协议相配合，为Oracle RDBMS提供分布式处理环境，可实现单点更新，多点查询。
　　与Oracle不同，Access的设计者决定将表格与用户接口组件和代码一起存储，完整的数据库和所有相关的对象都存储在磁盘上的一个文件中。这样，用户可以很自由地管理和使用所有属于自己的数据及相关的对象。然而，从开发易于别人使用的Access数据库的观点来看，这种明显的设计优点很可能实际上是一个不利条件。如果代码对象与数据成员在同一个文件中的话，则更新和修改这些代码对象就更加麻烦了。为了克服上述缺点，经验丰富的开发人员往往把数据成员与代码对象分别存储在两个不同的文件中，然后再使用Access本身提供的链接技术使数据成员与代码对象分成“前端”和“后端”。
3　数据互操作能力的比较
　　Access提供了两种方法来获取外部数据源：链接和导入。通过Access的链接和导入功能，可以将Dbase、FoxPro、Paradox、Lotus、Excel等数据库以及Html文件，文本文件等链接或导入为Access可用的数据库。Access可以自动实现上述异种数据库向Access数据库的转换。如果以上文件类型仍不能满足用户需要，还可以通过ODBC数据源调入所需要的数据库文件。在Access中可以用VB实现对ODBC的编程。
　　Oracle不能自动实现异种数据库的互操作。用户可以利用它提供的开放客户适配器（Open Client Adapter），通过对ODBC编程来实现上述功能。目前，Oracle支持Microsoft SQL Server、Microsoft Access和Rdb等几种ODBC数据源。Oracle在实现异种数据库的互操作方面还有一定的局限性。
4　数据管理能力的比较
　　任何关系数据库管理系统（RDBMS）的首要功能都是检索和显示所存储的信息。Oracle通过使用SQL的SELECT语句来实现这一功能。SQL的SELECT语句有6个子句，通过它们可以很简单地将一个表单中的数据显示出来，也可以实现涉及多个表并且要根据表中数据进行计算的复杂查询。除了查询以外，Oracle还可以通过SQL语句简单地实现数据的插入、更新、删除等操作。另外，Oracle 还提供了大量的函数。通过这些函数，可以实现一个或多个数据表（Table）之间的批量数据操作。
　　Oracle提供了两种语言对数据库进行存取：SQL和PL/SQL。SQL是一种标准的结构化查询语言，Oracle通过它实现了与诸多数据库的兼容性。利用Oracle提供的SQL*Plus工具执行SQL命令。在这里，用户既可以执行一条一条的SQL命令，也可以编写一段SQL程序来操纵数据。PL/SQL即模块式的过程化SQL，它具备了许多SQL中没有的过程化属性方面的优点，其中包括：模块化结构、允许使用定义标识符、用过程化语言控制结构进行程序设计、错误处理、高操作性能等。SQL和PL/SQL的执行示意图见图2和图3。

图2　SQL语名的执行

图3　PL/SQL块的执行
　　与Oracle不同，Access一般不支持用户直接书写SQL语句来操纵数据。Access最突出的特点是提供了大量的数据库向导（Wizard），使得用户可以快速地开发出适合于自己的数据库原型，大大缩短了开发周期。在Access的Database窗口中提供了查询（Queries）、窗体（Forms）、报表（Reports）三个标签（工具）来帮助用户操纵和管理数据。Access本身也具备很强的数据管理功能。为了方便用户，Access还提供了建立数据表（Table）、查询、报表、用户界面设计等的创建向导（Wizard）。
　　在Access中可以通过宏和VB程序代码来操纵数据。宏是指一个或多个操作的集合，其中每个操作实现特定的功能，例如打开某个窗体或打印某个报表。宏可以使某些普通的任务自动完成。例如，可设置某个宏，在用户单击某个命令按钮时运行该宏，以打印某个报表。Access已经提供了近50个宏供用户使用，用户还可以自己编写宏来实现所需的操作。在Database窗口的模块（Module）标签中，用户可以编制自己的VB 程序段。这些程序段可以实现复杂的数据操纵功能。用户可以通过窗体上的VB控件调用这些程序段。
5　数据安全性的比较
　　数据库安全性是指保护数据库以防止不合法使用，其重要作用就是保护数据库中的数据，避免数据被有意或无意地泄露、丢失以及破坏性地改变。
　　Microsoft Access 提供了设置数据库安全的两种传统方法：为打开的数据库设置密码，或设置用户级安全，以限制允许用户访问或更改数据库的哪一部分。此外，还可将数据库保存为 MDE 文件以删除数据库中可编辑的 Visual Basic 代码以防止对窗体、报表和模块的设计进行修改。
　　为打开的数据库设置密码是一种最简单的方法。设置密码后，只有键入正确密码的用户才可以打开数据库。由于Microsoft Access 对密码进行加密，因此直接查看数据库文件是无法得到密码的，所以这个方法是比较安全的。
　　为打开的数据库设置密码的缺点是系统只在打开数据库时检查密码，在数据库打开之后，数据库中的所有对象对用户都将是可用的。并且，如果要复制数据库，则不能使用数据库密码。如果设置了密码，复制的数据库将不能同步。
　　在Access中设置数据库安全的最灵活和最广泛的方法是设置用户级安全。这种安全类似于很多网络中使用的方法，它要求用户在启动 Microsoft Access 时确认自己的身份并键入密码。在工作组信息文件中，用户标识为组的成员。Microsoft Access 提供两种默认的组：管理员（称为管理员组）和用户（称为用户组），但也可定义其它的组。
　　Access的数据库管理员可以为组和用户授予权限，规定他们如何使用数据库中的对象。例如，用户组的成员可以查看、输入或修改“顾客”表中的数据，但不能更改表的设计。或者只允许查看包含定单数据的表，而不能访问“工资”表。管理员组的成员则对数据库中的所有对象都具有完全的权限。如果要设置更细致的控制，可以创建自己的组帐号，为其指定适当的权限，然后将用户添加到组中。
　　Access虽然提供了很多安全性措施，但它的安全性需要用户的主动防范，Access默认的数据库权限是对任何用户都开放的。Oracle提供了与Access类似但比Access强得多的安全机制。Oracle前后端的独立性为它的安全性提供了良好的基础。该系统在实现安全性管理时采用了如下措施：①通过验证数据库用户名和口令，防止非Oracle用户注册到Oracle数据库，对数据库进行存取；②赋予不同用户不同的权限，限制用户操纵数据库中数据的权利；③赋予不同用户对数据库实体的存取权限；④提供数据库实体存取审计机制，使用户可以监视数据库中数据的存取和系统的使用情况；⑤使用视图实施安全性控制。
　　Oracle的数据库管理员（DBA）可以给数据库的访问和数据库实体的存取予以授权。数据库管理员可以进行用户级、资源级、表级、行级和列级授权。Oracle7完全支持ANSI/ISO标准所申明的完整性约束，可以将完整性约束条件写在数据表中，不用编程就可以实施所有实体完整性和引用完整性规则。Oracle采用了透明的两阶段提交机制，以保证分布更新事务的完整性，多场地事务只要用标准SQL 的COMMIT邮局就可完成提交操作。Oracle可自动检测和解决所有故障，确保所有场地上一同提交或一同撤消。使用Oracle7可以将常用数据透明地复制到多个结点，Oracle7根据主表自动刷新它的只读副本（称为快照）。
6　前端用户界面的比较
　　作为Microsoft的一个拳头产品，Access提供了十分方便的用户界面。打开一个Access应用程序，我们可以见到Database窗口上有六个标签，分别为：表格（Tables）、查询（Queries）、窗体（Forms）、报表（Reports）、宏（Macros）和程序模块（Modules），这是Access提供给开发者管理使用数据的六种工具。
　　由于Access与Windows操作系统同出自Microsoft公司，所以Access在其界面设计方面比Oracle产品具有优势。Access支持各种VB控件，并且与Windows操作系统做了很好的衔接。Access还提供了大量的设计模板和智能设计功能，方便易用。
　　Developer/2000是Oracle提供的前端开发工具。通过这一工具，用户可以使用面向对象的方法来开发图形用户界面的应用程序。Oracle提供SQL*Forms使用户可以开发和执行基于表格（Form）界面的应用程序。Oracle的SQL*Reports是一个强有力的报表工具软件，可以用来生成各种报表。而SQL*Loader工具则可以完成各类数据加载Oracle表的任务。Oracle Developer/2000的设计工具箱中可用的设计工具较少。虽然可以通过加载VBX控件来扩充工具箱，但受限较大。并且，Oracle Developer/2000的智能性较差。从总体上来说，Oracle Developer/2000比Access要稍逊一筹。
7　运行效率的比较
　　Access对数据的操作是借助于SQL语言完成的，SQL具有较高的执行效率。但是，由于Access更多的是借助VB代码来实现应用程序，而VB是一种解释型语言，所以从总体来说效率低，它只适用于微机上的小型数据库管理。
　　Oracle支持SQL和PL/SQL两种语言，具有较高的事务处理速度。Oracle从第7版开始采用了多线索服务器体系结构，能在所有硬件体系结构上为大量用户提供可扩充的高性能。Oracle还采用了自协调的多线索服务器体系结构，根据当前工作负荷，动态调整数据库服务器进程的个数。共享的SQL缓冲区允许所有用户在执行同一SQL语句时，共享内存中单一副本，使得内存占用达到最小。动态SQL、静态SQL以及存储过程可以为所有用户共享，该特性使操作系统开销和内存占用达到最小。Oracle7提供基于成本的智能查询优化器，系统根据表中的行数、索引等统计信息，决定最有效的存取路径。Oracle7的有效存取路径和并发控制特性，保证了对最复杂的查询也有极佳的查询性能。
8　结束语
　　通过以上比较我们可以发现，Access使用起来灵活、简便，但效率较低，适用于微机上开发小型数据库；而Oracle功能强大，运行效率较高，安全性较好，但对图形用户界面的设计不够方便，适合于设计中大规模数据库。 
作者简介：刘广钟　副教授。从事网络技术及分布式数据库系统的研究。
刘晓飞　教师。
作者单位：中国矿业大学计算机科学与技术系　江苏.徐州（221008）
收稿日期:1999-03-16(修改稿)
