序 言
ORACLE分布式数据库系统是一个客户/服务器体系结构,其结构如图1。在网络环境中,每个具有多用户处理能力的硬件平台都可以成为服务器,也可成为工作站。多个服务器上的数据库对用户来说图1ORACLE分布式数据库系统结构,是一个逻辑上的单一数据库整体,数据一致性、完整性及安全性都是对这一逻辑上的单个数据库进行控制的。服务器对共享数据的存取 进行管理,而非数据库管理系统的处理操作可以由客户机来完成。
图1 ORACLE分布式数据库系统结构
ORACLE的分布式数据库功能允许用户开发的应用程序把多个数据库当作一个完整的数据库看待。SQL*NET允许多台运行ORACLE产品的计算机相互通讯。ORACLE分布式数据库系统允许用户透明地操作远程数据库的数据,可以用多个数据库满足多个工作组、部门或地区的需求,并把它们连接在一起,使应用程序看起来只有一个大型数据库。用户对此单一逻辑的数据库中数据的任一请求,都被自动分解、自动寻址、自动转换为网络请求,并在相应结点上实现相应的操作。ORACLE 分布式数据库管理系统支持混合的网络拓扑结构,还支持混合网络协议,并自动地进行网络协议转换。
1 创建到另一个数据库的链接
数据库链接用于建立与远程数据的联系,它为远程数据库指定了数据库、用户帐户和口令。数据库链接可以是公共的,也可以是私有的。数据库链接存放在“本地”计算机的数据字典内,当使用时,它作为远程数据库的用户帐户连接到指定的数据库。当操作完成后,数据库链接退出远程的据库。如远程数据库正在运行分布式选件,数据库链接可用于远程数据修改,如果远程数据库没有运行分布式选件,则只能用于远程数据查询。
数据库键接的建立语句为:
CREATE [PUBLIC] DATABASE LINK Linkname
[CONNECT TO username IDENTIFIED By password]
[USING‘connectstring']
其中:Linkname 数据库链接的名称
Username 用户帐户
password 口令
connectstring 远程数据库的连接串
连接串在SQL*NET 2.X版中,为远程数据库的别名。在SQL*NET 1.X版中包括用冒号隔开的三个部分,分别为网络接口驱动程序、服务器名称和数据库实例。
在一个数据库内,可以建立多个数据库链接分别指向不同的数据库。ORACLE 的数据字典视图ALLDBLINKS包含连接用户所创建的公共数据库和私有数据库链接,其结构为:
Name Null? Type
Owner Not null Varchar2(30)
DBLink Not null Varcher2(128)
Username Varcher2(30)
Host Varcher2(255)
Created Not null DATE
而数据字典视图VSERDBLIND,包含一个用户的全部私有数据库链接,其结构为:
Name Null? Type
DBLink Not null Varcher2(128)
Username Not null Varcher2(30)
Password Varcher2(30)
Host Varcher2(255)
Created Not null DATE
用户可用SQL查询语句去查看有哪些数据库链路是可用的。
2 访问远程数据库的数据
数据库链接建立好后,即可访问远程数据库的数据,使用数据链接的方式为:
SELECT col1, col2,…… FROM tablename@ dbLink
在该查询语句中,符号@指示该基表为数据库链接dbLink所指定的存放在远程数据库中的基表。
在应用程序中,用户可以访问远程数据库的数据,但当基表地址改变了,用户希望不修改应用程序。这时,可用同义词为应用程序提供地址的透明性。同义词的建立如下:
CREATE SYNONYM synoname
FOR tablename @ dbLink
同义词在应用程序中隐藏了对象的实际地址。当基表移动时,修改一个同义词定义要比修改应用程序中的所有对象引用容易得多。
3 使用快照
在分布式环境中有一些公用的基表,这些基表存储在某个*地址上,并建立了远程数据库的数据链接。但在访问远程对象时性能非常低。这时,可以使用快照,以提高使用远程数据库数据的应用程序的性能。快照为远程基表提供本地的复制,可以包含远程基表的全部和部分数据,并自动被刷新。创建快照需要ORACLE的分布式选件。
快照可以基于多个基表的查询,可按照预先设置的时间间隔定期自动刷新。建立快照的语句如下:
CREATE SNAPSHOT snapshotname
[STORAGE(STORAGE PARAMETERS)]
[TABLESPACE tablespacename]
[REFRESH [FAST/COMPLETE /FORCE]]
as query
在进行大量操作前,用户希望引用的快照的数据已经被刷新,这时可在应用程序中用手工刷新快照。ORACLE提供了DBMSsnapshot包允许用户手工刷新快照,调用REFRESH过程如下:
DBMSSnapshot.Refresh(snapshotname, refreshtype)
其中:refreshtype 刷新类型。
若对所有快照进行刷新,可用过程:
DBMSsnapshot.RefreshALL
4 远程内嵌过程
如果应用程序要处理远程数据库的大量数据,远程数据库的内嵌对象可以提高应用程序的性能,在远程数据库上执行内嵌的过程或者函数,仅把执行结果返回本地应用程序,可以降低网络负担,改善远程数据操作的性能。
建立远程内嵌过程和函数,通过一个数据库链接执行一个远程的内嵌过程,其调用语法为:
PROCEDUREname @dBLink
数据库链接是创建分布式应用时使用的基本对象,使用前,远程数据库连接的用户帐号必须有使用者所需的特权。一旦数据库链路是可用的,用户就可以通过链接执行远程操作,而不必关心远程数据在什么位置。