基于Oracle的智能交通系统(ITS)分布式数据库
系统研究
高爽 肖扬
(北京交通大学 计算机与信息技术学院 北京 100044)
摘要:在分布式数据库系统环境下,信息可能存储在地理位置分散的数据库中,如何在全
局逻辑上查询、更新分布在分布式数据库中的错误是分布式数据库技术要着力解决的问题。
分布式数据库技术是数据库技术和计算机网络技术的结合,除了具有集中式数据库所具有
的数据逻辑独立性和物理独立性,还具有数据的分布独立性。本文对 Oracle 分布式数据库
系统的原理、设计与实现技术进行研究,并将其应用于智能交通的分布式数据应用系统中。
通过初步的开发和应用,所设计的 Oracle 分布式数据库系统基本上达到了理论设计要求,
运行结果表明,用 Oracle 建立智能交通系统(ITS)的分布式数据库方案是切实可行的、
并具有良好的应用和发展前景。
关键词:分布式数据库,智能交通系统,ORACLE
___________________________________
z 科技部“十五”国家科技攻关计划重大项目: 智能交通系统数据管理技术研究,
2002BA404A05.
- 1 -
1 前言
近年来,各种各样的新技术应运而生,分布处理的技术也从多个处理机的系统领域渗透
到数据库技术中,并掀起分布式数据库研制与开发的热潮。分布式
数据库系统符合当今信息系统应用的要求,符合当今企业组织的管理思想和管理方式。
分布式数据库是一个数据集合,数据在逻辑上属于同一个系统,但实际上又分散在计算
机网络系统若干结点上,Oracle 分布式数据库系统是由分布式数据系统、SQL*NET、以及
SQL*CONNECT 组成的一个软件群。不仅具有分布式、逻辑关联性这两个分布式数据库的
重要特点,而且可以通过建立数据库链路、数据快照、视图、同义词来实现数据位置的透明
性,用户无须指明数据所在结点的名字,可达到透明访问。通过数据库链路、分布式事务和
两阶段提交机制来实现分布式存储和更新。这样实现的分布式数据库的优点是:系统结构分
布化、高可靠性,系统结构简单、易维护,维护成本低、易扩展。
本文对 Oracle 分布式数据库系统的原理、设计与实现技术进行研究并将其应用于智能
交通的分布式数据库应用系统中。文中,对 Oracle 分布式数据库系统设计与实现中的数据
库链接与位置透明性、远程过程中错误的管理、参照完整性约束、数据库访问的安全性以及
查询优化几个部分重点进行了探索。
2 研究方法与关键技术
本课题是针对智能交通开发一套基于 Oracle 的分布式数据库系统,涉及面广,且结构
繁复,建立有效的、与应用无缝的 Oracle 分布式数据库系统,要解决以下关键技术问题。
⑴ 数据库链接与位置透明性
数据库链接是本地数据库中的一个指针,允许访问远程数据库中的对象。数据库链接用
于建立与远程数据的联系,它为远程数据库指定了数据库、用户帐户和口令。数据库链接可
以是公共的,也可以是私有的。数据库链接存放在“本地”计算机的数据字典内,定义了一
个从 Oracle 数据库服务器到另一个数据库服务器地单向地通信路径。当使用时,它作为远
程数据库的用户帐户连接到指定的数据库。当操作完成后,数据库链接退出远程的数据库。
如何建立数据库链接,使分布式数据库系统具有位置透明性,是系统运行的关键。
数据库链接允许本地用户访问远程数据库中的数据。为了产生这种链接,分布式数据库
系统中的每个数据库就必须在网络域中有唯一的全局数据库名。该全局数据库名唯一地标识
分布式系统中的数据库服务器。【1】
图 1 说明了用户 ITS_USER 用全局名称 访问远程数据库
TBL_SOURCE_ITS 表的例子:
- 2 -
TBL_SOURCE_ITS
用户:ITS_USER
SELECT * FROM TBL_SOURCE_ITS
PUBLIC SYNONYM TBL_SOURCE_ITS
->TBL_SOURCE_ITS@
数据库链接
本
地
远
程
图 1 数据库链接
而分布式数据库系统中透明性的目的,就是使分布式数据库系统看起来就好像它是一个
单个的 ORACLE 数据库一样。其结果是,使用分布式数据库系统的开发者和用户,不承担
使用该系统所带来的复杂性。
ORACLE 分布式数据库系统有这样的特性,它允许应用开发者和管理员,对应用和用户
隐藏数据库对象的物理位置。当用户可以到处参考数据库对象,而不管应用所连接的节点时,
就是位置透明性。位置透明性有几个好处:
z 访问远程数据简单,因为数据库用户并不需要知道数据库对象的物理位置。
z 管理员移动数据库对象而不影响终端用户和现有的数据库应用。
典型的管理员或开发者使用同义词来给表建立位置透明性,以及支持应用模式中的对
象。除了同义词之外,开发者还能使用视图和存储过程为分布式数据库系统中的应用建立位
置透明性。
⑵ 管理远程过程中的错误
当 Oracle 在本地或远程位置中执行过程时,可能发生一些例外。例如 PL/SQL 用户定义
的例外、PL/SQL 预定义的例外、SQL 错误、用 RAISE_APPLICATION_ERROR()过程产生
的应用例外等。如何捕获并解决这些例外,是成功运用 Oracle 分布式数据库系统的关键。
⑶ 处理悬而未决的事务
两阶段提交机制保证了所有的节点要么一起提交、要么一起回滚。如果因为系统或网络
故障而使这三阶段的任何阶段失败,那么该事务就会变成悬而未决分布式事务。
分布式数据库系统悬而未决的事务处理包括:悬而未决事务的自动解决;悬而未决事务
的手动解决。
⑷ 参照完整性约束
要在应用中设计出,能检查任何表示分布式更新部分失败的返回信息的功能。如果探测
到一个失败,就应该在应用继续运行之前回滚整个事务。
Oracle 不允许在分布式系统的各个节点之间,定义公布的参照完整性约束,换句话说在
一个表上公布的参照完整性约束,不能指定一个参照远程表的主键、或唯一性的外键。然而
可以用触发器来维护各节点的父/子表之间的关系。如果用触发器来定义分布式数据库的各
节点之间的参照完整性,网络故障可能不仅会限制对父表、还会限制对子表的访问可能性。
⑸ 数据库访问的安全性
- 3 -
数据库访问的安全性是指,保护数据以防止非法用户使用,避免数据被有意或无意地丢
失、泄漏或破坏。随着分布式数据库系统的实施和各个子系统的建立,各个子系统之间需要
经常共享数据,而不同的子系统往往分布在不同的服务器中。如何安全有效地访问各系统所
需地数据,防止数据库数据地丢失和非法用户的侵入,以及保证各系统地物理位置与调用的
应用程序无关(即保证各系统地位置透明性),是本项目所面临地重要问题。
3 系统实现
智能交通系统(ITS)是交通信息的综合处理平台,要对分布数据库所提供的数据进行
有效、系统的分析整理。我们所研究智能交通系统的分布式数据库由综合平台数据库
ITSplatform、驾驶员管理数据库 Driver、车辆管理数据库 Vehicle、交通事故管理数据库
Accident、交通违法管理数据库 Irregularity 五大子系统组成。其物理结构如下图所示。
分布式数据库
驾驶员管理 车辆管理
交通事故管理 交通违法管理
图 2 分布式数据库示意图
此五个数据库系统是物理上在同一个域、或不同域中的相互独立的数据库系统,在网络
中互联。以下就每个数据库的设计和如何构成分布式数据库系统、以及相关问题的研究进行
阐述。
单个数据库物理设计
数据字典设计
数据字典是由表和视图组成的,存储有关数据库结构信息的一些数据库对象。
智能交通系统中的综合平台数据库、驾驶员管理数据库、车辆管理数据库、交通事故管
理数据库、交通违法管理数据库五个数据库系统,每个系统大概有上百张以上的表、和若干
视图。
数据库系统实体设计
⑴ 表空间设计
创建一个新的表空间,可使用 SQL 语句 CREATE TABLESPACE 或 CREATE
TEMOPRARY TABLESPACE,随后可以使用 ALTER TABLESPACE 或 ALTER DATABASE
语句来修改该表空间,相应地也必须系统权限。
如下以综合平台数据库表空间为例说明表空间的设计:
CREATE TABLESPACE ITS_GIS datafile ‘’ size 512M;
- 4 -
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
创建一个名为 ITS_GIS 的本地管理的表空间,表空间存储在 数据库文件中,
数据文件的大小为 512M,其中 TUTOALLOCATE 子句使 ORACLE 根据建立的数据对象对
空间的要求自动确定扩展块的大小,最小为 64K。
⑵表设计
创建新表需要有系统权限,以交通流信息表为例说明表的设计:
CREATE TABLE TRAFFIC_FLOW
(
RECORDNO NUMBER(20) NOT NULL, --记录编号
DETECTTIME DATE NOT NULL, --检测时间
DETECTORID NUMBER(10) NOT NULL, --流量检测器编号
FLOW NUMBER(10), --车流量
OCCUPY NUMBER(6,2), --占有率
DESCRIPTION VARCHAR2(200), --检测描述
REMARK VARCHAR2(200), --备注
CONSTRAINT TRAFFIC_FLOW_P PRIMARY KEY (RECORDNO),
CONSTRAINT TRAFFIC_FLOW_F FOREIGN KEY(DETECTORID) REFERENCES
COM_FLOWDETECTOR(DETECTORID) ON DELETE CASCADE
) TABLESPACE ITS_GIS;
数据库例程设计
⑴存储过程设计
一个存储过程是一个操作数据库的代码单元,可以被传递参数,并能够返回值。以实现
交通流信息表更新的存储过程为例,说明存储过程的设计:
CREATE OR REPLACE PROCEDURE UPDATE_TRAFFIC_FLOW
(
RECORDNO_N IN NUMBER ,
DETECTTIME_N IN DATE,
FLOW_N IN NUMBER
)
AS
BEGIN
UPDATE TRAFFIC_FLOW
SET RECORDNO=RECORDNO_N,
DETECTTIME= TO_DATE(TO_CHAR(DETECTTIME_N, 'DD-MON-YYYY
HH24:MI:SS'),'DD-MON-YYYY HH24:MI:SS'),
WHERE RECORDNO=RECORDNO_N;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE;
END;
- 5 -
/
以上的代码可以作为存储过程设计的模板。
⑵触发器设计
触发器(trigger)是存储过程,当针对一个表发生特定的动作时,就会激活它。下面的
脚本,实现在每次系统日志插入日志表(TBL_LOG)前,生成一个字段(RECORDNO)的值。
CREATE OR REPLACE TRIGGER LOGID
BEFORE INSERT OR UPDATE ON TBL_LOG
FOR EACH ROW
BEGIN
IF INSERTING THEN
SELECT
INTO : FROM DUAL;
ELSE IF UPDATING THEN
::=:;
END IF;
END IF;
END LOGID;
/
以上的代码可以作为触发器的设计模板。
数据库角色设计
可以用 CREATE ROLE 语句来创建角色,只有安全管理员才具有这个系统权限。刚刚
创建的角色没有任何相关的权限,为使一个新角色与权限相关联,必须给该新角色授予权限
或其他角色。【2】
本系统使用的角色基本上是 Oracle 中已有的一些角色。
用户设计
数据库用户通过应用程序或实用程序与数据库进行交互。典型的用户的职责包括在允许
的地方插入、修改和删除数据,根据数据生成报表等一些内容。
创建用户的目标是,建立一个安全、有用的帐户,并且这个帐户要有充分的权限和正确
的缺省设置值。可以使用 CREATE USER 命令来创建一个新的数据库帐户。该帐户创建后,
在授权前它没有任何效力,用户甚至不能注册。
下面以创建专用数据库用户为例说明用户的创建与授权:
CREATE USER ITS_USER IDENTIFIED BY ITS DEFAULT TABLESPACE ITS_GIS
TEMPORARY TABLESPACE TEMP;
GRANT DBA, CONNECT, RESOURCE, IMP_FULL_DATEBASE,
EXP_FULL_DATABASE TO ITS_USER;
创建一个叫做 ITS_USER 的用户,口令为 ITS,空间为 ITS_GIS,临时表空间为 TEMP。
没有定额,使用缺省环境文件。并将DBA, CONNECT, RESOURCE, IMP_FULL_DATABASE,
EXP_FULL_DATABASE 等角色权限赋给 ITS_USER。
创建数据库链接
为了支持应用通过分布式数据库系统访问数据和模式对象,必须创建所有必要的数据库
- 6 -
链接。
创建数据库链接所需的权限
数据库链接是本地数据库中的一个指针,允许访问远程数据库中的对象。要想创建一个
数据库链接,必须被授予了相应的权限。下表说明在哪种数据库上对于哪种类型的链接需要
哪种权限。
表 1 数据库链接权限
权限 数据库 所需的权限
CREATE
DATABASELINK
本地 创建私有数据库链
接
CREATE PUBLIC
DATABASE
本地 创建公共数据库链
接
CREATE SESSION 远程 创建所有类型的数
据库链接
指定链接类型
⑴创建私有数据库链接
CREATE DATABASE LINK itslink CONNECT TO its_user IDENTIFIED BY its USING
‘ITSplatform’
创建一个名称为 itslink,通向服务名为 its 的数据库的私有的用户链接,该链接用
its_user/its 的用户标识/口令连接到远程数据库,不考虑已连接的用户。
⑵创建公共数据库链接
CREATE PUBLIE DATABASE LINK CONNECT TO its_user
IDENTIFIED BY its
创建一个通向远程 Driver 数据库的公共的用户链接,该链接用 its_user/its 的用户标识/
口令连接到远程数据库。
⑶创建全局数据库链接
在 Oracle 名称服务器(Oracle Names Server)中定义全局数据库链接。
创建位置透明性
配置了所需的数据库链接之后,就能使用各种工具,来对用户隐藏数据库系统的分布式
特性。【3】
使用视图创建位置透明性
本地视图能为分布式数据库系统中的本地和远程表提供位置透明性。
例如表 TRAFFIC_FLOW 存储在本地数据库 ITSplatform 中,表 INFO_DRIVER 存储在
远程数据库 Driver 中,为了使这些表对系统中的用户透明,可以在本地数据库中创建视图,
该视图联结本地和远程数据。
- 7 -
CREATE VIEW sample_view AS SELECT , , FROM
_flow a, _driver@ b where = ;
当用户访问该视图时,并不需要知道存储数据的物理位置,或者是否访问来自于几个表
的数据。所以对于用户来说,比较容易获得所需要的信息。
使用同义词创建位置透明性
在分布式和非分布式两种环境中,同义词都是很有用的。因为同义词隐藏了下层对象的
标识,也包括它在分布式数据库系统中的位置。如果必须重新命名或移动下层对象,仅需要
重新定义同义词。基于同义词的应用仍然正常运行。
使用过程创建位置透明性
⑴本地过程参照远程数据
过程和函数或是独立的、或者在包中,可以包含参照远程数据的 SQL 语句。当用户或
应用调用过程时,感觉不到正在修改远程表;如果重新命名或移动表,仅需要修改参照该表
的本地同义词,而不需要修改任何调用该过程的过程和应用。
⑵使用本地过程调用远程过程
可以使用本地过程来调用远程过程,之后远程过程就能执行所需的 DML。
⑶使用本地同义词参照远程过程
控制靠数据库链接建立起来的连接
当一条 SQL 语句或远程过程调用中参照了一个全局对象名时,数据库链接就安本地用
户建立起一个到远程数据库中的会话的连接。只有在这之前还没有为该本地用户会话建立连
接时,才会创建该远程连接和会话。
在本地用户的会话期间,已经建立的到远程数据库的连接和会话会一直保持着,除非应
用或用户明确地终止它们。如果通过数据库链接发布一条 SELECT 语句,就会在回滚段放
置一个事务锁,要想重新释放该段,就必须发布一条 COMMIT 或 ROLLBACK 语句。
终止用数据库链接建立起来的远程连接,有益于断开应用不再需要的高开销的连接。可
以用带有 CLOSE DATABASE LINK 子句的 ALTER SESSION 语句,来终止远程连接和会
话。例如发布如下事务:
SELECT * FROM info_driver @;
COMMIT;
如下脚本终止由 Driver_link 数据库链接所指向的远程数据库中的会话:
ALTER SESSION CLOSE DATABASE LINK ;
以上步骤实现后,即完成分布式数据库的构建与设计。
4 系统总结
分布式数据库实际有两种类型,具有远程查询、数据维护与两阶段提交的分布式数据库;
和通过数据管理方法,诸如快照与触发器或其他非数据库管理方法(如 SQL*PLUS 中的
COPY)的复制数据库。本系统采用的是第一种。
在管理一个分布式系统时,系统改变是最大的问题,这与管理一个单独的、自治的数据
库相似,但区别在于每个数据库可以看到其他数据库中的对象,这样就创建了一个依赖于连
- 8 -
续性的系统。
在开发应用过程中,由于大量用到存储过程,发现存储过程有如下优缺点。
优点:
⑴ 性能、保密性好,还可以省很多代码,并且对网络带宽要求也低。
⑵ 存储过程代码可复用性好。
⑶ 避免在程序中还有大量 SQL,可移植性好。
缺点:
⑴ 处理逻辑如果全部放在存储过程里,所有的处理都在数据库服务器上进行,消耗的就
是数据库服务器的 CPU 资源,数据库服务器由于需要较高的可靠性,通常选用的都是价格
昂贵的服务器,对数据库服务器升级通常都花费很大。
⑵ 运行速度: 大多数高级的数据库系统都有 statement cache 的,所以编译 SQL 的花费
没多少影响。但是执行存储过程要比执行 SQL 花费更多(检查权限等),所以对于很简单
的 SQL,存储过程没有什么优势。
⑶ 团队开发: 比起成熟的 IDE,没有什么很好存储过程的 IDE 工具来支持,也就是说,
这些必须手工完成。由于 IDE 的问题,存储过程的开发、调试要比一般程序困难。
使用存储过程的原则是:所有数据访问在应用层封装为数据访问层,在那里,如果 SQL
简单的话,直接用 SQL;如果 SQL 复杂,或者数据交互多且中间数据最后不会用到,使用
存储过程。
由于智能交通系统的地区差异大、智能交通数据库系统的分布性和丰富性等特点,如何让
数据库系统安全地、有效并稳定地运行始终是本系统所要解决的主要问题。分布式数据库技
术引入智能交通系统后,有效的解决了数据分散和集中管理的矛盾,实现了数据的共享和交
换,事实证明,分布式技术在远程数据管理中具有不可替代的作用。
参考文献:
【1】 陈维军,王蕾等译, ORACLE9i PL/SQL 程序设计[M],北京:机械工业出版社, 2002
【2】钟鸣等译,ORACLE 9i 参考手册[M],北京:机械工业出版社,2003
【3】王军德, 王海峰等译,ORACLE 9i UNIX 管理手册[M],北京:机械工业出版社,2003
【4】 刘志敏, ORACLE 数据库应用管理解决放案[M],北京:电子工业出版社,2002
【5】吴安青,薛涛,卫红权译,ORACLE SQL 必备参考[M],中国电力出版社,2003
【6】苏燕强 Oracle 分布式数据库及其应用研究[J],计算机应用与软件 第 21 卷第 8 期 2004
年.
- 9 -
THE ORACLE-BASED DISTRIBUTED DATABASE SYSTEM FOR INTELLIGENT
TRAFFIC SYSTEM
Shuang Gao, Yang Xiao
(School of Computer and Information Technology, Beijing Jiaotong University, Beijing 100044,
China)
Abstract: Under the environment of distributed database system, information can be stored in
databases which are physically separated. To logically look into and update the errors in the distributed
databases on the whole is the key technology of distributed database. Distributed database technology
is the integration of database technology and computer network technology. Apart from the
characteristics of centralized database such as data logical independence and physical independence, it
has its own unique characteristics such distributed independence of data. This paper aims to research
the principle, design and realization technology of Oracle distributed database application system of an
intelligence traffic system. Through initial development and application, the Oracle distributed
database system can meet the basic theoretical design requirement. The results of trial operation
indicate that the plan to establish distributed database in intelligent traffic system is practical and has
great application and development prospects.
Key words: distributed database, intelligent traffic system, Oracle